当前位置: 技术问答>linux和unix
vi下头文件unistd.h
来源: 互联网 发布时间:2016-05-01
本文导语: 我在linux的vi下编辑一个程序: 用系统调用pipe( )建立一管道,二个子进程P1和P2分别向管道各写一句话: Child 1 is sending a message! Child 2 is sending a message! 父进程从管道中读出二个来自子进程的信息...
我在linux的vi下编辑一个程序:
用系统调用pipe( )建立一管道,二个子进程P1和P2分别向管道各写一句话:
Child 1 is sending a message!
Child 2 is sending a message!
父进程从管道中读出二个来自子进程的信息并显示。
代码如下:
我试了一下这个程序可通过编译,而且运行结果也是预期的。
但是这个程序没有包含头文件unistd,
而pipe()的头文件是unistd,那为什么不含unistd程序也能达到预期的效果呢?
用系统调用pipe( )建立一管道,二个子进程P1和P2分别向管道各写一句话:
Child 1 is sending a message!
Child 2 is sending a message!
父进程从管道中读出二个来自子进程的信息并显示。
代码如下:
#include
int pid1,pid2;
int main( )
{
int fd[2];
char outpipe[100],inpipe[100];
pipe(fd); /*创建一个管道*/
while ((pid1=fork( ))==-1);
if(pid1==0)
{
lockf(fd[1],1,0);
sprintf(outpipe,"child 1 process is sending message!");
/*把串放入数组outpipe中*/
write(fd[1],outpipe,50); /*向管道写长为50字节的串*/
lockf(fd[1],0,0);
exit(0);
}
else
{
while((pid2=fork( ))==-1);
if(pid2==0)
{
lockf(fd[1],1,0); /*互斥*/
sprintf(outpipe,"child 2 process is sending message!");
write(fd[1],outpipe,50);
lockf(fd[1],0,0);
exit(0);
}
else
{
wait(0); /*同步*/
read(fd[0],inpipe,50); /*从管道中读长为50字节的串*/
printf("%sn",inpipe);
wait(0);
read(fd[0],inpipe,50);
printf("%sn",inpipe);
exit(0);
}
}
return 0;
}
我试了一下这个程序可通过编译,而且运行结果也是预期的。
但是这个程序没有包含头文件unistd,
而pipe()的头文件是unistd,那为什么不含unistd程序也能达到预期的效果呢?
|
那是因为你的警告级别不够,试这个:
gcc -g -O2 -Wall
|
linux 下 gcc 自动连接一些常用的函数
用 -Wall 选项就可以看到这堆 warning
lz 应该加上头文件 unistd.h 和 stdlib.h
用 -Wall 选项就可以看到这堆 warning
lz 应该加上头文件 unistd.h 和 stdlib.h
test.c: In function 'main':
test.c:3: warning: implicit declaration of function 'pipe'
test.c:3: warning: implicit declaration of function 'fork'
test.c:3: warning: implicit declaration of function 'lockf'
test.c:3: warning: implicit declaration of function 'write'
test.c:3: warning: implicit declaration of function 'exit'
test.c:3: warning: incompatible implicit declaration of built-in function 'exit'
test.c:3: warning: incompatible implicit declaration of built-in function 'exit'
test.c:3: warning: implicit declaration of function 'wait'
test.c:3: warning: implicit declaration of function 'read'
test.c:3: warning: incompatible implicit declaration of built-in function 'exit'
|
编译的时候没有警告吗?可能是编译器会自动连接一些常用的函数吧。
|
unistd.h不是c语言的东西,是linux/unix的系统调用,包含了许多 U N I X系统服务的函数原型
|
K ------->when the cursor in the function position while edited by vi
|
貌似已经解决了吧.