当前位置: 技术问答>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]$
不出报错,也不会转到“/”目录下,还是原来的目录,请问如何才能改变呢?
程序如下:
#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的进程目录不变.
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);
}
这里成功后的跳转也打印出来,应该会打印,跳转成功的.
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)的当前目录吧.