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