本文共 1135 字,大约阅读时间需要 3 分钟。
有名管道与无名管道是相对的,今天我们就来说说无名管道pipe吧!
无名管道与fork的使用:
下面我们还是通过一个小小的例子来说明一下无名管道吧!
#include<stdio.h> #include<unistd.h> #include<string.h> #include<sys/wait.h> #include<stdlib.h> int main() { pid_t pid; char inf[30]; int fd[2],status; float result=0; char buf[30]; char delim[]=" "; char *argv[3]={NULL}; pipe(fd); pid=fork(); if(pid==-1) { printf("fail"); } else if(pid==0) { int i=0; int h,w; close(fd[1]); while(1) { read(fd[0],buf,10); argv[0]=strtok(buf,delim); if(strcmp(buf,"exit")==0) { exit(1); } while(argv[i]!=NULL) { argv[++i]=strtok(NULL,delim); } //slprintf();各种类型转换成字符串类型 //atoi atoul atof h=atoi(argv[0]); w=atoi(argv[1]); result=w/(h*h/10000); printf("result=%.2f\n",result); if(result>25) { printf("胖啦!\n"); } else if(result<25) { printf("瘦啦!\n"); } else { printf("保持体形!\n"); } } } else { close(fd[0]); while(1) { printf("please input your height and weight\nif out,please 'exit'\n"); gets(inf); write(fd[1],inf,strlen(inf)+1); //signal(status,); sleep(1); if(waitpid(pid,NULL,WNOHANG)>0) { exit(1); }
} } return 0; }
1.fork一个父子进程
2.父进程进行写入,子进程输出
3.由于子进程是父进程的复制,所以在使用管道读写的时候要注意,
父进程要关闭管道的读close(fd[0]),
子进程要关闭管道的写close(fd[1]);
转载地址:http://woqbb.baihongyu.com/