Chinaunix首页 | 论坛 | 博客
  • 博客访问: 82117
  • 博文数量: 14
  • 博客积分: 117
  • 博客等级: 民兵
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-08 12:40
文章分类

全部博文(14)

文章存档

2013年(2)

2012年(12)

我的朋友

分类: LINUX

2012-07-30 11:06:34

这几天在qt4里运用了system,发现有些问题:system是用来在程序中调用shell命令的方法。例如你可以在程序中写一行system("ls");这相当于你在终端下敲ls,但是cd命令却不能正常的按照自己的思路进行。上网查找了相关资料:

一般,你要改变程序的pwd,你都必须用函数chdir(const char*),它在中声明。为什么呢?请看下面这段程序:

 

在Unix/Linux下你可以编译运行它

#include

#include

 

 

int main()

{

        printf("out/n");

        printf("-----------------------------------------/n");

        system("cd ../npwd");

        printf("-----------------------------------------/n");

        printf("out/n");

        system("pwd");

       

}

 

你会惊奇的发现,两次system调用pwd命令后,在屏幕上的输出不同。在我的机器上,可执行文件位于/home/chensj下,输出如下:

out

-----------------------------------------

/home

-----------------------------------------

out

/home/chensj

 

这说明了什么呢?

根据shell的实现机制,我认为system内部实现,实际上是派生了程序的一个子进程,该子进程跟程序的父进程相同,都是shell进程,然后它将命令行参数传给这个子shell,子shell执行了cd命令后改变了自己的pwd为/home,之后又执行pwd输出为/home,随后消亡。而程序的pwd则决定于它的父shell进程的pwd,它没有变,所以第二次调用system("pwd")输出仍然为/home/chensj。

所以在system里使用cd命令会非你所想的进行。写此文一来是总结之前遇到的这问题,二是给后面的人一个提醒。

阅读(2261) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~