Linux下用管道实现进程全双工通信的代码

本文提供了一段Linux下利用管道实现进程间全双工通信的代码示例,包括主程序和外部程序的详细说明,注释清晰。
摘要由CSDN通过智能技术生成

直接看代码, 里面已经有注释了。

 

主程序:

int main()
{
    char buf[256];
	int fdin[2]; 
	int fdout[2];
	int pid;
	int size;

	// 创建全双工管道
    pipe(fdin);
    pipe(fdout);

    pid = fork();
    if (pid == 0){
		// 子进程... 
        close(fdin[1]);     // 子进程用不了fdin的输出
        close(fdout[0]);

		// 重定向标准输入和标准输出到管道
		// 子进程从标准输入(fdin[0])读取,主进程往fdin[1]写入
		// 子进程向标准输出(fdout[1]写入),主进程从fdout[0]读取
		if (dup2(fdin[0], STDIN_FILENO)   != STDIN_FILENO
	        || dup2(fdout[1], STDOUT_FILENO) != STDOUT_FILENO) {
	        fprintf(stderr, "dup2() failed!\n");
	    }

	    close(fdin[0]);
	    close(fdout[1]);

		// 执行外部程序 test2
    	execlp("./test2", "test", NULL);
    	fprintf(stderr, "Failed to execlp(): %s\n", errno);

    	exit(0);
    }

    // 发送 "Hello world" 给子进程, 
    // 子进程可以从fdin[0]读取
	write(fdin[1], "Hello world&
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值