.c 中的操作系统进程
Operating system processes in .c
谁能解释一下这段代码中 argc 和 argv 的作用以及为什么这些变量是主函数中的参数?我们在讲座示例中展示了这两个变量,所以我在使用它们时不知道它们的作用。
main (argc, argv)
char *argv[];
{
int fd;
extern int errno;
if(argc < 2){
fprintf(stderr, "No file\n");
exit(1);
}
if((fd = creat(argv[1], 0777)) < 0){
fprintf(stderr, "Cannot creat file %s\n", argv[1]);
exit(1);
}
switch (fork()) {
case -1:
fprintf(stderr, "Fork error\n");
exit(1);
case 0:
close(1);
dup(fd);
close(fd);
execl("/bin/pwd", "pwd", NULL);
perror("Exec");
break;
default:
close(fd);
}
exit(0);
}
argc
是一个 int
为程序提供操作系统传递给程序的参数数量。 argv
是一个以 null 结尾的字符串数组,其中包含传递给程序的实际参数。
确切的参数取决于操作系统,但 argv[0]
通常是包含路径的可执行文件名称,而 argv[argc]
始终是 NULL
指针。 (感谢@WeatherVane 指出了这一点)所有版本的 C 标准都要求 argv[argc]
是一个 NULL 指针,并且托管系统的所有先前先例也需要它('freestanding' — 又名嵌入式 — 系统 运行 在不同的规则下,即使是现在)。
并非所有程序都需要命令行参数,但它们几乎是所有操作系统的组成部分。
如果使用两个参数,C 标准要求如下定义:
int main(int argc, char *argv[])
...
我怀疑 K&R C 是否已用于生产代码。
谁能解释一下这段代码中 argc 和 argv 的作用以及为什么这些变量是主函数中的参数?我们在讲座示例中展示了这两个变量,所以我在使用它们时不知道它们的作用。
main (argc, argv)
char *argv[];
{
int fd;
extern int errno;
if(argc < 2){
fprintf(stderr, "No file\n");
exit(1);
}
if((fd = creat(argv[1], 0777)) < 0){
fprintf(stderr, "Cannot creat file %s\n", argv[1]);
exit(1);
}
switch (fork()) {
case -1:
fprintf(stderr, "Fork error\n");
exit(1);
case 0:
close(1);
dup(fd);
close(fd);
execl("/bin/pwd", "pwd", NULL);
perror("Exec");
break;
default:
close(fd);
}
exit(0);
}
argc
是一个 int
为程序提供操作系统传递给程序的参数数量。 argv
是一个以 null 结尾的字符串数组,其中包含传递给程序的实际参数。
确切的参数取决于操作系统,但 argv[0]
通常是包含路径的可执行文件名称,而 argv[argc]
始终是 NULL
指针。 (感谢@WeatherVane 指出了这一点)所有版本的 C 标准都要求 argv[argc]
是一个 NULL 指针,并且托管系统的所有先前先例也需要它('freestanding' — 又名嵌入式 — 系统 运行 在不同的规则下,即使是现在)。
并非所有程序都需要命令行参数,但它们几乎是所有操作系统的组成部分。
如果使用两个参数,C 标准要求如下定义:
int main(int argc, char *argv[])
...
我怀疑 K&R C 是否已用于生产代码。