输入重定向 - 如果打开文件写入失败

时间:2014-04-17 15:57:17

标签: c linux shell terminal

我在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。

1 个答案:

答案 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);
}