gpt4 book ai didi

c++ - 如果 cmdline 有多个管道,如何获取用于调用程序的完整 cmdline

转载 作者:太空宇宙 更新时间:2023-11-04 10:34:45 24 4
gpt4 key购买 nike

我正在编写一个框架,以跟踪人们如何使用我的实用程序,例如示例实用程序“结果”所以我想将一段代码放入 result.cxx main() 中,它将记录类似

的内容
1. what arguments were given to result = argc, argv
2. what other programs were used to process stuff and pipe to my utility 'result'

例如:我正在尝试运行一个程序“结果”,该程序由

之类的管道提供输入
abc -e earg -t targ | process_stuff_out_data | result -s sarg 

现在在我用来捕获管道输入的 result.cxx 中

    std::string piped_data;
std::getline(std::cin, piped_data);

这适用于

    echo "1 2 3 " | result -i in_number
// here the piped input is just "1 2 3" so i am able to log it from result

但不适用于前一个程序的输出是二进制数据流的情况

    abc -e earg -t targ | out_bin_data | result -s sarg

在这种情况下,我只想

    LOG_PIPED_STUFF: abc -e earg -t targ | process_stuff_out_data 

最佳答案

std::getline 在读取换行符之前不会返回,参见此处:http://www.cplusplus.com/reference/string/string/getline在数据可用时使用另一个分隔符或仅使用另一个函数从标准输入中读取。例如,您可以使用 feof(stdin) 检查 stdin 是否有可用字节,然后使用 fread() 来检查它们。如果您使用的是 Linux,则可以使用 select(2) 等待文件描述符 0 上的输入。

关于c++ - 如果 cmdline 有多个管道,如何获取用于调用程序的完整 cmdline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38128960/

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