【发布时间】:2018-10-10 13:04:10
【问题描述】:
这段代码的重点是模拟一个shell:
1) 从标准输入请求命令,直到按下 CTRL+D 或输入“exit”作为输入。
2) 分叉进程。
3) 父级等待子级执行命令。
4) 孩子执行命令。
5) 转到 1
Execvpe 有效(因为 p 指向 PATH),但除非我输入 /bin/%command%,否则 execve 只会触发 perror()。我究竟做错了什么?感谢您的帮助!
/bin/env 在我的 nano-shell 中的输出:PATH=/bin
8 #define SIZE 50
9 #define input fgets(buffer, SIZE, stdin)
10 #define exitcheck strcmp(strtok(buffer, "\n"), "exit")
11
12 int main(int argc, char *argv) {
13 char buffer[SIZE] = "echo";
14 char* const command[] = {buffer, NULL};
15 char* const envp[] = {"PATH=/bin", NULL};
16
17 do {
18 printf("nano-shell $ ");
19 pid_t pid = fork();
20 // Parent
21 if (pid > 0) {
22 int status;
23 waitpid(pid, &status, 0);
24 }
25 // Child
26 else if (pid == 0) {
27 execve(command[0], command, envp);
28 perror("Error: ");
29 _exit(1);
30 }
31 } while(input != NULL && exitcheck != 0 );
32
33 exit(EXIT_SUCCESS);
34 }
【问题讨论】:
标签: unix fork exec systems-programming