我有一个不想正常工作的课程作业。我应该通过从命令行接受一个带有数据文件链接的参数来执行:“。/ runsim 3< testing.data” 该程序应该从该文件读取行,fork()输出子进程,并使用数据文档中的行来执行另一个名为testsim的程序。 Testsim和数据文件由我们的老师提供,我所谈过的所有学生都说他们跑得很快。我引用了他们的项目,我的代码非常相似,但myine仍然运行缓慢。我通过SSH处理它,所以我不认为这是我的硬件。关于减缓这种情况的任何想法都将深受赞赏。
#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;
}