syscall lab need to finish
This commit is contained in:
29
user/trace.c
Normal file
29
user/trace.c
Normal file
@@ -0,0 +1,29 @@
|
||||
#include "kernel/param.h"
|
||||
#include "kernel/types.h"
|
||||
#include "kernel/stat.h"
|
||||
#include "user/user.h"
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int i;
|
||||
//存储待跟踪程序的名称和参数
|
||||
char *nargv[MAXARG];
|
||||
|
||||
//保证trace的参数不少于三个,并且跟踪的系统调用号在0-99之间
|
||||
if(argc < 3 || (argv[1][0] < '0' || argv[1][0] > '9')){
|
||||
fprintf(2, "Usage: %s mask command\n", argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
//调用trace系统调用,传入待跟踪系统调用号
|
||||
if (trace(atoi(argv[1])) < 0) {
|
||||
fprintf(2, "%s: trace failed\n", argv[0]);
|
||||
exit(1);
|
||||
}
|
||||
//保存待跟踪程序的名称和参数
|
||||
for(i = 2; i < argc && i < MAXARG; i++){
|
||||
nargv[i-2] = argv[i];
|
||||
}
|
||||
//运行待跟踪的程序
|
||||
exec(nargv[0], nargv);
|
||||
exit(0);
|
||||
}
|
||||
Reference in New Issue
Block a user