簡體   English   中英

使用管道在子進程上執行wc命令

[英]Executing wc command on child process using pipeline

我正在編寫一個在子進程上執行單詞計數命令的程序。 父進程應將用戶通過管道輸入的一系列行發送給子進程。 我嘗試這樣做,但最終出現錯誤。 這是我的代碼:

int main ()
{
    int fd[2];
    char buff;
    int pid;
    int pip;
    pid = fork();
    pip = pipe(fd);

    if (pid != 0)
    {
        pip = pipe(fd);
        if (pipe == 0)
        {
            while (read(fd[0], &buff,1) > 0 )
            {
                write (fd[1],&buff,1);      
            }
            close(fd[0]);
            _exit(0);
        }
    }
    else
    {
        dup2(fd[1],1);
        close(fd[1]);
        execlp ("wc","wc",NULL);
        _exit(-1);
    }
    return 0;
}

我還嘗試使用dup2將來自子級的標准輸入與父進程創建的管道的讀取描述符關聯。 但我收到此錯誤: wc: standard input: Input/output error 我該如何解決?

更新 (錯誤已解決,但出現無限循環)

int main ()
{
    int fd[2];
    char buff;
    int pid;
    int pip;

    pip = pipe(fd);

    if (pip == 0)
    {
             pid = fork();
         if (pid != 0)
          {     

            while (read(fd[0], &buff,1) > 0 )
            {
                write (fd[1],&buff,1);      
            }
            close(fd[0]);

          }
          else {

        dup2(fd[1],1);
        close(fd[1]);
        execlp ("wc","wc",NULL);
        _exit(-1);
          }
    }
    return 0;
}
#include <unistd.h>

int main ()
{
    int fd[2];
    char buff;
    int pid;
    int pip;
    int status;

    pip = pipe(fd);

    if (pip == 0)
    {
        pid = fork();
        if (pid != 0)
        {
            close(fd[0]);
            while (read(0, &buff,1) > 0 )
            {
                write (fd[1],&buff,1); /* your old loop forwarded internally in the pipe only*/
            }
            close(fd[1]);
         } else {
             dup2(fd[0],0);  /* you had dup2(fd[1], 1), replacing stdout of wc with the write end from wc */
             close(fd[0]);
             close(fd[1]);
             execlp ("wc","wc",NULL);
             _exit(-1);
          }
    }
    wait(&status); /* reap the child process */
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM