【问题标题】:Input redirection - if open file for write failed输入重定向 - 如果打开文件写入失败
【发布时间】: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 终端的行为。产生错误,但即使运行程序,标准输入为空。

标签: c linux shell terminal


【解决方案1】:

在这里,如果文件可用,您可以在读/写模式下打开文件,然后您将从 open 中获取 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);
}

【讨论】:

    猜你喜欢
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多