通过execve()调用echo打印额外的字符

时间:2013-12-31 17:31:48

标签: c exec fork

我编写了一个小程序来测试我对fork / exec / wait的了解,但程序表现得非常奇怪。这是程序:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

int main() {
    pid_t child = fork();
    if(child != 0) {
        printf("this is the parent\n");
        int status;
        waitpid(child, &status);
        return status;
    }
    else {
        char* const args[] = {"/bin/echo", "hi"};

        execv("/bin/echo", args);
    }
}

我看到的输出是:

this is the parent
hi 0 0
   0 1

这些0和1是我的Linux终端上显示的一个字符。我已经尝试在每个字符串的末尾显式添加\ 0,但这似乎没有改变任何东西。

有谁知道为什么我会看到这些额外的角色?

1 个答案:

答案 0 :(得分:3)

您必须使用args终止NULL数组:

char* const args[] = {"/bin/echo", "hi", NULL};

否则echo不知道在哪里停止阅读其论点。