我想为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。
您在这里造成混乱。 getenv
允许您获取环境变量,例如PWD
,它只是主目录的路径。
这里,管道将echo
命令的输出添加到提供给可执行文件的args中。要获得这些参数,您应该像这样编写C ++代码:
int main(int argc, char *argv[]) {
//do whatever you want with argv[1]
return 0;
}