Abh*_*ogi 8 c unix linux gcc fork
程序计算从1到N的数字之和.子进程计算偶数的总和.父进程计算奇数的总和.我想在父进程中获取子进程的返回值.我怎么做
#include<stdio.h>
#include<errno.h>
#include<unistd.h>
#include<stdlib.h>
#include<fcntl.h>
int main()
{
int N;
int id;
int fd_result;;
printf("Enter N till which you want the sum: \n");
scanf("%d",&N);
if ((fd_result=creat("result", 600))== -1)
{
perror("Error creating file");
exit(1);
}
if ((fd_result=open("result",O_TRUNC | O_RDWR)) == -1)
{
perror("Error Opening file");
exit(1);
}
if ((id=fork())<0)
{
perror("Error occurred forking....!");
exit(errno);
}
if (id == 0)
{
int i;
int sum=0;
for (i=0;i<=N;i=i+2)
sum+=i;
printf("Child sum: %d",sum);
if (write(fd_result,&sum,sizeof(int))==-1) perror("Error writing to file");
_exit(0);
}
if (id > 0)
{
int i;
int sum=0;
int sum_odd;
for (i=1;i<=N;i=i+2)
sum+=i;
lseek(fd_result,0,SEEK_SET);
read(fd_result,&sum_odd,sizeof(int));
printf("\nThe sum is: %d",sum+(int)sum_odd);
}
close(fd_result);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
请告诉我如何获得子进程的返回值?
总长DR
int wstatus;
waitpid(<pid>, &wstatus, 0); // Store proc info into wstatus
int return_value = WEXITSTATUS(wstatus); // Extract return value from wstatus
Run Code Online (Sandbox Code Playgroud)
参考
显示其类型签名的联机帮助页waitpid是:
pid_t waitpid(pid_t pid, int *stat_loc, int options);
Run Code Online (Sandbox Code Playgroud)
它还指出我们可以使用参数存储进程信息stat_loc:
如果参数的值
stat_loc不是空指针,则信息应存储在由stat_loc
参数
stat_val是 指向的整数值stat_loc。
然后我们使用WEXITSTATUS(wstatus)从流程中提取返回值。
WEXITSTATUS(
stat_val):如果 WIFEXITED(stat_val) 的值非零,则该宏计算子进程传递给 _exit() 或 exit() 的状态参数的低 8 位,或者子进程的值从 main() 返回的进程。
| 归档时间: |
|
| 查看次数: |
19443 次 |
| 最近记录: |