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

《C++多线程编程》学习笔记

C++笔记--Linux编程(13)-守护进程-线程

C++笔记--Linux编程(10)-进程控制 fork系统调用

Linux C++ 运行并与新进程通信

linux进程和进程通信编程