创建两个进程( 参考fork, wait, waitpid, exec 函数集),在子进程中完成如下要求:(1)创建一个用户,赋予相应权限 在主进程完成如下要求: (1)显示“这是主进程! 注:子进程也可以通过shell脚本先完成,然后调用运行该文件。注意子进程先结束,再主进程结束(使用wait or waitpid)。
时间: 2024-03-15 15:47:51 浏览: 51
好的,下面是具体的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
pid_t pid;
int status;
pid = fork();
if (pid < 0) {
printf("fork error\n");
exit(1);
} else if (pid == 0) { // 子进程
// 创建一个用户,赋予相应权限
// 使用 exec 函数来调用 adduser 命令
execl("/usr/sbin/adduser", "adduser", "testuser", "--ingroup", "testgroup", NULL);
// 如果 execl 函数执行成功,下面的代码将不会被执行
printf("创建用户失败\n");
exit(1);
} else { // 主进程
printf("这是主进程!\n");
// 等待子进程结束,注意子进程需要在主进程之前结束
waitpid(pid, &status, 0);
}
return 0;
}
```
注意,上面的代码中调用了 `execl()` 函数来执行 `adduser` 命令,这个命令需要使用超级用户权限才能执行。如果你的程序没有超级用户权限,可以考虑使用 `system()` 函数来执行命令。例如:
```c
system("/usr/sbin/adduser testuser --ingroup testgroup");
```
这样就可以在子进程中创建一个新用户了。
阅读全文