linux编程----目录流

二、目录相关操作函数

1. 获取当前工作目录:getcwd 函数

函数说明

这个函数可以获取当前进程的工作目录的绝对路径。

  • 头文件:#include <unistd.h>

  • 函数原型:char *getcwd(char *buf, size_t size);

  • 参数:

    • buf:指向存放当前目录路径的数组的指针;

    • size:这个数组的大小。

  • 返回值:

    • 成功:返回包含当前工作目录的字符串,如果buf不为 NULL,就返回buf

    • 失败:返回 NULL,并设置errno

  • 特殊情况:如果传入的buf为 NULL,且size为 0,getcwd会自动调用malloc申请合适大小的内存空间,把路径填进去,然后返回这个内存的地址。注意:这个内存需要调用者自己用 free 释放

cpp 复制代码
#include <common.h>
#include<my_header.h>
int main(int argc, char *argv[]){
 char  buf[100];
 char* cwd=getcwd(buf,sizeof(buf));//只要getcwd调用成功,它会自动在路径最后一个字符后加\0;
    ERROR_CHECK(cwd,NULL,"getcwd");
    puts(cwd);
    printf("%s\n",cwd);//这个printf等价于puts
    puts(buf);//getcwd成功时返回的是buf所指向的地址,这个指针指向了一个字符串,字符串存放了当前工作目录的绝对路径
    free(cwd);
return 0;

}

2. 改变当前工作目录:chdir 函数

函数说明

这个函数可以改变当前进程的工作目录。

  • 头文件:#include <unistd.h>

  • 函数原型:int chdir(const char *path);

  • 参数:

    • path:要切换到的目录路径,可以是相对路径或者绝对路径。
  • 返回值:

    • 成功:返回 0;

    • 失败:返回 - 1,并设置errno

cpp 复制代码
// func.h,这个头文件可以放到/usr/include目录下,方便后续使用
#ifndef __WD_FUNC_H
#define __WD_FUNC_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define ARGS_CHECK(argc, n) {
if (argc != n) {
fprintf(stderr, "ERROR: expected %d arguments.\n", n);
exit(1);
}
}
#define ERROR_CHECK(retval, val, msg) {
if (retval == val) {
perror(msg);
exit(1);
}
}
#define SIZE(a) (sizeof(a)/sizeof(a[0]))
#endif

// getcwd.c
#include <func.h>
int main(void) {
    // 这里我们让系统自动malloc内存
    char* cwd = getcwd(NULL, 0);
    ERROR_CHECK(cwd, NULL, "getcwd");
    puts(cwd);
    // 记得释放malloc的内存
    free(cwd);
    return 0;
}
注意事项
  • 当前工作目录是进程的属性,每个进程都有自己的工作目录;

  • 父进程创建子进程(fork)的时候,子进程会继承父进程的当前工作目录。

相关推荐
小兵张健6 分钟前
价值1000的 AI 工作流:Codex 通用前端协作模式
前端·aigc·ai编程
sunny_16 分钟前
面试踩大坑!同一段 Node.js 代码,CJS 和 ESM 的执行顺序居然是反的?!99% 的人都答错了
前端·面试·node.js
拉不动的猪29 分钟前
移动端调试工具VConsole初始化时的加载阻塞问题
前端·javascript·微信小程序
NE_STOP1 小时前
MyBatis-配置文件解读及MyBatis为何不用编写Mapper接口的实现类
java
数据组小组2 小时前
免费数据库管理工具深度横评:NineData 社区版、Bytebase 社区版、Archery,2026 年开发者该选哪个?
数据库·测试·数据库管理工具·数据复制·迁移工具·ninedata社区版·naivicat平替
ayqy贾杰2 小时前
Agent First Engineering
前端·vue.js·面试
IT_陈寒2 小时前
SpringBoot实战:5个让你的API性能翻倍的隐藏技巧
前端·人工智能·后端
iceiceiceice3 小时前
iOS PDF阅读器段评实现:如何从 PDFSelection 精准还原一个自然段
前端·人工智能·ios
大金乄3 小时前
封装一个vue2的elementUI 表格组件(包含表格编辑以及多级表头)
前端·javascript
葡萄城技术团队4 小时前
【性能优化篇】面对万行数据也不卡顿?揭秘协同服务器的“片段机制 (Fragments)”
前端