C++笔记--Linux编程(11)-进程通信
Posted xiangjai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++笔记--Linux编程(11)-进程通信相关的知识,希望对你有一定的参考价值。
无名管道
无名管道
无名管道是半双工的,就是对于一个管道来讲,只能读,或者写。
无名管道只能在相关的、有共同祖先的进程间使用。
一个fork或者exec调用创建的子进程继承了父进程的文件描述符。
打开和关闭管道
int pipe(int filedes[2]);
在你从一个管道中读出或者写入数据,这个管道必须存在。
如果成功建立了管道,则会打开两个文件描述符,并把它们的值保存在一个整数数组中。
第一个文件描述符用于读取数据,第二个文件描述符用于写入数据。
如果出错返回-1,同时设置errno 关闭一个管道用close()函数
读写管道
读写管道与读写普通文件方式一样,调用write与read函数即可。
几乎不会在一个进程中打开一个管道仅供进程自己使用,管道是用来交换数据的。
因为一个进程已经能够访问它要通过管道共享的数据,和自己共享数据是没有意义的。
试图对一个管道的两端进行读写操作是一个严重的错误。
读写无名管道示例
int main(int arg, char * args[])
{
int fd[2];char buf[100];int len;
pipe(fd);
memset(buf, 0, sizeof(buf));
int pid = fork();
if (pid == 0)
{
close(fd[1]);
while((len = read(fd[0], buf, sizeof(buf))) >0)
{
write(STDOUT_FILENO, buf, len);
}
close(fd[0]);
}
else
{
close(fd[0]);
strcpy(buf, "hello world\\n");
write(fd[1], buf, sizeof(buf));
close(fd[1]);
waitpid(pid, NULL, 0);
}
return 0;
}
以上是关于C++笔记--Linux编程(11)-进程通信的主要内容,如果未能解决你的问题,请参考以下文章
原创 C++笔记--Linux网络编程(15)-socket