首页 > 解决方案 > 如何在 bash 中使用管道在 c++ 中使用 getenv() 访问文件?

问题描述

我想为 MapReduce 框架实现一个函数,所以我的任务是创建一个连接文本文件的映射器。

这是我的 bash 脚本;

 for i in text1.txt text2.txt text3.txt
     do
         cat $i | ./myfunction
     done

myfunction() 将逐行读取输入文件,变量将使用函数 getenv() 读取。我尝试使用 fopen(argv[1],"r") 它给了我分段错误并且使用 popen() 我被拒绝了权限。

我的 C++ 代码:

 char *myenv;
 myenv = getenv("PWD");
 FILE *fileIN = popen(myenv , "r");

我不知道究竟是什么 cat $i | ./myfunction 确实如此。它是否像参数一样读取“i”?如果是,我在使用 fopen 时得到 fileIN == NULL。

标签: c++bashpipemappergetenv

解决方案


你在这里混淆了。getenv允许您获取环境变量,例如PWD,它只是您的主目录的路径。

在这里,管道将echo命令的输出添加到提供给可执行文件的参数中。要获得这些参数,您应该像这样编写 C++ 代码:

int main(int argc, char *argv[]) {
    //do whatever you want with argv[1]
    return 0;
}

编辑:如果你想在你的 C++ 代码中获取文件名,你应该使用echo而不是cat.


推荐阅读