[英]fork is giving weird output when trying to add variable from child to father after killing child in c
我在一個用fork();
創建2個進程的程序上遇到這個奇怪的問題fork();
然后我在數組中搜索用戶輸入的特定值。 在測試版本中,我在此數組中搜索值6。
int vet [max] = {1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,0,6};
所以輸出是:
ci sono 2 di 6
ci sono 1 di 6
這是我的輸出語句: printf("ci sono %i di %i\\n",l+j,k);
(l是子變量,j是父變量,k是要搜索的數字)
但是我用wait(&status);
關閉了子進程wait(&status);
然后做輸出。 有沒有一種方法可以將不同過程的兩個變量組合在一起並一起輸出。
這是完整的代碼:
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h> //Fork
#include <sys/wait.h> //wait
#include <sys/types.h> //getpid
#include <time.h>
#define max 20
int main(){
int i,k,l=0,j=0,pid;
int status;
int vet[max]={1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,0,6};
//srand(time(NULL));
//for(i=0;i<max;i++){
// vet[i]=rand()%100+1;
//}
printf("Inserire il valore da trovare: ");
scanf("%i",&k);
pid=fork();
if(pid<0){
printf("ERRORE\r\n");
return 0;
}
if(pid==0){
for(i=0;i<max/2;i++){
if(vet[i]==k){
l++;
}
}
//printf("trovati figlio %i\n",l);
wait(&status);
}else{
for(i=max/2;i<max;i++){
if(vet[i]==k){
j++;
}
}
}
printf("ci sono %i di %i\n",l+j,k);
return 0;
}
並不是真正的正統,但是您可以這樣做:
if(pid!=0){
for(i=0;i<max/2;i++){
if(vet[i]==k){
l++;
}
}
//printf("trovati figlio %i\n",l);
wait(&j);
j = WEXITSTATUS(j);
}else{
for(i=max/2;i<max;i++){
if(vet[i]==k){
j++;
}
}
return j;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.