c++ - 如何在 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。
解决方案
你在这里混淆了。getenv
允许您获取环境变量,例如PWD
,它只是您的主目录的路径。
在这里,管道将echo
命令的输出添加到提供给可执行文件的参数中。要获得这些参数,您应该像这样编写 C++ 代码:
int main(int argc, char *argv[]) {
//do whatever you want with argv[1]
return 0;
}
编辑:如果你想在你的 C++ 代码中获取文件名,你应该使用echo
而不是cat
.
推荐阅读
- angular - Angular 2+:错误 POST http://localhost:3000/api/pups/500(内部服务器错误)
- php - Stripe,用户无法下载他们的发票
- oracle - 创建用于计数的光标
- node.js - 获取位于特定 S3 文件夹下的对象列表
- css - 如何仅将外部 CSS 应用到特定区域
- javascript - 清除表单时出现 Vue + Vuetify 验证问题
- filter - ffmpeg - 如何在同时录制窗口应用程序时过滤视频
- python - 在点击中弃用参数别名的正确方法
- javascript - jQuery ajax async 'true' 让我的网络应用程序卡住,直到数据返回
- android - 无法在 sdk 更新站点中更新存储库