免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2907 | 回复: 1
打印 上一主题 下一主题

多进程中使用chdir()遇到的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-01 21:13 |只看该作者 |倒序浏览

int chdir( const char *s )
{ return( lfn_mrc_dir( getshortfilename( s ), 0x3B00 ) ); }
   今天在做shell命令解释器的时候,在解释内部命令cd的时候,遇到一个问题,在子进程中调用chdir()改变当前目录,发现无法改变当前进程。 调用过程如下:
pid_t pid;
if( pid=fork()==-1)
{
  perror("fork error");
  exit(1);
}
if( pid==0)
{
  chdir(char *path);
  exit(0);
}
else if(pid==getpid())
{
  waitpid(pid,NULL,NULL);
  execlp("pwd","pwd",(void *)0);
  exit(0);
}    //输出信息显示 当前目录没哟改变
后来跟踪发现不能改变的原因:
在父进程中创建子进程后,子进程会有自己的运行空间,而每个进程运行空间处理保存进程运行的代码、数据、堆栈信息外,还有保存该进程运行环境的环境变量信息,如果通过调用chdir(),改变的只是当前进程的当前目录,当子进程调用结束后,既exit()推出后,进程运行环境即被消亡,而父进程的运行环境并没有发生改变, 实质情况就是调用chdir(),改变的只是子进程的当前目录,子进程运行结束后,返回父进程,父进程的当前目录并没有该gaibian。  
需要以后注意的问题:
  多线程 多进程编程中,子线程 子进程的运行空间。




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/94039/showart_1887764.html

论坛徽章:
0
2 [报告]
发表于 2012-09-16 22:59 |只看该作者
垃圾代码。。。。不解释~~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP