多进程中使用chdir()遇到的问题

在实现shell命令解释器时,遇到cd命令在子进程中使用chdir()无效的问题。原来,每个进程有独立的运行空间,chdir()仅改变子进程的当前目录,当子进程结束,父进程的环境并未受到影响。因此,在多进程编程中需要注意进程间环境的独立性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。 

需要以后注意的问题:
  多线程 多进程编程中,子线程 子进程的运行空间。

 

 

阅读(949) | 评论(0) | 转发(0) |
0

上一篇:exec函数

下一篇:uart编程

给主人留下些什么吧!~~
评论热议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值