管道是半双工的,数据只能向一个方向流动,需要双方通信时,需要建立起两个管道。
管道只能用于父子进程或兄弟进程之间的通信。
管道的读写规则:管道两端可分别用描述字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;
}
本文介绍了一个简单的管道通信示例程序,展示了如何通过管道在父子进程间进行数据传递。父进程创建管道并调用fork()函数生成子进程,随后关闭不需要的管道端口,并通过write()函数向管道写入数据;子进程从管道读取数据并通过read()函数显示接收到的信息。
1680

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



