| 查看: 390 | 回复: 9 | |||
| 当前主题已经存档。 | |||
| 【有奖交流】积极回复本帖子,参与交流,就有机会分得作者 fran_lin 的 10 个金币 | |||
fran_lin金虫 (小有名气)
|
[交流]
【求助】请教高手(完结)
|
||
|
最近在忙于编程,一直被一个问题困惑! 在linux下,可执行文件a利用system命令调用其他目录下的可执行文件b,在b中由一个语句是创建新文件A.out,结果系统默认在可执行文件a所在的目录下创建了新文件A.out。请问如何在文件a中调整,使新文件A.out能在文件b所在的目录下创建。 前提:可执行文件b不可修改。 哪位大侠明白,请帮帮忙,万分感谢!!!!!! 后记::::: 首先要感谢magic7004 和tjyl 专家顾问的指导,自己的程序正在运行过程中,不过,从目前看来,两位专家顾问的建议和指导是正确的!在这里万分感谢! 我自己其实是个程序方面的菜鸟,应版主做个正确解决方案的完整描述的提议,也为了回报各位虫友,我把自己的问题和解决方案做一个完整的描述! 问题:在linux系统下,可执行文件a利用system命令调用其他目录下的可执行文件b,在b中有一个程序语句是创建新文件A.out,结果系统默认在可执行文件a所在的目录下创建了新文件A.out。请问如何在程序文件a中做调整,使新文件A.out能在文件b所在的目录下创建。 前提条件:可执行文件b不可修改。这里主要是文件b的修改工作量很大,所以想尽量从程序文件a上作修改! 说明:system命令是调用一个新的进程(子进程)来执行文件b,这个新的进程将执行文件a的进程(父进程)的环境变量继承过来,默认的当前目录也继承过来了,所以文件b的默认目录就是文件a的默认目录,所以也就出现了我这样的问题! 解决方案:有个chdir(“目录”)函数,括号里面的目录就是填写可执行文件b的目录,将这条语句放在system()命令之前,这样子进程继承的就是文件b的目录,默认的生成文件也就是在自己的目录下生成,然后再system命令之后将目录改回来,借用一下专家顾问magic7004的话就是: chdir(b的目录); 执行b; chdir(a的目录); 自己的症结所在:我也曾在网上搜索这样的问题,但是由于自己是一个新手,自己的关键词用的不准确,再加上我的问题不是常见问题,所以没有找到正确答案,而且在百度,Google这样的搜索工具上,我的问题所搜索来的结果全被那些常见问题的答案替代了。 再次感谢magic7004 和tjyl 这两位专家顾问,也感谢所有热心的虫友! [ Last edited by fran_lin on 2010-3-12 at 08:55 ] |
» 猜你喜欢
磺酰氟产物,毕不了业了!
已经有4人回复
论文终于录用啦!满足毕业条件了
已经有16人回复
求个博导看看
已经有19人回复
投稿Elsevier的杂志(返修),总是在选择OA和subscription界面被踢皮球
已经有8人回复
yalefield
金虫 (文坛精英)
老汉一枚
- 程序强帖: 3
- 应助: 129 (高中生)
- 贵宾: 0.17
- 金币: 21238.9
- 散金: 3440
- 红花: 66
- 帖子: 12101
- 在线: 759.1小时
- 虫号: 96063
- 注册: 2005-10-07
- 专业: 高等教育学
- 管辖: 计算模拟
2楼2010-03-01 15:01:06
3楼2010-03-01 16:20:14
hakekill
木虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 1709.3
- 帖子: 131
- 在线: 19小时
- 虫号: 246017
- 注册: 2006-04-29
- 性别: GG
- 专业: 水环境与生态水利
4楼2010-03-01 18:54:35
fran_lin
金虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 1022
- 散金: 10
- 帖子: 251
- 在线: 96.3小时
- 虫号: 828827
- 注册: 2009-08-16
- 性别: GG
- 专业: 计算机软件
5楼2010-03-02 12:18:33
6楼2010-03-02 21:45:36
fran_lin
金虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 1022
- 散金: 10
- 帖子: 251
- 在线: 96.3小时
- 虫号: 828827
- 注册: 2009-08-16
- 性别: GG
- 专业: 计算机软件
7楼2010-03-03 09:52:53
★ ★
余泽成(金币+2):辛苦了! 2010-03-03 10:29
fran_lin(金币+10): 2010-03-10 16:49
余泽成(金币+2):辛苦了! 2010-03-03 10:29
fran_lin(金币+10): 2010-03-10 16:49
|
linux不熟,不过开起来是因为a的Current Directory(或者叫当前目录,Windows下是这样叫的,不知道Linux下是不是也叫这个名字,就是程序的默认工作目录)是a自己所在的目录,然后a运行b的时候,b继承了a的Current Directory,b输出文件的时候是用相对路径输出的,也就是直接输出到current Directory中,所以b就输出到了a的目录中了。 我知道windows如果用CreateProcess创建新的进程的话,是有个参数可以指定新创建的进程的Current Directory的。理论上Linux也应该有类似的功能,楼主研究下Linux系统执行程序的api吧。 ps:貌似Linux下有个chdir可以改变Current Directory,搂住可以试下先把a的Current Directory改成b的目录,然后再执行b。如果有需要的话,可以执行完b以后再改回来。 chdir(b的目录); 执行b; chdir(a的目录); [ Last edited by magic7004 on 2010-3-3 at 10:14 ] |

8楼2010-03-03 10:11:33
tjyl
金虫 (正式写手)
- 程序强帖: 2
- 应助: 0 (幼儿园)
- 金币: 3218.1
- 红花: 2
- 帖子: 576
- 在线: 156.6小时
- 虫号: 765184
- 注册: 2009-05-07
- 专业: 生物无机化学
- 管辖: 程序语言
9楼2010-03-03 16:16:10
fran_lin
金虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 1022
- 散金: 10
- 帖子: 251
- 在线: 96.3小时
- 虫号: 828827
- 注册: 2009-08-16
- 性别: GG
- 专业: 计算机软件
10楼2010-03-10 16:50:21







回复此楼