Через два не хочет, а через один - хочет. В общем вот:
#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;
}
gcc main.c && ./a.exe
Люди добрые, подскажите, почему так? Как исправить?