管道通信

本文介绍了一个简单的管道通信示例程序,展示了如何通过管道在父子进程间进行数据传递。父进程创建管道并调用fork()函数生成子进程,随后关闭不需要的管道端口,并通过write()函数向管道写入数据;子进程从管道读取数据并通过read()函数显示接收到的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

管道是半双工的,数据只能向一个方向流动,需要双方通信时,需要建立起两个管道。

管道只能用于父子进程或兄弟进程之间的通信。

管道的读写规则:管道两端可分别用描述字fd[0]以及fd[1]来描述。需要注意的是,管道两端是固定了任务的,即fd[0]只能用于读,fd[1]只能用于写。


int pipe_default[2];

void main()
{
pid_t pid;
char buffer[32];
memset(buffer, 0, 32);
/* 传入管道的两个文件描述符,之后就可以直接操作这两个文件描述符了 */
if(pipe(pipe_default) < 0)
{
printf("Failed to create pipe!\n");
return;
}

if(0 == (pid == fork()))
{
close(pipe_default[1]);
/* 延时,程序暂停若干时间,在Linux中,单位为秒 */
Sleep(5);
if(read(pipe_default[0], buffer, 32)>0)
{
printf("Receive data from server, %s!\n", buffer);
}
close(pipe_default[0]);
}
else
{
close(pipe_default[0]);
if(-1 != write(pipe_default[1], "hello", strlen("hello")));
{
printf("send data to client, hello!\n");
}
close(pipe_default[1]);
waitpid(pid, NULL, 0);
}
return;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值