在C语言程序中执行shell命令ls -l,下列选项正确的是 0 system(ls -l); system("ls -l"): execlp("ls -l") execlp(ls -l);
时间: 2023-12-21 09:17:39 浏览: 48
正确的选项是 `system("ls -l")`。
`system(ls -l);` 是错误的,应该将参数用引号括起来。
`execlp("ls -l")` 和 `execlp(ls -l)` 都是错误的,因为 `execlp` 函数需要传入两个参数,第一个是要执行的命令或可执行文件的路径,第二个是参数列表。因此应该写成 `execlp("ls", "-l", NULL)`。
相关问题
编写C语言程序fork6-9.c,完成以下功能:父进程创建子进程, 子进程完成两个功能1)把shell命令“ls -l /bin”命令的执行结果显示出来,2)调用shell程序add6-9.sh,睡眠3秒,退出,然后父进程等子进程退出后,输出“child is over”。shell程序add6-9.sh是输出1+2+..+1202的总和。
下面是一个符合要求的C语言程序,实现了创建子进程,子进程执行shell命令和调用shell程序的功能。
```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 == -1) { // 创建进程失败
printf("Failed to create child process!\n");
return 1;
}
if (pid == 0) { // 子进程
printf("Child process is running...\n");
// 执行shell命令
system("ls -l /bin");
// 调用shell程序
system("./add6-9.sh");
printf("Child process is finished!\n");
exit(0); // 退出子进程
} else { // 父进程
printf("Parent process is running...\n");
waitpid(pid, &status, 0); // 等待子进程结束
printf("Child is over.\n");
}
return 0;
}
```
在子进程中,我们使用了`system()`函数来执行shell命令和调用shell程序。`system()`函数会调用shell进程来执行命令,返回值为命令的退出状态码。在本程序中,我们没有使用返回值,因此可以忽略。在shell程序中,我们使用了`sleep()`函数来使程序休眠3秒。
您需要将上述代码保存为fork6-9.c文件,并将add6-9.sh文件放在同一目录下,然后通过编译器编译运行即可。
exec函数族以执行ls命令c语言
代码示例:
```
#include <stdio.h>
#include <stdlib.h>
int main() {
int ret = system("ls");
if(ret == -1) {
perror("system");
exit(EXIT_FAILURE);
}
return 0;
}
```
该程序使用`system`函数执行`ls`命令,该函数可以执行任意的Shell命令。`system`函数返回命令执行的结果,如果执行出错则返回-1。在本例中,如果`system`函数返回-1,则输出错误信息并退出程序。