[Aspell] [C] [Pipes] Дочерний и родительский - Перенаправление с конвейером - Unix C - PullRequest
0 голосов
/ 30 ноября 2018

Код:

int pf[2], fp[2];

pipe(pf);
pipe(fp);
pid_t parent = getpid();
pid_t child = fork();
char str[20];
char word[20] = "aspell -a test";
char buffer[100];
int count;
//dup2(0, pf[0]);

if (child != 0) {
    char resu[100];

    printf("I am the parent process. My PID is %d\n", parent);

    sleep(5);
    printf("Escrevi a palavra...\n");
    write(pf[1], "teste\n", strlen("teste\n"));
    close(pf[1]);
    sleep(2);
    count = read(fp[0], resu, strlen(resu));
    close(fp[0]);


    printf("resultado: %s\n", resu);

else {
    //printf("I am the child process. My PID is %d\n", getpid());
    //printf("    My parent's PID is %d\n", parent);
    execlp("aspell", "aspell", "-a", NULL);
    dup2(pf[0], 0);
    dup2(1, fp[1]);
    close(1);
    //close(pf[0]);

    execlp("aspell", "aspell", "-a", NULL);

    sleep(2);

    printf("Child process terminating\n");   
}

Для приведенного выше кода всегда выводится

resultado:

Почему этослучиться?Fp [0] не читается правильно?

"Resultado:" должен быть stdout дочернего процесса и просто либо он выглядит мусором, либо ничего не появляется.

...