‘壹’ linux C: 1、启动A进程,创建一有名管道,并向其写入一些数据 2、启动B进程,从A创建的有名管道中读出数据
01 #include<stdio.h>
02 #include<unistd.h>
03
04 int main()
05 {
06 int n,fd[2]; // 这里的 fd 是文件描述符的数组,用于创建管道做准备的
07 pid_t pid;
08 char line[100];
09 if(pipe(fd)<0) // 创建管道
10 printf("pipe create error\n");
11
12 if((pid=fork())<0) //利用 fork()创建新进程
13 printf("fork error\n");
14
15 else if(pid>0){ //这里是父进程,先关闭管道的读出端,然后在管道的写端写入“hello world"
16 close(fd[0]);
17 write(fd[1],"hello word\n",11);
18 }
19 else{
20 close(fd[1]); //这里是子进程,先关闭管道的写入端,然后在管道的读出端读出数据
21 n= read(fd[0],line,100);
22 write(STDOUT_FILENO,line,n);
23 }
24 exit(0);
25 }
‘贰’ fork函数是什么
C语言里面,fork函数是用来创建子进程的
‘叁’ linux下C语言编程,管道,p,fork,疑问的是,为什么连用那么多close必须要close 代码如下
文件描述符0,1,2分别表示标准输入标准输出,标准错误输出, 所以在子进程里close(1)是关闭了标准输出, 然后用p(fda[1]);此时未用的最小文件描述符就是1(被关闭);这里关闭fda[0]就是为了说明在子进程是管道的写端(fda[0],不关闭是可以的为了保险起见关闭).然后子进程退出会调用系统程序ls,于是当前的文件目录就被发送到管道中.父进程同理, 就是将标准输出作为管道的读端,它读到的是子进程ls后的内容,对文件计数,
‘肆’ 请问在Linux C中fork()函数的代码之前的代码会重复运行吗
在调用fork()函数之前的代码不会重新执行,子进程是从fork()函数的下一行代码继续执行。