c语言pipe函数样例 c语言pyramid函数

利用C语言写一个程序实现两个进程间进行管道通信#include stdio.h
#include stdlib.h
#include errno.h
#include string.h
#define N 10
#define MAX 100
int child_read_pipe(int fd)
{
char buf[N];
int n = 0;
while(1)
{
n = read(fd,buf,sizeof(buf));
buf[n] = '\0';
printf("Read %d bytes : %s.\n",n,buf);
if(strncmp(buf,"quit",4) == 0)
break;
}
return 0;
}
int father_write_pipe(int fd)
{
char buf[MAX] = {0};
while(1)
{
printf("");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1] = '\0';
write(fd,buf,strlen(buf));
usleep(500);
if(strncmp(buf,"quit",4) == 0)
break;
}
【c语言pipe函数样例 c语言pyramid函数】return 0;
}
int main()
{
int pid;
int fd[2];
if(pipe(fd)0)
{
perror("Fail to pipe");
exit(EXIT_FAILURE);
}
if((pid = fork())0)
{
perror("Fail to fork");
exit(EXIT_FAILURE);
}else if(pid == 0){
close(fd[1]);
child_read_pipe(fd[0]);
}else{
close(fd[0]);
father_write_pipe(fd[1]);
}
exit(EXIT_SUCCESS);
}
C语言 为什么管道的任务是固定的f[0]读f[1]写?创建管道时返回的是一对文件描述符,fd[0]读,fd[1]写,这个是pipe()函数的固定实现 。
要说为什么的话,管道是半双工的,一端写入数据流,一端读出数据流,所以至少需要两个文件描述符,一个读一个写 。
在父进程中用pipe创建一条管道线,往管道里写一句话(内容自拟),两个子进程接受这句话,在屏幕上显示#include unistd.h
main()
{
int filedes[2];
char buffer[80];
pipe(filedes);
if(fork()0){
/* 父进程*/
char s[ ] = “hello!\n”;
write(filedes[1],s,sizeof(s));
}
else{
/*子进程*/
read(filedes[0],buffer,80);
printf(“%s”,buffer);
}
}
C语言的fork和pipe推荐你找一本关于linux/unix开发的书看看
里面会有关于fork和pipe的详细描述
linux下的C语言开发(管道通信)姓名:冯成 学号:19020100164 学院:丁香二号书院
转自:
【嵌牛导读】本文将介绍linux下的C语言开发中的管道通信
【嵌牛鼻子】linux C语言 管道通信
【嵌牛提问】linux下的C语言开发中的管道通信是什么?
Linux系统本身为进程间通信提供了很多的方式,比如说管道、共享内存、socket通信等 。管道的使用十分简单,在创建了匿名管道之后,c语言pipe函数样例我们只需要从一个管道发送数据,再从另外一个管道接受数据即可 。
#include stdio.h
#include unistd.h
#include stdlib.h
#include string.h
int pipe_default[2];
int main()
{
pid_t pid;
char buffer[32];
memset(buffer, 0, 32);
if(pipe(pipe_default)0)
{
printf("Failed to create pipe!\n");
return 0;
}
if(0 == (pid = fork()))
{
close(pipe_default[1]);
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 1;
}
下面我们就可以开始编译运行了,老规矩分成两步骤进行:(1)输入gcc pipe.c -o pipe;(2)然后输入./pipe,过一会儿c语言pipe函数样例你就可以看到下面的打印了 。
[test@localhost pipe]$ ./pipe

推荐阅读