C 中此 fork 概念的正确输出

标签 c output fork atoi

所以出于某种原因我无法在 C 中获得这段代码的输出,所以我只能在下面针对这段代码提出一些概念性问题:

  1. int N = atoi(argv[i]); 是做什么的?它只是定义整数 N 作为数组?
  2. 在for循环中,if (-1 = fork())是什么意思? -1 是否意味着它是一个错误或不是正确的循环?这意味着我不能使用 fork 创建一个 child ?
  3. getpid() 在调用 printf 函数时做了什么?
  4. 正确的输出应该是什么?

代码:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>


int main (int argc, char* argv[] ) {
    int i;
    int N = atoi(argv[i]);
    printf("Create processes....\n");
    for (i = 0; i < N; i++) {
        if (-1 = fork())
            exit(1);
    }
    printf("Process id  = %d\n", getpid());
    fflush(stdout);
    sleep(1);
    return 0;
}

最佳答案

您提出的许多问题只需查看手册页即可得到解答。无论如何,我会尝试解释它们。

1) int atoi(const char *str) str -- 这是整数的字符串表示形式。此函数 atoi 将转换后的整数作为 int 值返回。如果无法执行有效转换,则返回零。

至于您的代码,我在其中存储了垃圾值。所以 atoi(argv[i])) 的值是不可预测的。您可能想为 i 分配一个值。

2) -1 == fork() ,(我假设你在你的代码中犯了一个语法错误,你已经知道了)发生了什么,我们检查返回值fork() 函数,如果查看手册,fork() 用于创建新进程。如果创建新进程失败,则返回 -1。如果这样写就更有意义了 fork() == -1

3) getpid() 返回调用进程的进程ID。 (这通常由生成唯一临时文件名的例程使用。)

4) 正确的输出是什么意思?您是否尝试运行代码并遇到任何错误?请详细说明

如果您使用命令行参数运行更正后的代码,这就是输出的样子。

de@ubuntu:~/Desktop$ ./a.out 2
Create processes....
Process id  = 25405
Process id  = 25406
Process id  = 25408
Process id  = 25407

关于C 中此 fork 概念的正确输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30769451/

相关文章:

从 C 调用二进制文件(同时共享文件描述符)

ssh - Go Lang 执行/产生一个 ssh session

连接 2 个 unicode 字符串 - 如何做到这一点?

创建大型二维数组

hook - 通过修改默认输出钩子(Hook)来选择 block 输出中的输出行

linux - linux-execve : On executing ls command - get error "ls: cannot access/etc : No such file or directory"

c++ - 在 x86_64 上非临时加载 32 位和 64 位值的 C/C++ 内在函数?

c - 为什么未知变量 "mystring"?

double - jupyter笔记本双输出

c - 为什么这段代码中的缓冲区溢出行为与我的预期不同?