小编sni*_*ow7的帖子

在用 C 编写的自定义 shell 程序中重定向 I/O

我一直在研究一个自定义 shell 脚本,并且在使用下面给出的代码重定向输出时遇到了一个小错误。在当前状态下,代码可以完美运行,但是当传递给 execvp args 时,会抛出错误,例如:(ls ">" no such file or directory)。我知道这是因为它将整个 args[] 传递给父 shell,而父 shell 不起作用。添加 args[j] = NULL 会消除“<”/ ">”,从而修复错误,但也会导致重定向不再起作用。我怎样才能让它不抛出错误而且还能正常工作?我已经阅读了这个问题的多个版本,但似乎找不到答案。预先感谢您的任何帮助。

switch (fork()){
        case -1:
        fprintf(stderr, "error forking");

        case 0://CHILD

        for(int j = 0; j < size; j++){

            if(!strcmp(args[j], "<")){//looking for input character
            ++ext;
            if((in = open(args[j+1], O_RDONLY)) < 0){//open file for reading
                fprintf(stderr, "error opening file\n");
            }
            dup2(in, STDIN_FILENO);//duplicate stdin to input file
            close(in);//close after use
            //args[j] = NULL;
                }//end input chech


            if(!strcmp(args[j],">")){//looking for output character
            ++ext;
                out …
Run Code Online (Sandbox Code Playgroud)

c shell redirect

5
推荐指数
1
解决办法
5400
查看次数

标签 统计

c ×1

redirect ×1

shell ×1