C语言中的fork和pipe的问题fork ----- fork ----- fork
加入进程A fork出了进程B,然后进程B又fork出了进程C,进程C又fork出了进程D
pipe是管道,只有一个入口,一个出口 。可以把入口和出口分别放到父子进程中 。
父进程负责读,子进程负责写 。或者子进程读 , 父进程写 。
你的例子里,在进程A里创建管道PipeA,然后fork出进程B 。进程AB之间使用PipeA通信 。
进程B再创建PipeB , 然后进程BC之间使用PipeB通信 。
进程C再创建PipeC,然后进程CD之间使用PipeC通信 。
如果想把进程A的数据传递给进程D,那么应该:进程A向PipeA写入数据,进程B从PipeA中读取数据,然后再写入PipeB,进程C从PipeB中读取数据 , 然后再写入PipeC,进程D从PipeC中读取数据
C语言创建管道#include stdio.h
#include stdlib.h
#include string.h
#include assert.h
int main(int argc,char *argv[])
{
int pd[2];/*用于保存管道文件描述符*/
char out[80],str[]="safasfsa";/*str是要写入c语言pipe()函数的字符串c语言pipe()函数,out用于保存从管道读取的字符串*/
assert(pipe(pd)!=-1);/*断言用于确定pipe()函数执行成功c语言pipe()函数 , 如果管道创建失败,则pipe()返回-1*/
if (!fork()) write(pd[1],str,strlen(str));/*创建子进程,并将字符串写入管道*/
else {
read(pd[0],out,strlen(str));/*在主进程中从管道中读取子进程写入的字符串*/
printf("%s\n",out);/*主进程中输出 。*/
}
return 0;
}
c语言如何获取控制台输出1、向控制台输出信息可以使用c语言函数库中的printf() , 直接打印出信息,比如:
printf("hello world\n");
2、要将控制台输出的信息保存,则可以在控制台中使用或者将输出信息输出到文件或者追加到文件 , 和的区别在于会覆盖原来的文件,而会在文件末尾添加 。以hello wrold为例:
#include stdio.h
int main()
{
printf("hello world\n");
return 0;
}
生成程序后,进入程序所在的目录,如下图所示:
C语言 为什么管道的任务是固定的f[0]读f[1]写?创建管道时返回的是一对文件描述符c语言pipe()函数 , fd[0]读c语言pipe()函数,fd[1]写c语言pipe()函数,这个是pipe()函数的固定实现 。
要说为什么的话,管道是半双工的,一端写入数据流,一端读出数据流,所以至少需要两个文件描述符 , 一个读一个写 。
【c语言pipe函数 c语言 pipe】c语言pipe()函数的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于c语言 pipe、c语言pipe()函数的信息别忘了在本站进行查找喔 。
推荐阅读
- 怎么在电脑下载qq,怎么在电脑下载炫舞
- 为什么西瓜视频没有缓存,西瓜视频为什么不能缓存
- 战略游戏红龙,战争游戏红龙战术技巧
- linux全部命令 linux全部命令不能用华为
- 小米电视怎么搞中文字幕,小米电视怎么设置中文字幕
- ios怎么下载幻位,ios怎么下载快连
- 竞技游戏属于什么体育行业,竞技游戏是不是体育
- linux中批量替换命令 linux批量替换文件中的字符串
- 车载视频要什么下载软件,车载视频软件哪个好些