C语言 Linux 使用户可以使用“&”操作符作为命令的结束符。一个以“&”结尾的命令应该与shell并发执行
时间: 2023-12-25 15:06:26 浏览: 19
在Linux中,可以使用C语言的系统调用来实现使用户可以使用“&”操作符作为命令的结束符,并使一个以“&”结尾的命令与shell并发执行。下面是一个简单的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
int main(void)
{
char cmd[1024];
pid_t pid;
while(1) {
printf("Enter command:");
fgets(cmd, 1024, stdin);
if (strcmp(cmd, "exit\n") == 0) {
break;
}
// 判断是否以 "&" 结尾
if (cmd[strlen(cmd) - 2] == '&') {
pid = fork();
if (pid < 0) {
perror("fork error");
exit(1);
}
else if (pid == 0) {
// 子进程执行命令
cmd[strlen(cmd) - 2] = '\0';
system(cmd);
exit(0);
}
else {
// 父进程等待子进程结束
waitpid(pid, NULL, WNOHANG);
}
}
else {
// 不以 "&" 结尾的命令直接执行
system(cmd);
}
}
return 0;
}
```
该代码中,使用fgets从标准输入中读取用户输入的命令,并将命令存储在cmd变量中。然后,判断命令是否以“&”结尾,如果是,就通过fork()创建一个新进程,并在子进程中执行该命令,父进程则等待子进程结束。如果命令不以“&”结尾,则直接在父进程中执行该命令。最后,如果用户输入“exit”,则退出程序。