繁体   English   中英

如何从另一个文件读取管道输入?

[英]How to read pipe input from another file?

在我的程序(main.c)中,我派生了一个进程,然后需要通过管道将数据发送到子进程。 execl系统调用后,子进程继续在process.c文件中使用。 通过将该子级的标准输入设置为其父级的文件描述符,我尝试将数据从父级进程发送到子级进程。 但是子进程无法获得任何输入,我不明白为什么会出现此问题。 提前谢谢了。

main.c

#define PIPE(fd) socketpair(AF_UNIX, SOCK_STREAM, PF_UNIX, fd)

...

char* data="data";
int fd[2];
PIPE(fd); 
write(fd[0],data,sizeof(data));

if(fork()==0){
     dup2(fd[0],0);
     close(fd[0]);
     close(fd[1]);
     execl("process","process",x,y,0);}

进程

...

char* data;
read(0,data,10);
printf("%s\n",data);

您正在同一套接字上读写。

使用socketpair(2)创建一对套接字允许您进行双向通信,以便从第二个套接字读取写入第一个套接字的数据,反之亦然。

这里fd[0]指的是父进程和子进程中的同一套接字,因此父进程正在写入第一个套接字,而子进程则试图从同一套接字读取。 父级写入的数据将出现在第二个套接字fd[1]中。

因此,您需要执行以下操作:

dup2(fd[1], 0); // make stdin of the child refer to the *second* socket

char data[11] = {'\0'}; // make sure to allocate space
read(STDIN_FILENO, data, sizeof(data) - 1);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM