资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

pipe函数的使用c语言 pipe 函数

C语言创建管道

#include stdio.h

广丰网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。创新互联公司2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联

#include stdlib.h

#include string.h

#include assert.h

int main(int argc,char *argv[])

{

int pd[2];/*用于保存管道文件描述符*/

char out[80],str[]="safasfsa";/*str是要写入的字符串,out用于保存从管道读取的字符串*/

assert(pipe(pd)!=-1);/*断言用于确定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语言中的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中读取数据

linux下c语言pipe无名管道 main函数创建两个进程p1和p2,p1把一个文件名通过管道给main进程,main进程打开

#include stdio.h

main()

{

int i,r,p1,p2,fd[2];

char buf[50],s[50];

pipe(fd); //创建匿名管道,fd[0]为读端,fd[1]为写端

while((p1=fork())==-1); //创建子进程P1,直至成功为止(p1!=-1)

if(p1==0) //子进程P1执行逻辑

{

lockf(fd[1],1,0); //锁定管道写端,保证写入数据的完整性

sprintf(buf,"child process P1 is sending messages!\n"); //在buf中填入准备写入管道的信息数据

printf("child processP1!\n"); //打印“子进程P1正在运行”

write(fd[1],buf,50); //向管道写端fd[1]写入buf中的数据,写完后该数据即可以从读端fd[0]读出

sleep(5); //睡眠5秒

lockf(fd[1],0,0); //解锁管道写端

exit(0); //子进程P1退出

}

else //主进程的执行逻辑

{

while((p2=fork())==-1); //创建第二个子进程P2

if(p2==0) //子进程P2的执行逻辑

{

lockf(fd[1],1,0); //锁定管道写端,保证数据写入完整

sprintf(buf,"child process P2 is sending messages!\n"); //在buf中填入准备写入管道的信息数据

printf("child processP2!\n"); //打印“子进程P2正在运行”

write(fd[1],buf,50); //向管道写端fd[1]写入buf中的数据,写完后该数据即可从读端fd[0]读出

sleep(5); //睡眠5秒

lockf(fd[1],0,0); //解锁管道写端

exit(0); //子进程P2退出

}

//以下为主进程执行逻辑

wait(0); //等待某个子进程退出

if(r=read(fd[0],s,50)==-1) //从管道读端fd[0]读取P1或者P2写入的数据(视哪个子进程抢先执行到lockf函数)

{

printf(:can't read pipe\n"); //读取失败,打印错误信息

}

else

{

printf(:%s\n",s); //打印出读到的信息数据

}

wait(0); //等待第二个子进程退出

if(r=read(fd[0],s,50)==-1) //从管道读端fd[0]读取出P1或者P2写入的数据(视哪个子进程后执行到lockf函数)

{

printf(:can't read pipe\n"); //读取失败,打印错误信息

}

else

{

printf(:%s\n",s); //打印读取到的信息数据

}

exit(0); //主进程退出

}

}

总的说来,就是主进程创建了两个子进程P1、P2,这两个子进程分别向管道写入了一行文字,然后主进程从管道另一端将这两行文字读出并打印出来

由于进程的并发执行性,哪个子进程的信息先写到管道是随机的,因此该程序每次运行的输出可能并不相同,两行文字之间可能会相互交换

Linux下C语言问题 pipe问题(急)

你没给分啊

#include stdio.h

#include string.h

#include unistd.h

#include sys/types.h

#define BUFSIZE 10

int main(int argc, char *argv[]) {

int i = 1;

int bytesin;

pid_t childpid;

int pfd[2];

if (argc 2) {

fprintf(stderr, "Usage: %s command arg1 arg2 ...\n", argv[0]);

return 1;

}

if (pipe(pfd) == -1) {

perror("Failed to create the pipe");

return 1;

}

bytesin = strlen(argv[1]);

childpid = fork();

if (childpid == -1) {

perror("Failed to fork");

return 1;

}

while (argv[i] != NULL) {

if (childpid) {

if (write(pfd[1], argv[i], strlen(argv[i])) != -1)

printf("parent write over.\n");

}else {

bytesin = read(pfd[0], argv[i], BUFSIZE);

fprintf(stderr, "[%ld]: %.*s\n", (long) getpid(), bytesin, argv[i]);

}

++i; ############关键是这里

}

return 0;

}


标题名称:pipe函数的使用c语言 pipe 函数
文章URL:http://cdkjz.cn/article/doehdoc.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220