C 允许多个进程读取相同数据的管道
我编写了以下代码:C 允许多个进程读取相同数据的管道,c,macos,pipe,C,Macos,Pipe,我编写了以下代码: #include <stdio.h> #include <unistd.h> #include <sys/wait.h> #define N 10 int fd[2]; void son () { int data=0; if(read(fd[0], &data, sizeof(int))==sizeof(int)) fprintf(stderr,"%d\n",data); else fprintf(stder
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#define N 10
int fd[2];
void son ()
{
int data=0;
if(read(fd[0], &data, sizeof(int))==sizeof(int))
fprintf(stderr,"%d\n",data);
else
fprintf(stderr,"Read failed\n");
}
int main(int argc, char** argv)
{
pid_t sons[N];
pipe(fd);
int data=5;
for(unsigned int i=0; i<N;i++)
{
sons[i]=fork();
if(!sons[i])
{
son();
break;
}
}
write(fd[1], &data, sizeof(int));
data=6;
}
#包括
#包括
#包括
#定义n10
int-fd[2];
虚子()
{
int数据=0;
if(读取(fd[0],&data,sizeof(int))==sizeof(int))
fprintf(stderr,“%d\n”,数据);
其他的
fprintf(stderr,“读取失败\n”);
}
int main(int argc,字符**argv)
{
皮迪儿子[N];
管道(fd);
int数据=5;
对于(unsigned int i=0;i当您fork()时执行son(),然后跳出循环-但这不是子进程的结束!然后子进程继续并写入fd[1]。当您fork()时执行son(),然后跳出循环-但这不是子进程的结束!然后子进程继续并写入fd[1]
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#define N 10
int fd[2];
void son ()
{
int data=0;
if(read(fd[0], &data, sizeof(int))==sizeof(int))
fprintf(stderr,"%d\n",data);
else
fprintf(stderr,"Read failed\n");
if(read(fd[0], &data, sizeof(int))==sizeof(int))
fprintf(stderr,"%d\n",data);
else
fprintf(stderr,"Read failed\n");
}
int main(int argc, char** argv)
{
pid_t sons[N];
pipe(fd);
int data=5;
for(unsigned int i=0; i<N;i++)
{
sons[i]=fork();
if(!sons[i])
{
son();
break;
}
}
write(fd[1], &data, sizeof(int));
data=6;
write(fd[1], &data, sizeof(int));
return 0;
}