Tôi đang cố gắng thực hiện một chương trình đơn giản -> thực hiện một chương trình khác -> nói "hello" với tiến trình con đó -> đọc lại nội dung -> in nội dung nhận được.C: dup2, pipe and fork không hoạt động như mong đợi
Chương trình được sử dụng khi trẻ chỉ đợi bất kỳ dòng đầu vào nào và in nội dung nào đó thành giá trị chuẩn như "hello there!"
này được chương trình của tôi "host" (có nghĩa là không làm việc):
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#define IN 0
#define OUT 1
#define CHILD 0
main()
{
pid_t pid;
int pipefd[2];
FILE* output;
char buf[256];
pipe(pipefd);
pid = fork();
if (pid == CHILD)
{
printf("child\n");
dup2(pipefd[IN], IN);
dup2(pipefd[OUT], OUT);
execl("./test", "test", (char*) NULL);
}
else
{
sleep(1);
printf("parent\n");
write(pipefd[IN], "hello!", 10); // write message to the process
read(pipefd[OUT], buf, sizeof(buf));
printf("received: %s\n", buf);
}
}
tôi có được điều này:
child
[.. waits 1 second ..]
parent
received:
tôi thiếu gì? Cảm ơn!
EDIT (test.c):
Bằng cách yêu cầu, đây là chương trình con:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int getln(char line[])
{
int nch = 0;
int c;
while((c = getchar()) != EOF)
{
if(c == '\n') break;
line[nch] = c;
nch++;
}
if(c == EOF && nch == 0) return EOF;
return nch;
}
main()
{
char line[20];
getln(line);
printf("hello there!", line);
fflush(stdout);
return 0;
}
[Theo thông số POSIX] (http://pubs.opengroup.org/onlinepubs/009604599/functions/pipe.html) trên 'pipe', *" Nó không được chỉ định cho dù fildes [0] cũng mở cho viết và cho dù fildes [1] cũng mở để đọc. "* – Jason
Vâng, nếu bạn muốn có một kênh hai chiều được bảo đảm, bạn cần' socketpair' hoặc một pseudoterminal. – zwol