我是系统编程的初学者,我目前正在尝试使用套接字、管道等进行基本的服务器/客户端通信
更具体地说,我希望能够作为客户端连接并输入“/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() 系统调用吗?提前致谢。