execl()调用在main()中成功,在函数中失败

时间:2018-04-03 05:31:58

标签: c process fork child-process execl

我是系统编程的初学者,我目前正在尝试使用套接字,管道等进行基本的服务器/客户端通信

更具体地说,我希望能够作为客户端连接并输入类似'/ bin / echo hello'的内容。然后,服务器将字符串拆分为命令及其参数,并通过调用调用execl()的函数来运行该命令。现在我只是在尝试传递用户输入之前测试exec调用。为什么以下错误将errno设置为EFAULT:错误的地址?

int do_command(char *command) {
    if(strcmp(command, "some_string") == 0) {
        pid_t pid = fork();
        if(pid == -1) {
            perror("fork");
            exit(1);
        }
        if(pid == 0) {
            if (execl("/bin/echo", "/bin/echo/", "hello", (char*)NULL) == -1) {
                perror("execl");
                exit(1);
            }           
        } else {
            printf("parent\n");
        }
    }
}

但是在main()中运行相同的代码可以正常运行'hello'

的输出
int main() {
        pid_t pid = fork();
        if(pid == -1) {
            perror("fork");
            exit(1);
        }
        if(pid == 0) {
            if (execl("/bin/echo", "/bin/echo/", "hello", (char*)NULL) == -1) {
                perror("execl");
                exit(1);
            }           
        } else {
            printf("parent\n");
        }
}

是否无法在函数内运行exec()系统调用?提前谢谢。

0 个答案:

没有答案