0

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

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

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() 系统调用吗?提前致谢。

4

0 回答 0