【发布时间】:2013-02-25 18:56:42
【问题描述】:
我正在尝试创建一个简单的客户端/服务器程序,它允许客户端使用 TCP 套接字连接到服务器,然后允许用户从客户端向服务器端发出系统调用并将回复返回给用户。例如:
客户端问题:ls
服务器会在 /usr/bin 或 w/e 中找到 ls,然后使用 execve() 执行它
我还会有一些类似 lls 或 lmkdir 之类的东西......它将在客户端发出系统调用。
问题是我的 execve() 似乎没有正确运行,因为实际上没有调用“ls”或任何其他命令。我之前只使用本地端(没有服务器或任何东西)完成了同样类型的程序,并且 execve() 工作正常。这是一些代码:
pid = fork();
if(pid){ // Child
printf("child wait");
pid = wait(&status);
printf("Child dead\n");
}else{ // Parent
if(execPath){
execve(execPath, arglist, env);
printf("Command Complete\n");
}
}
由于某种原因,PID 语句的子部分中的 printfs 根本没有执行。我不认为系统实际上会分叉一个进程。由于它是客户端/服务器类型的程序,我需要做一些特别的事情来完成这项工作吗?还是应该完全一样地工作?
谢谢
【问题讨论】:
-
告诉我们
execPath和arglist。 -
这不太可能是你的问题,但你需要测试
fork()是否返回-1,表示错误(比如你的系统上的进程太多)。 -
孩子不能等待父母。父母可以等待孩子。
-
父级运行第一组。孩子运行其他分支。您应该修复代码的这些 cmets。
标签: c network-programming execve