gpt4 book ai didi

c++ - 如何知道何时通过 C++ 11 上的终端管道输入?

转载 作者:可可西里 更新时间:2023-11-01 16:01:08 26 4
gpt4 key购买 nike

如何知道 C++ 11 上的终端管道何时有输入?

我可以这样调用我的程序:

1. ./main solved.txt
2. cat unsolved.txt | ./main
3. cat unsolved.txt | ./main solved.txt

我用它来了解我是否需要在 C POSIX 标准上从管道读取数据:

#include <iostream>
#include <sstream>
#include <stdio.h>
#include <unistd.h>

int main( int argumentsCount, char* argumentsStringList[] )
{
std::stringstream inputedPipeLineString;

if( argumentsCount > 1 )
{
printf( "argumentsStringList[1]: %s", argumentsStringList[ 1 ] );
}

// If it is passed input through the terminal pipe line, get it.
if( !isatty( fileno( stdin ) ) )
{
// Converts the std::fstream "std::cin" to std::stringstream which natively
// supports conversion to string.
inputedPipeLineString << std::cin.rdbuf();

printf( "inputedPipeLineString: %s", inputedPipeLineString.str().c_str() );
}
}

但现在我想使用 C++ 11 标准,而我最喜欢的 filenoisatty 不在其中。那么在 C++ 11 上有替代它们的方法吗?

相关主题:

  1. checking data availability before calling std::getline
  2. Why does in_avail() output zero even if the stream has some char?
  3. Error "'fdopen' was not declared" found with g++ 4 that compiled with g++3
  4. stdio.h not standard in C++?
  5. error: ‘fileno’ was not declared in this scope
  6. GoogleTest 1.6 with Cygwin 1.7 compile error: 'fileno' was not declared in this scope

问题是当使用 -std=C++11 编译时,filenoisatty 上未定义>stdio.h/cstdlib 因为它们是 POSIX 的东西。因此,一种解决方案是使用 -std=GNU++11 而不是 -std=C++11。但是是否可以使用 -std=C++11 编写其他内容进行编译?

最佳答案

C++ POSIX Standard

据我所知,没有这样的事情。有一个 C POSIX 库,它是 POSIX 标准的一部分。

So there is an alternative to them on the C++ 11?

在标准 C++ 中没有替代方案(在 C++11 之前没有,到目前为止在两者之后都没有)。

您将需要依赖 POSIX 来获得所需的功能。

即使在 POSIX 中,也是 unistd.h 定义了 isatty。您忽略了将其包含在您的程序中。

关于c++ - 如何知道何时通过 C++ 11 上的终端管道输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40323650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com