我在linux(c语言)中实现了一个简单的shell。
当我没有./myprogram < a.txt
的任何权限时,我在终端这行检查了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。
答案 0 :(得分:0)
这里你可以在读/写模式下打开文件,如果文件可用,那么你将从文件中可用的数据打开f_in,如果文件不可用,那么将创建只有EOF的文件,你会给出f_in继续前进。 可以帮到你。 例如:
if( fork() == 0 ){
int f_in = open("a.txt", O_RDWR);
if(f_in == -1){
perror("open input");
}
dup2(f_in, STDIN_FILENO);
execvp(args[0], args);
}