資源簡介
實驗四:實現一個unix命令解釋程序
1.在linux中實現一個命令執行程序doit,它執行命令行參數中的命令,之后統計
1)命令執行占用的CPU時間(包括用戶態和系統態時間,以毫秒為單位),
2)命令執行的時間,
3)進程被搶占的次數,
4)進程主動放棄CPU的次數,
5)進程執行過程中發生缺頁的次數
2.在linux中實現一個簡單的命令解釋程序,功能要求:
1)同時支持內部命令和外部命令,內部命令支持兩個(cd、exit)
2)支持后臺命令

代碼片段和文件信息
#include
#include
#include
#include
#include
#include
#include
void?printHelp(){
printf(“程序參數格式:?命令?[該命令參數1]?[該命令參數2]?....?[該命令參數1]\n“);
printf(“執行完成后將會統計:\n“);
printf(“1)命令執行占用的CPU時間(包括用戶態和系統態時間,以毫秒為單位)\n“);
printf(“2)命令執行的時間\n“);
printf(“3)進程被搶占的次數\n“);
printf(“4)進程主動放棄CPU的次數\n“);
printf(“5)進程執行過程中發生缺頁的次數\n“);
printf(“\n“);
printf(“\n“);
}
int?main(int?argc?char?*argv[]){
printf(“input?-h?can?get?help?messages\n“);
if(argc?<2){
perror(“wrong?command?format!\n“);
exit(EXIT_FAILURE);
}
else?if(strcmp(argv[1]?“-h“)?==?0){
printHelp();
exit(0);
}
else{
char?cmd[300];
cmd[0]?=?‘\0‘;
for(int?i?=?1;i if(i?!=?1)
strcat(cmd?“?“);
strcat(cmd?argv[i]);
}
struct?timeval?start_time?end_time;
gettimeofday(&start_time?NULL);
system(cmd);
gettimeofday(&end_time?NULL);
if(errno?!=?0){
printf(“error:?%s\n“?strerror(errno));
exit(EXIT_FAILURE);
}
else{
struct?rusage?ru;
memset(&ru?0?sizeof(struct?rusage));
getrusage(RUSAGE_CHILDREN?&ru);
long?int?runtime?=?(end_time.tv_sec?-?start_time.tv_sec)?*1000?+?(end_time.tv_usec?-?start_time.tv_usec)/1000;
printf(“/**************************統計結果*****************************/\n“);
printf(“1)?用戶態時間:%ldms???系統態時間:%ldms??;\n“?ru.ru_utime.tv_sec*1000?+?ru.ru_utime.tv_usec/1000?ru.ru_stime.tv_sec*1000?+?ru.ru_stime.tv_usec/1000);
printf(“2)?命令執行的時間:%ldms?\n“runtime);
printf(“3)?進程被搶占的次數:?%ld\n“?ru.ru_nivcsw);
printf(“4)進程主動放棄CPU的次數:?%ld\n“?ru.ru_nvcsw);
printf(“5)進程執行過程中發生缺頁的次數:?%ld\n“?ru.ru_majflt);
}
}
return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1952??2016-11-18?18:48??4-2.c
?????文件???????1982??2016-11-17?23:46??4-1.c
-----------?---------??----------?-----??----
?????????????????3934????????????????????2
評論
共有 條評論