当前位置:  技术问答>linux和unix

chdir问题

    来源: 互联网  发布时间:2016-06-01

    本文导语:      本人自己编写了一个cd.c程序,用来实现与cd命令相似的功能,但在运行时却不会更改目录,这是为什么呢? 程序如下: #include int     main(int argc, char *argv[]) {     char    env_home[20];     if(argc == 1) ...

    本人自己编写了一个cd.c程序,用来实现与cd命令相似的功能,但在运行时却不会更改目录,这是为什么呢?

程序如下:

#include

int     main(int argc, char *argv[])
{
    char    env_home[20];

    if(argc == 1)
    {
        memset(env_home, '', sizeof(env_home));
        strcpy(env_home,getenv("HOME"));
        if(chdir(env_home) != 0)
        {
            printf("Change directory %s error!n", env_home);
            exit(1);
        }

    }
    else if(argc == 2)
    {
        if(access(argv[1], 04) == -1)
        {
            printf("The directory %s doesn't exist!n", argv[1]);
            exit(1);



        }
        if(chdir(argv[1]) != 0)
        {
            printf("Change directory %s error!n", argv[1]);
            exit(1);
        }
    }
    else
    {
        printf("Usage error!n");
        exit(1);
    }

    exit(0);
}


运行:[linlin@syslinux command]$ ./cd /
      [linlin@syslinux command]$ 

不出报错,也不会转到“/”目录下,还是原来的目录,请问如何才能改变呢?

|
呵呵,貌似你应该改父进程的目录嘛,子进程跟父进程的目录不一样嘛...

|
你没有搞清楚chdir的意思.
unix环境高级编程有chdir的例子,说的很清楚.
chdir相当于调用子进程进入你指定的path.而运行cd的进程目录不变.

|
确实如楼上两位所说,bash里的cd也不是单独的tool,而是bash程序自己build in的命令。

|
你可以把
if(chdir(env_home) != 0) 
        { 
            printf("Change directory %s error!n", env_home); 
            exit(1); 
        } 

这里成功后的跳转也打印出来,应该会打印,跳转成功的.

|
你可以在chdir之后用getcwd取当前目录看看,已经切换了目录。shell创建子进程去运行程序,子进程的目录改变不会改变shell执行目录。可以在chdir后面添加

printf("current dir is: %s n", getcwd(NULL,0) );

得到更改后的目录。

|
up............

|
两个进程的问题,楼主的程序中只是转换你的程序运行进程中的目录,而楼主的意思是要改变你登陆进程(bash)的当前目录吧.

    
 
 

您可能感兴趣的文章:

  • chdir 函数问题
  • opendir() chdir() 的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 我的ubuntu 怎么不能用chdir命令
  • chdir没起作用?
  • 用chdir()写一函数实现cd()功能


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3