所以出于某种原因我无法在 C 中获得这段代码的输出,所以我只能在下面针对这段代码提出一些概念性问题:
int N = atoi(argv[i]);
是做什么的?它只是定义整数 N 作为数组?- 在for循环中,
if (-1 = fork())
是什么意思? -1 是否意味着它是一个错误或不是正确的循环?这意味着我不能使用 fork 创建一个 child ? getpid()
在调用 printf 函数时做了什么?- 正确的输出应该是什么?
代码:
#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/