Linux目录操作相关函数

1. getcwd函数

#include<unistd.h>

char* getcwd(char* buf, size_t size);
/*
功能:
    获取当前进程的工作目录放在大小为size的buf中

参数:
    buf:存放当前工作目录的缓冲区
    size:缓冲区大小
返回值:
    成功:buf中保存当前进程工作目录
    失败:NULL
*/

 getcwd示例:

#include<stdio.h>
#include<unistd.h>
#include<string.h>

#define SIZE 128

int test01() {
    char buf[SIZE];
    memset(buf, 0, SIZE);

    char* pwd = getcwd(buf, SIZE);
    printf("%s\n", pwd);
}

 运行结果:


2. chdir函数

#include<unistd.h>

int chdir(const char* path);
/*
功能:
    修改当前进程的工作目录为path
参数:
    path:修改的工作目录
返回值:
    成功:0
    失败:-1
*/

getcwd 和chdir使用示例:

#include<stdio.h>
#include<unistd.h>
#include<string.h>

#define SIZE 128

int test01() {
    int ret = -1;
    char buf[SIZE];
    memset(buf, 0, SIZE);

    // 1. 获取当前工作目录
    char* pwd = getcwd(buf, SIZE);
    if (pwd == NULL) {
        perror("getcwd");
        return 1;
    }
    printf("当前的工作目录:%s\n", pwd);

    // 2. 切换工作目录
    ret = chdir("/home/mym"); // 若为/root则Permission denied 
    if (-1 == ret) {
        perror("chdir");
        return 1;
    }
    // memset(buf, 0, SIZE);
    pwd = getcwd(buf, SIZE);
    if (pwd == NULL) {
        perror("getcwd");
        return 1;
    }
    printf("切换后的工作目录:%s\n", pwd);

    return 0;
}

运行结果:

 


3. opendir函数

#include<sys/types.h>
#include<dirent.h>

DIR* opendir(const char* dirname);
/*
功能:
    打开目录dirname
参数:
    dirname:目录名
返回值:
    成功:指向该目录结构体的指针
    失败:NULL
*/

4. closedir函数

#include<sys/types.h>
#include<dirent.h>

int closedir(DIR* dirp);
/*
功能:
    关闭目录dirp
参数:
    dirp:目录指针
返回值:
    成功:0
    失败:-1
*/

5. readdir函数

#include<dirent.h>

struct dirent* readdir(DIR* dirp);
/*
功能:
    读取目录dirp。
    readdir会记录目录流当前位置,下次调用时会从上次停止的地方继续读取,直至读取到目录流末尾。
参数:
    dirp:需要读取的目录
返回值:
    成功:目录结构体指针
    失败:NULL
*/

dirent结构体说明:

struct dirent {
    ino_t d_ino;      // 目录的inode
    off_t d_off;      // 目录文件开头至此目录进入点的偏移
    signed short int d_reclen;  // d_name的长度,不包含NULL字符
    unsigned char d_type;       // d_type指向的文件类型
    char d_name[256];           // 目录名
}

 readdir使用示例:

#include<stdio.h>
#include<sys/types.h>
#include<dirent.h>

/*读取目录内容*/
int test03() {
    DIR* dir = NULL;
    struct dirent* d = NULL;

    // 1. 打开目录
    dir = opendir("/home/");
    if (NULL == dir) {
        perror("opendir");
        return 1;
    }
    printf("打开目录成功.\n");

    // 2. 循环读取目录
    while (1) {
        // 读取目录内容
        d = readdir(dir);
        if (NULL == d) {
            perror("readdir");
            break;
        }
        printf("d_type: %hu d_name: %s\n", d->d_type, d->d_name);
    }

    // 3. 关闭目录
    closedir(dir);
}

运行结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟大的马师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值