簡體   English   中英

C執行管道:execlp工作,而execvp沒有

[英]C executing a pipe: execlp works while execvp doesn't

有人可以向我解釋為什么這會給出正常的行為(ls | cat)

int fd[2]; pipe(fd);
pid_t pid = fork();
if(pid > 0) {
    close(fd[0]);
    close(STDOUT_FILENO);
    dup2(fd[1],STDOUT_FILENO);
    execlp("ls","ls",NULL);
} else if (pid == 0) {
    close(fd[1]);
    close(STDIN_FILENO);
    dup2(fd[0],STDIN_FILENO);
    execlp("cat","cat",NULL);
} else {
    error(1, errno, "forking error");
}

但是當我將execlp更改為execvp時突然沒有輸出任何內容並退出狀態為255? 碼:

int fd[2]; pipe(fd);
pid_t pid = fork();
if(pid > 0) {
    close(fd[0]);
    close(STDOUT_FILENO);
    dup2(fd[1],STDOUT_FILENO);
    char **args = {"ls", NULL};
    execvp("ls",args);
} else if (pid == 0) {
    close(fd[1]);
    close(STDIN_FILENO);
    dup2(fd[0],STDIN_FILENO);
    char **args = {"cat", NULL};
    execvp("cat",args);
} else {
    error(1, errno, "forking error");
}

我真的很想使用execvp因為我將執行帶有可變長度arg列表的命令。 非常感謝幫助。

char **args = {"ls", NULL}; 應該是char *args[] = {"ls", NULL}; 和第二個args (對於cat )相同。

(現在為時已晚,所以我無法想到第一個編譯的原因。至少它會發出警告)。

暫無
暫無

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

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