我试图在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;
}
答案 0 :(得分:1)
任何类型的重定向都是shell功能。您正在使用execve
直接执行cat
,而不是让shell有机会执行任何操作。
以下可能有效:
char *argv[] = { "/bin/bash", "-c", "/usr/bin/cat <<EOF\ntest\nEOF", 0};
但你不太可能真的想这样做。