gpt4 book ai didi

c - .c 中的操作系统进程

转载 作者:行者123 更新时间:2023-11-30 17:02:57 25 4
gpt4 key购买 nike

谁能解释一下 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 指针,并且托管系统的所有先前先例也要求它(“独立” - 又名嵌入式——系统在不同的规则下运行,即使是现在)。

并非所有程序都需要命令行参数,但它们是几乎所有操作系统的组成部分。

如果使用两个参数,C 标准需要以下定义:

int main(int argc, char *argv[])
...

我怀疑 K&R C 是否已在生产代码中使用。

关于c - .c 中的操作系统进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36342373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com