我正在用C开发一个shell代码。目前,我的任务是使用不同的命令将stdin重定向到stdout,例如cat< hello.c -ne>的test.txt
我能够做到,但我的代码试图打开“<”和“>”文件也是如此,所以我尝试分配0值,这不会给我任何错误但忽略-ne。
这是我的代码,
int in, out;
int i;
for (i = 0; i < argc; i++) {
if(strcmp( argv[i],"<")==0) {
in = open(argv[i+1], O_RDONLY);
if (!in)
exit(EXIT_FAILURE);
// argv[i]=0;
// array[i+1]=0;
}
else if(strcmp( argv[i],">")==0) {
out = open(argv[i+1], O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IRGRP | S_IWGRP | S_IWUSR);
if (!out)
exit(EXIT_FAILURE);
// argv[i]=0;
// array[i+1]=0;
}
}
dup2(in, 0);
dup2(out, 1);
// close unused file descriptors
close(in);
close(out);
char *bname;
char *path2 = strdup(*argv);
bname = basename(path2);
//printf("%d",argc);
/*the command will be executed using execvp*/
execvp(bname, argv);
argv数组就像
argv[0]="cat"
argv[1]="<"
argv[2]="hello.c"
argv[3]="-ne"
argv[4]=">"
argv[5]="test.txt"
基本上,我想在“&lt;”之间打开多个文件和“&gt;”然后在“&gt;”之后重定向到给定文件。
当前输出 -
$ ./shell
Enter Shell Command -- cat < hello.c -ne > te1.txt
$ cat: : No such file or directory
cat: : No such file or directory
cat: te1.txt: input file is output file