如何在bash中使用管道使用c ++中的getenv()访问文件?

问题描述 投票:-1回答:1

我想为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");

我不知道到底是什么$ i | ./myfunction确实。它像参数一样读为“ i”吗?如果是,当我使用fopen时,我得到fileIN == NULL。

c++ bash pipe mapper getenv
1个回答
0
投票

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

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

int main(int argc, char *argv[]) {
    //do whatever you want with argv[1]
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.