C 中此分叉概念的正确输出
correct output for this fork concept in C
所以出于某种原因我无法在 C 中获得此代码的输出,因此我只能在下面针对此代码提出一些概念性问题:
int N = atoi(argv[i]);
是做什么的?它只是定义整数 N
作为数组?
- for循环中,
if (-1 = fork())
是什么意思? -1 是否意味着它是一个错误或不是正确的循环?这意味着我无法使用 fork 创建子对象?
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
returns 将转换后的整数作为 int 值。如果无法执行有效转换,则它 return 为零。
至于你的代码,我在其中存储了垃圾值。所以atoi(argv[i]))
的值是不可预测的。您可能想为 i
.
分配一个值
2) -1 == fork()
,(我假设你在你的代码中犯了一个语法错误,你已经知道了)发生了什么,我们检查叉子的 return 值() 函数,如果查看手册,fork() 用于创建新进程。如果创建新进程失败,则它 return -1。写成fork() == -1
就更有意义了
3) getpid()
returns 调用进程的进程ID。 (这通常由生成唯一临时文件名的例程使用。)
4) 右输出是什么意思?您是否尝试过 运行 代码并遇到任何错误?请详细说明
如果您 运行 带有命令行参数的更正代码,这就是输出的样子。
de@ubuntu:~/Desktop$ ./a.out 2
Create processes....
Process id = 25405
Process id = 25406
Process id = 25408
Process id = 25407
所以出于某种原因我无法在 C 中获得此代码的输出,因此我只能在下面针对此代码提出一些概念性问题:
int N = atoi(argv[i]);
是做什么的?它只是定义整数 N 作为数组?- for循环中,
if (-1 = fork())
是什么意思? -1 是否意味着它是一个错误或不是正确的循环?这意味着我无法使用 fork 创建子对象? 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
returns 将转换后的整数作为 int 值。如果无法执行有效转换,则它 return 为零。
至于你的代码,我在其中存储了垃圾值。所以atoi(argv[i]))
的值是不可预测的。您可能想为 i
.
2) -1 == fork()
,(我假设你在你的代码中犯了一个语法错误,你已经知道了)发生了什么,我们检查叉子的 return 值() 函数,如果查看手册,fork() 用于创建新进程。如果创建新进程失败,则它 return -1。写成fork() == -1
3) getpid()
returns 调用进程的进程ID。 (这通常由生成唯一临时文件名的例程使用。)
4) 右输出是什么意思?您是否尝试过 运行 代码并遇到任何错误?请详细说明
如果您 运行 带有命令行参数的更正代码,这就是输出的样子。
de@ubuntu:~/Desktop$ ./a.out 2
Create processes....
Process id = 25405
Process id = 25406
Process id = 25408
Process id = 25407