怎么在程序中将 str 中的内容通过 shell 命令 echo 写到指定文件?

2016-07-17 20:06:02 +08:00
 zhongshaohua
3532 次点击
所在节点    Linux
21 条回复
zonghua
2016-07-17 20:10:00 +08:00
echo $str > yours.txt
zhongshaohua
2016-07-17 20:23:40 +08:00
@zonghua fp =popen("echo $input >/proc/echo_config","w"); 这样写有问题吗?
fuge
2016-07-17 20:46:04 +08:00
@zhongshaohua python ? Popen? or open? ,,,,,,,,,,,,,,,,
zhongshaohua
2016-07-17 20:52:09 +08:00
@fuge c 语言
zhongshaohua
2016-07-17 21:02:07 +08:00
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main(){
pid_t childpid;
if ((childpid=fork()) == 0){
char * execvp_str[] = {"echo", "executed by execvp",">", "~/abc",NULL};

if (execvp("echo",execvp_str) <0 )
perror("error on exec");
return 0;
}else{
//parent process
wait(&childpid);
printf("execvp done\n\n");
}
}

这样为什么也写不进??
changshu
2016-07-17 21:14:42 +08:00
2L 的问题在于 /proc 下面的是 proc fs, 不存在的 proc 文件即便 root 通过 IO 写入也创建不了.
5L 的问题在于 exec 系列函数不执行 shell 解释器, >和~这种 shell 语法认不得, 全当字符串输出了.
zhongshaohua
2016-07-17 21:26:19 +08:00
@changshu 2L 方法如果在内核先创建了文件 这样是不是就应该能写入? 5L 这种方法正确的应该怎么写? 求老司机发车
8bit
2016-07-17 21:28:40 +08:00
试试管道
zhongshaohua
2016-07-17 21:38:17 +08:00
@8bit 2L 中的方法管道可以 但是内容在数组 str 里面 不知道怎么 echo 过去
chzyer
2016-07-17 21:53:03 +08:00
bash -c "echo $input >/proc/echo_config", 通过调用 bash 去解析 bash 脚本,接下来你想 popen 还是 exec 就随意了
zhongshaohua
2016-07-17 22:38:30 +08:00
@chzyer 还是没理解
zhongshaohua
2016-07-17 22:41:11 +08:00
@chzyer fp = popen("bash -c 'echo $input > ~/abc'","w"); 是这样吗?这样也还是写不进去啊
8bit
2016-07-17 23:09:14 +08:00
突然想起来,直接在 shell 中调用你的程序,参数可以通过 main 的入口传入
chzyer
2016-07-17 23:10:57 +08:00
@zhongshaohua 你要先确保 $input 不是空啊在这个环境里面。我不知道你这个 $input 是怎么获得的。
neoblackcap
2016-07-18 02:11:52 +08:00
为什么要这么做?记得是有系统调用获取环境变量的啊,直接写文件不就好了吗?
msg7086
2016-07-18 03:01:06 +08:00
1. 你没说清楚你需要用 C 语言来做。
2. 你说的是用 Shell 写入,但是用 C 语言写入的话不需要过 Shell 。
3. 你应该先学习下什么叫变量,什么叫字符串,如何拼接字符串。
ncisoft
2016-07-18 03:49:12 +08:00
友情提示: fprintf fopen
zhaoxiting1997
2016-07-18 09:53:11 +08:00
在 c 语言下有多种输出文件的方法,用 shell 命令不是一种好的选择:既不能在 windows 或者其他系统下用,如果输出是用户可编辑的又存在着构造特定字符串执行任意代码的风险。
changshu
2016-07-18 13:23:42 +08:00
@zhongshaohua 有 proc 文件的话没问题, 直接 2L 那方法就行, 没必要改 5L 了, 就你现在这需求折腾 5L 也就是实现一个简易版的 system 或者 popen
jixiangqd
2016-07-18 17:18:31 +08:00
为何要这么搞?直接开文件写不行?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/293060

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX