问题描述
因此,我只是想知道有关进行调度程序模拟的一些技巧.
So Im just wondering about a few tips on doing a scheduler simulation.
到目前为止,我只想在命令行输入文件,即/.scheduler in.file
So far, I just want to input a file at the command line i.e. /.scheduler in.file
in.file中包含以下信息:
The in.file holds the following information:
./Job1.txt
./Job2.txt
./Job3.txt
./Job4.txt
每个Job .txt文件都有随机的代码行.只有第一行很重要.第一行开始滴答"时间.
Each Job .txt file has random lines of code. With only the first line being significant. The first line is starting 'tick' time.
职位A:
10
1fi
3sdkfj
4ksdkk
5kdkfk
6kdkjf
7dkjkfd
9dkkf
10dku
此刻,我只想获取in.file并按到达时间(即第一行)的顺序对"Job"文件进行排序.
At the moment I just want to take the in.file and order the 'Job' files in order of their arrival tick time i.e. first line.
到目前为止,我的代码:
My code thus far:
#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "projscheduler.h"
/* I/O Files */
//static char *inputFile;
char * in;
static FILE *input;
/*Scheduled jobs indexed by PID*/
struct job list[20];
/* the next job to schedule */
//static struct job *job_next = NULL;
/* Time */
time clock;
/*Initialises job list*/
static void initialise_list(void) {
for(int i = 0; i < sizeof(list)/sizeof(list[0]); i++) {
list[i].parameters.pid = -1;
}
}
/** Read and parse input from input file */
static void parse_input(void)
{
char buffer[BUFSIZ];
//int jobs;
initialise_list();
while( fgets(buffer, sizeof(buffer), input) )
{
pid j_pid;
sscanf(buffer, "./%d.txt", &j_pid);
}
}
int main(int argc, char **argv)
{
if ( (input = fopen(in, "r")) == NULL ) {
fprintf(stderr, "cannot open %s\n", argv[1]);
}
parse_input();
return EXIT_SUCCESS;
}
头文件:
/**
* Simulation of a process scheduler
*/
//#ifndef SCHEDULER_H_
#define SCHEDULER_H_
#include <stddef.h>
/* types */
/** units of time */
typedef long time;
/** process identifier */
typedef int pid;
/** Information about a job of interest to the task scheduler */
struct job_data {
/* pid of this process */
pid pid;
/* time process starts */
time start;
/* time needed to finish */
time finish;
/* time spent processing so far */
time scheduled;
/* size of the process */
size_t size;
};
struct job {
/* Various parameters used by the scheduler */
char job_name[BUFSIZ];
struct job_data parameters;
/* next job to be scheduled */
//struct job *next;
};
推荐答案
我不确定您到底遇到了什么问题,但是我可以在代码中看到以下错误:
I am unsure what problems you are having exactly but I can see the following errors in the code:
-
在
initialise_list()
函数中,for
循环将迭代太多次并超出数组的范围:
In the
initialise_list()
function thefor
loop will be iterating too many times and going beyond the bounds the of array:
for(int i = 0; i < sizeof(list); i++) {
as sizeof(list)
将返回数组20 * sizeof(struct job)
占用的字节数.更改为:
as sizeof(list)
will return the number of bytes occupied by the array which is 20 * sizeof(struct job)
. Change to:
for(int i = 0; i < sizeof(list) / sizeof(list[0]); i++) {
-
这是
fopen()
尝试中缺少的左括号(表示发布的代码无法编译):this is a missing left parenthesis from
fopen()
attempt (meaning the posted code does not compile):if( (input = fopen(inputfile, "r") == NULL )
应为:
if( (input = fopen(inputfile, "r")) == NULL )
-
proj
是已初始化的char*
,这很可能会导致分段错误:proj
is an initialisedchar*
and this will mostly likely cause a segmentation fault:char *proj; sscanf(buffer, "./%s.txt", proj);
这篇关于在c中处理输入文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!