C中此fork概念的正确输出

C中此fork概念的正确输出,c,output,fork,atoi,C,Output,Fork,Atoi,因此,出于某种原因,我无法用C语言获得这段代码的输出,因此我只能问一些关于这段代码的概念性问题: 什么是intn=atoi(argv[i])做什么?它只是定义整数N吗 作为一个数组 在for循环中,if(-1=fork())意味着什么?-1表示它是一个错误还是不是正确的循环?这意味着我不能用fork创建子对象 调用printf函数时,getpid()做什么 正确的输出应该是什么 代码: #包括 #包括 #包括 int main(int argc,char*argv[]){ int i; int

因此,出于某种原因,我无法用C语言获得这段代码的输出,因此我只能问一些关于这段代码的概念性问题:

  • 什么是
    intn=atoi(argv[i])做什么?它只是定义整数N吗
    作为一个数组
  • 在for循环中,if(-1=fork())意味着什么?-1表示它是一个错误还是不是正确的循环?这意味着我不能用fork创建子对象
  • 调用printf函数时,
    getpid()
    做什么
  • 正确的输出应该是什么
  • 代码:

    #包括
    #包括
    #包括
    int main(int argc,char*argv[]){
    int i;
    int N=atoi(argv[i]);
    printf(“创建进程…”\n);
    对于(i=0;i
    您提出的许多问题都可以通过查看手册页来回答。无论如何,我会尽力解释的

    1)
    intatoi(常量字符*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
    

    你应该在你的问题列表中加上“为什么不编译?”
    -1=fork()
    无效C。非常确定真正的代码在
    int N=
    行中有
    =
    ,在未初始化的情况下使用
    i
    。您可能想要
    argv[1]
    ,但首先要确保该参数确实存在。如果您阅读有问题的函数的手册页,这将非常有帮助。发布的代码将无法干净地编译。一个原因是无法在if(-1=fork())中为文字赋值另一个原因是未使用参数“argc”。在尝试使用该参数之前,应该检查它以确保输入了命令行参数。第三个原因是‘int N=atoi(argv[i]);变量“i”未初始化为任何特定值,编译器将发出有关这些问题的警告。建议编译时启用所有警告。(在gcc中,至少使用'-Wall-Wextra-pedantic')发布的代码存在逻辑问题,即所有子进程都将继续执行循环,因此将创建比命令行上任何数字都多的进程<代码>i在atoi中未定义(argv[i])。。。所以代码的执行是非常不可预测的。当然,我没有注意到它。我会马上编辑我的答案,谢谢。非常感谢!我不知道为什么我没有linux,所以我无法在我的eclipse上获得输出,你能在上面的答案中发布输出吗?我保证我会接受它!即使在windows中,您也可以让MinGW运行C代码。我会给你答案的。但不要把它作为一种习惯。随身携带必要的工具。谢谢!你能把它寄出去吗?你们如何让MinGW运行呢?我认为eclipse中并没有识别出fork?
    de@ubuntu:~/Desktop$ ./a.out 2
    Create processes....
    Process id  = 25405
    Process id  = 25406
    Process id  = 25408
    Process id  = 25407