Я пытаюсь инициировать простой канал в C
(используя CygWin и Dev-C++) для передачи значений между родителем и одним дочерним. Вот parent
код (pipesnd.c):Не удается правильно прочитать значение из трубы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int FIFO[2];
char *msg = "This is a test message";
char str[10];
if (pipe(FIFO) == -1)
{
printf("cannot create pipe\n");
exit(1);
}
write(FIFO[1], msg, strlen(msg));
sprintf(str, "%d", FIFO[0]);
printf("I am the parent and this was in the pipe: %s \n", str);
fflush(stdout);
switch (fork())
{
case 0:
execl("c:/Dev-Cpp/Lift 2/pipercv", "pipercv", str, NULL);
exit(1);
case -1:
perror("fork() failed:");
exit(2);
default:
}
exit(0);
}
И child
код (pipercv.c):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NBUF 100
int main(int argc, char *argv[])
{
int fd;
char buf[NBUF];
if (argc != 2)
{
printf("expect pipercv fd\n");
exit(1);
}
fd = atoi(argv[1]);
read(fd, buf, 20);
buf[20] = '\0';
printf("I am the child and this was in the pipe: %s \n", buf);
fflush(stdout);
sleep(10);
}
Результат:
Как я могу передать/видеть все сообщение в дочернем и родительском (двунаправленное)?
опубликованный код не компилируется. Он отсутствует. '#include' 'оператор' switch' имеет несколько проблем в синтаксисе, которые можно исправить, если положить конец 'default:' case с 'break;' –
user3629249
: 'printf (" ожидать pipercv fd \ n "); 'действительно должен быть оператором USGE, похожим на:' printf («ИСПОЛЬЗОВАНИЕ:% s fileDescriptor \ n», argv [0]); ' – user3629249
в дочернем, возвращаемое значение из вызова' read() ' должен использоваться как смещение в buf [] для вставки '\ 0'. – user3629249