Через два не хочет, а через один - хочет. В общем вот:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *const argv[])
{
int in[2], out[2], len;
char buf[80];
if (pipe(in) != 0 || pipe(out) != 0 )
{
perror("pipe");
return EXIT_FAILURE;
}
if (fork() == 0)
{
close(0);//
close(1);
dup(in[0]);//
dup(out[1]);
close(in[1]);
close(out[0]);
execlp("ftp", "ftp", "-n", "ftp.mozilla.org", (char *)NULL);
//execlp("pwd", (char *)NULL);
perror("execlp");
return EXIT_FAILURE;
}
close(in[0]);
close(out[1]);
setvbuf(stdout, NULL, _IONBF, 0);
while (len = read(out[0], (void *)buf, sizeof(buf)-1), len > 0)
{
buf[len] = 0;
printf("%s", buf);
}
close(in[0]);
close(out[1]);
return EXIT_SUCCESS;
}
Компилю, пускаю:
Но ничего не выводится!
Если закомментировать 18 и 21 строчки (в конце них стоит //), вывод от ftp выводится.
Если вместо ftp пускать pwd, то вывод есть, даже с двумя пайпами. Думал что это потому что pwd stdin не использует, но от cat вывод тоже выводится, если ему данных послать вот так: write(in[1], «test\n», 5);.
Люди добрые, подскажите, почему так? Как исправить?
pipe