用c语言如何实现管道的大小,C语言编写管道代码

本文详细介绍了如何使用C语言创建匿名管道,包括创建管道、父子进程的交互、管道读写规则。此外,还提到了命名管道(FIFO)的概念及其创建方法,强调了匿名管道和命名管道的主要区别在于创建与打开方式。
摘要由CSDN通过智能技术生成

什么是管道:

管道是Unix中最古老的进程间通信的形式。

我们把从一个进程链接到另外一个进程的一个数据流称为管道。

本质是有固定大小的内核缓存区。

管道的限制

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

只能用于具有共同祖先的进程(具有亲缘关系的进程)之间进行通信,通常,一个管道由一个进程创建,然后该进程调用fork,此后父、子进程之间就可以用管道。

匿名管道pipe

包含头文件

功能:创建一无名管道

原型:

int pipe(int fd[2]);

参数

fd:文件描述符数组,其中fd[0]表示读端,fd[1]表示写端。

返回值:成功返回0,失败返回错误代码。

国际惯例:上个代码

#include #include #include #include #include #include #include #include #include #include #include #include #define ERR_EXIT(m)\

do \

{ \

perror(m);\

exit(EXIT_FAILURE);\

}while(0)

int main()

{

int pipefd[2];

if(pipe(pipefd) == -1)

{

ERR_EXIT("pipe error");

}

pid_t pid;

pid = fork();

if(pid == 0)

{

close(pipefd[0]);

write(pipefd[1],"hello",5);

close(pipefd[1]);

exit(EXIT_SUCCESS);

}

close(pipefd[1]);

char buf[10] = {0};

read(pipefd[0],buf,10);

printf("buf = %s\n",buf);

return 0;

}

解释一波:

本次实验是子进程写一个字符串,父进程打印出来。

从主函数开始解释:

int pipefd[2];

if(pipe(pipefd) == -1)

{

ERR_EXIT("pipe error");

}

第一行代码是先创建一个数组,为的就是pipe的参数。if(pipe(pipefd)==-1)这行代码的意思就是创建一个管道,如果失败的打印错误信息。

pid_t pid;</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值