Я пытаюсь запустить две функции одновременно в C с помощью fork (), по какой-то причине кажется, что c1 выполняется дважды, а c2 никогда не выполняется. Это код:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
void c1();
void c2(char *argv[]);
int wait_rv; /* return value from wait() */
int child_status;
int pid1,pid2,pid3,parentPID;
parentPID = getpid();
if((pid1 = fork()) == -1)
{
fprintf(stderr, "Cannot fork child1 \n");
}else{
c1();
exit(17);
}
if((pid2 = fork()) == -1)
{
fprintf(stderr, "Cannot fork child 2\n");
}else{
c2(argv);
exit(17);
}
int i;
if( argc >= 2 )
{
printf("The arguments supplied are:\n");
for(i = 1; i < argc; i++)
{
printf("%s\t", argv[i]);
}
}
else
{
printf("Please provide the file path as command line argument\n");
}
c2(argv);
}
void c1()
{
int counter = 0;
float grades[10];
float result = 0;
printf("child %d here. Will calculate average marks.\n", getpid());
printf("Please enter 10 marks: \n");
do{
printf("(%d)",counter+1);
scanf("%f",&grades[counter]);
counter++;
}while(counter < 10);
for(counter;counter>=0;counter--){
result = result + grades[counter];
}
printf("Average: %f",result/10);
}
void c2(char *argv[] ){
FILE *fptr;
char ch;
int wrd=1,charctr=1;
printf("child %d here. Will execute wc\n", getpid());
fptr=fopen(argv[1],"r");
if(fptr==NULL)
{
printf(" File does not exist or can not be opened.");
perror(fptr);
}
else
{
ch=fgetc(fptr);
while(ch!=EOF)
{
if(ch==' '||ch=='\n')
{
wrd++;
}
else
{
charctr++;
}
ch=fgetc(fptr);
}
printf("\n The number of words in the file %s are : %d\n",argv[1],wrd-2);
}
fclose(fptr);
}
Это мой результат:
child 27931 here. Will calculate average marks.
Please enter 10 marks:
(1)child 27932 here. Will calculate average marks.
Please enter 10 marks:
(1)1
(2)2
(3)3
(4)4
(5)5
(6)6
(7)7
(8)8
(9)9
(10)10
(2)1
Average: 4.600000-bash-4.1$
по какой-то причине он все запутался и пытается получить одну дополнительную оценку в конце.