【发布时间】:2014-04-17 15:57:16
【问题描述】:
我在 linux(c 语言)中实现了一个简单的 shell。
当我对a.txt 没有任何权限时,我在终端中检查了这一行:./myprogram < a.txt。这样的myprogram 是使用空文件运行的。问题:open()失败后如何发送空文件?
示例代码:
if( fork() == 0 ){
int f_in = open("a.txt", O_RDONLY);
if(f_in == -1){
perror("open input");
f_in = ???
}
dup2(f_in, STDIN_FILENO);
execvp(args[0], args);
}
新程序的标准输入应该是空的,只有EOF。
【问题讨论】:
-
不确定我是否理解。您的意思是重定向到 STDOUT?
-
也许我也很困惑。通过读取 STDIN,无需调用 open 即可读取 a.txt 的内容。你试图打开什么文件?也许你可以分享一些代码?
-
@liangricha @MahonriMoriancumer
myprogram不是我的外壳。是别的。我正在添加一些代码 -
如果输入重定向失败,您不想产生错误吗??
-
@glennjackman 我想要类似于 ubuntu 终端的行为。产生错误,但即使运行程序,标准输入为空。