在C语言中,变量如何存储两个值?
我决定学习C语言,下面是我使用的其中一本书的片段:在C语言中,变量如何存储两个值?,c,linux,ipc,multitasking,C,Linux,Ipc,Multitasking,我决定学习C语言,下面是我使用的其中一本书的片段: #include <sys/types.h> #include <unistd.h> #include <stdio.h> int main() { pid_t result = fork(); if (result == -1){ fprintf(stderr, "Error\n"); return 1; } if (result ==
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t result = fork();
if (result == -1){
fprintf(stderr, "Error\n");
return 1;
}
if (result == 0)
printf("I'm a child with PID = %d\n", getpid());
else
printf("I'm a parent with PID = %d\n", getpid());
return 0;
}
一切都很清楚,但怎么可能是result==0和result!=同时0?看起来这个变量存储了两个值,因为printf指令执行了两次。我知道,fork返回0和父项的PID,但是result如何检查它在不同条件下是否返回true?一个变量一次只能保存一个值。您所看到的发生是因为fork正在创建另一个进程:现在有两个程序实例正在运行;一个在其中result==0生成的进程,另一个在其中result!=0原始进程,因为它不是同一个变量。当您分叉一个流程时,您将得到两个完全不同的流程,有关详细信息,请参见 因此,父对象中的结果变量与子对象中的结果变量不同。您看到的是两个进程,都连接到同一个输出设备,每个进程都编写自己的消息 事实上,fork文档具体包括: 成功时,子进程的PID在父进程中返回,0在子进程中返回 因此,您可以像使用fork一样使用返回值来查看您是父级还是子级,以及它是否工作正常,如果失败,它将返回-1,您将是没有子级的父级 其思想是,父进程获取子进程的进程ID,这样它就可以对它执行一些操作,比如等待它完成,子进程就得到零。子进程总是可以通过调用getppid来获取父进程的进程ID。fork从父进程复制子进程。因此,新创建的子对象从父对象继承了几个属性,如共享内存、消息队列、文件流等。因此,当您调用fork时,将创建另一个具有另一个变量结果的进程。fork函数将创建一个新进程,在此行之后,您的程序将从该点拆分为2。因为您需要知道自己是哪个进程,如果您是子进程,函数将返回0,如果您是父进程,函数将返回一些pid 从手册页: 成功时,子进程的PID将在父进程中返回,并且 在子级中返回0。失败时,在父级中返回-1, 未创建任何子进程,并且已正确设置errno
fork函数将创建一个新进程。在父进程中,fork将返回子进程的pid,因此结果变量将不等于0,而在子进程中,fork只返回0,因此结果为0 系统调用用于创建进程。它不接受任何参数,并返回一个进程ID。加上关键字短语…它不是同一个变量。
I'm a parent with PID = 5228
I'm a child with PID = 5229