实施<< C中的重定向

时间:2016-12-11 03:21:19

标签: c io-redirection

我试图在C中实施<<重定向,我遇到了以下代码的问题。我可以实现其他三个重定向<>>>。我想我需要一个循环来处理/检查<<的分隔符,我该如何处理这个问题?当我运行程序时,我得到了

 /usr/bin/cat: '<<': No such file or directory
 /usr/bin/cat: EOF: No such file or directory

#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>

int main(void)
{
    char *argv[] = { "/usr/bin/cat", "<<", "EOF", 0 };
    char *envp[] =
    {
        "HOME=/",
        "PATH=/bin:/usr/bin",
        "USER=julekgwa",
        0
    };
    int fd = open(0, O_RDONLY);
    dup2(fd, 0);
    close(fd);
    execve(argv[0], &argv[0], envp);
    fprintf(stderr, "Oops!\n");
    return -1;
}

1 个答案:

答案 0 :(得分:1)

任何类型的重定向都是shell功能。您正在使用execve直接执行cat,而不是让shell有机会执行任何操作。

以下可能有效:

char *argv[] = { "/bin/bash", "-c", "/usr/bin/cat <<EOF\ntest\nEOF", 0};

但你不太可能真的想这样做。