一个进程充当读端,一个进程充当写端
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main(int argc,char * argv[])
{
int pipefd[2];
pid_t cpid;//进程号
char buf;
if(argc!=2)
{
fprintf(stderr,"usage:%s<string>\n",argv[0]);
exit(EXIT_FAILURE);
}
if(pipe(pipefd)==-1)
{
perror("pipe");
exit(EXIT_FAILURE);
}
cpid=fork();//创建子进程,并且获得子进程的进程号
if(cpid==-1)
{
perror("fork");
exit(EXIT_FAILURE);
}
if(cpid==0)//子进程中
{
close(pipefd[1]);//关闭写端
while(read(pipefd[0],&buf,1)>0)//这种方法不高效
{
write(STDOUT_FILENO,&buf,1);
}
write(STDOUT_FILENO,"\n",1);
close(pipefd[0]);
exit(EXIT_SUCCESS);
}
else//父进程中
{
FILE * fp=NULL;//创建文件流变量
char file_src[100];//保存完整文件名
sprintf(file_src,"%s%s%s",getenv("HOME"),"/linux/cproject/",argv[1]);//文件名拼接
printf("file_src:%s\n",file_src);
fp=fopen(file_src,"r+");//打开文件
if(fp==NULL)
{
printf("file open failed\n")
Linux环境编程:进程间通信指南

这篇博客深入探讨了Linux环境下如何实现进程间的通信,通过实例阐述了一个进程作为读取方,另一个进程作为写入方的基本操作和交互机制。
最低0.47元/天 解锁文章
211

被折叠的 条评论
为什么被折叠?



