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