У меня есть задание для класса, которое просто не хочет работать правильно. Я должен выполнить, приняв аргумент из командной строки со ссылкой на файл данных, например: «./runsim 3
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#define MAX_BUF 1024
int main (int argc, char *argv[]){
pid_t childpid=0;
int pr_limit, pr_count=0, status;
char s[MAX_BUF], program[MAX_BUF], num1[MAX_BUF], num2[MAX_BUF];
if(argc!=2){ /* check for valid number of command-line arguments */
fprintf(stderr, "Usage: %s (int) < filename\n", argv[0]);
return 1;
}
pr_limit=atoi(argv[1]);
while(fgets(s, 100, stdin)){
/* checks pr_limit and waits for a child to finish if reached */
if(pr_count==pr_limit){
waitpid(-1, &status, 0);
pr_count--;
printf("Child Exit Code: %d\n", WEXITSTATUS(status));
}
/* reads in strings for commands */
sscanf(s, "%s %s %s", program, num1, num2);
/* this if loop creates forks from the parent */
if((childpid=fork())<=0){
/* this if loop catches fork failures */
if(childpid<0){
perror("Child Failed To Fork");
return 1;
}
break;
}
pr_count++;
/* executes commands from file in child */
/* if(childpid==0){
printf("%s %s %s\n", program, num1, num2);
execl(program, program, num1, num2, NULL);
} */
/* checks to see if any child has finished */
if(waitpid(-1, NULL, WNOHANG)!=0){
pr_count--;
}
}
/* executes commands from file in child */
if(childpid==0){
execl(program, program, num1, num2, NULL);
}
while(1){
childpid=waitpid(-1, &status, 0);
if(childpid==-1){
break;
}
pr_count--;
printf("Child Exit Code: %d\n", WEXITSTATUS(status));
}
return 0;
}