int handleCommand(char *command) {
pid_t pid;
pid = fork();
if (pid > 0) {
sleep(0.5);
} else if (pid == 0) {
execCommand(command);
//strcat(path[0], command);
//printf("%s", path[0]);
//execve(path[0], path, NULL);
//printf("\n");
} else {
printf("ERROR");
}
}
int execCommand(char *command) {
char* path[] = {"/bin/", NULL};
printf("in execCommand > %s", command );
strcat(path[0], command);
execve(path[0], path, NULL);
printf("\n");
}
首先,你可以看到我将代码直接放在fork发生的函数中。例如,这将显示执行ls命令时预期的输出。但当我把它移动到一个函数时,我不再看到任何输出。
答案 0 :(得分:1)
首先请注意,如果执行命令,printf()
之后的execve()
操作永远不会执行 - execve()
只会在出错时返回,永远不会成功。
接下来,除非在输出结尾处包含换行符,否则打印将不会刷新到标准输出的终端(并且有些情况,例如将标准输出传送到另一个程序,甚至是换行不一定足以刷新标准输出)。因此,您应该在邮件中添加换行符,并且仍然在fflush(stdout);
之前execve()
。