(小常识)为什么程序中不能使用system("cd ..")来改变pwd(present working directory)

本文通过一个示例程序解释了在Unix编程中使用system调用与chdir函数的区别,尤其是在改变当前工作目录时的不同行为。

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

熟悉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.youkuaiyun.com/sky_cool/article/details/462590

### MATLAB 中运行 `ieee_33_node_system.m` 文件时出现 “未找到” 错误的原因及解决方案 当遇到 MATLAB 报错提示 `'未找到'` 时,通常意味着 MATLAB 无法定位到指定的函数或文件。以下是几种可能原因及其对应的解决方法: #### 1. 路径设置不正确 如果 MATLAB 的当前工作目录不在包含 `ieee_33_node_system.m` 文件所在的路径下,则会报找不到该文件。 建议操作如下: - 使用命令 `pwd` 查看当前的工作目录; - 如果发现不是预期位置,可以通过 `cd('目标文件夹路径')` 更改至正确的文件夹;或者直接将所需文件复制粘贴到现有工作空间内[^1]。 ```matlab % 显示当前工作目录 disp(pwd); % 切换到新的工作目录 cd('C:\path\to\your\file'); ``` #### 2. 函数依赖缺失 某些情况下,脚本内部调用了其他自定义函数而这些辅助函数并未被加载入内存中也会引发此类问题。此时应确保所有必要的子程序都已存在于同一级目录或是已经通过 addpath 命令加入到了搜索路径里[^2]。 ```matlab addpath(genpath('C:\path\to\functions')); ``` #### 3. 文件名拼写错误 仔细核对输入的文件名称是否完全匹配实际存在的 .m 文件的名字,注意大小写的区别以及是否有隐藏字符混入其中。 #### 4. 安装包/工具箱不足 部分高级特性可能会依赖特定版本以上的 MathWorks 提供的产品组件或者是第三方开发库的支持,在这种情形下应当确认本地环境满足最低配置需求并完成相应安装过程。 对于 IEEE 33 节点配电系统而言,一般不需要额外复杂的外部资源支持即可正常执行仿真计算任务。但如果涉及到更复杂的功能模块(比如图形界面设计),则需留意上述可能性。 #### 5. 清除缓存重试 有时候旧版编译残留也可能干扰新代码段的解析流程,尝试清理历史记录再重新启动软件来排除临时性的异常状况。 ```matlab clear all; clc; % 清屏指令可选 close all hidden; run('ieee_33_node_system.m'); % 或者直接双击打开对应项目文件 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值