请解释代码 char* args[] = {"ls", "-l", NULL};
时间: 2023-11-20 21:37:50 浏览: 33
这段代码定义了一个字符指针数组 `args`,数组中的元素是字符串常量 `"ls"`、`"-l"` 和 `NULL`。这种写法通常用于将参数列表传递给执行系统命令的函数(例如 `execvp`),其中第一个参数是要执行的命令,后续的参数是命令的选项和参数。在这个例子中,`ls` 是要执行的命令,`-l` 是 `ls` 命令的选项,`NULL` 表示参数列表的结尾。
相关问题
如何正确使用char **comd
char **comd 是一个指向字符指针数组的指针,通常用于存储一个命令行参数列表。它的使用方法如下:
1. 定义一个字符指针数组并初始化:
```c
char *args[] = {"ls", "-l", NULL}; // NULL 表示参数列表结束
```
2. 将字符指针数组作为参数传递给函数,例如 execvp:
```c
execvp(args[0], args);
```
3. 如果需要动态构建参数列表,可以先分配一个足够大的字符指针数组,再将每个参数的指针存储在数组中:
```c
char **args = malloc((arg_count + 1) * sizeof(char *));
for (int i = 0; i < arg_count; i++) {
args[i] = strdup(arg_list[i]); // 复制参数字符串
}
args[arg_count] = NULL; // 参数列表结束
```
注意,在使用完参数列表后,需要释放每个参数字符串的内存,以及整个字符指针数组的内存。
程序设计。用execl 函数创造进程 1s-1,用execvp 函数创造进程 ps -ef。 提示: 显示当前目录下的文件信息可执行以下语句: (1) execl("/bin/ls", "Is", "-al", NULL) (2) char *arg[] = '"ps", "-ef", NULL): execvp ("ps", arg) ;
可以回答你的问题。对于第一个进程,你可以使用execl函数来创建,代码如下:
```
#include <unistd.h>
#include <stdio.h>
int main() {
while (1) {
execl("/bin/sleep", "sleep", "1", NULL);
}
return 0;
}
```
这个进程会不断地执行sleep命令,每隔一秒钟就会停止执行。
对于第二个进程,你可以使用execvp函数来创建,代码如下:
```
#include <unistd.h>
#include <stdio.h>
int main() {
char *args[] = {"ps", "-ef", NULL};
while (1) {
execvp(args[0], args);
}
return 0;
}
```
这个进程会不断地执行ps命令,显示当前系统中所有进程的详细信息。
请注意,这两个进程会不断地执行,直到你手动结束它们或者重启系统。因此,你可能会需要在执行这些程序之前先备份你的数据。