.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 是否已用于生产代码。