【问题标题】:How to handle Unix pipe如何处理 Unix 管道
【发布时间】:2011-07-19 09:37:54
【问题描述】:

如何从我的 C++ 代码中的 shell 重定向中获取文件名?即 ./MyProgram

**编辑:我设法从文件中获取输入。谢谢您的帮助。但是,在循环文件内容之后,我想用 cin 保留用户输入。是这样的:

while (true)
{
    if (cin.eof() == false)
    {
        getline(cin, line);
        cout << line;
    }else{
        cin >> choice;
    }
}

【问题讨论】:

  • 如果标准输入是从文件中重定向的,那么在标准输入上获得EOF后就没有更多的输入可以读取了;这就是EOF的意思。如果你想从终端读取,那么你可能不想支持 I/O 重定向。
  • 另外,您的问题基本上与现在的管道无关 - 请适当地重新命名。
  • 你真的应该恢复你的编辑,澄清一个问题是好的,把问题改成完全不同的东西是不好的。我想说将您的新问题作为一个单独的问题提出,但它已经被回答了很多次。使用while (cin.getline(line))

标签: c++ unix pipe


【解决方案1】:

你不能(至少不能移植)。此信息不提供给程序。相反,您可以通过从标准输入读取来自myfile(在您的示例中)的数据。例如,您可以使用 C++ 的 getlinecin 作为第一个参数。

【讨论】:

  • 但是我必须从文件中读取上述命令的输入,而不是通过键入手动输入。有没有办法得到整条线?
  • 您可以通过读取标准输入从myfile获取数据。这就是重定向运算符的重点。它让程序读取用户输入的方式与读取重定向文件的方式相同。
  • 好的,我做到了。但是,我想在用 cin 读取文件后保留用户输入,但它没有用。它一直在循环。我将修改我的第一篇文章。
【解决方案2】:

根据shell,您可能继承了代表实际文件或管道的描述符。如果它是一个实际的管道(即 fifo),则名称意义不大。但是你可以在 linux 上得到这个名字(和在 Windows 上,但听起来你对那个不感兴趣)。

Getting Filename from file descriptor in C

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-07
    • 2011-06-14
    • 2013-08-20
    • 2010-09-06
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    相关资源
    最近更新 更多