我是靠谱客的博主 正直金针菇,最近开发中收集的这篇文章主要介绍(小常识)为什么程序中不能使用system("cd ..")来改变pwd(present working directory),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

熟悉Unix编程的人都知道,在<stdlib.h>中声明的函数system是用来在程序中调用shell命令的方法。例如你可以在程序中写一行system("rm *");这相当于你在命令行下敲rm *,但是cd命令却不能用system来做的。一般,你要改变程序的pwd,你都必须用函数chdir(const char*),它在<unistd.h>中声明。为什么呢?请看下面这段程序:

 

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

#include<stdio.h>

#include<stdlib.h>

 

 

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。


http://blog.csdn.net/sky_cool/article/details/462590

最后

以上就是正直金针菇为你收集整理的(小常识)为什么程序中不能使用system("cd ..")来改变pwd(present working directory)的全部内容,希望文章能够帮你解决(小常识)为什么程序中不能使用system("cd ..")来改变pwd(present working directory)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部