Linux应用开发-第三章Linux的目录IO

一、目录IO和文件IO的对比

|---------------|------------|
| 目录IO | 文件IO |
| opendir 打开目录 | open 打开文件 |
| mkdir 创建目录 | |
| readdir 读目录 | read 读文件 |
| closedir 关闭目录 | close 关闭文件 |

区别:文件IO和提到过的标准IO都是对文件操作,目录IO都是对目录的操作

二、目录IO具体函数

2.1 mkdir函数

函数介绍

objectivec 复制代码
/*
    #include <sys/stat.h>
    #include <sys/types.h>
    int mkdir(const char *pathname, mode_t mode);
        作用:创建一个目录
        参数:
            pathname: 创建的目录的路径
            mode: 权限,八进制的数
        返回值:
            成功返回0, 失败返回-1
*/

实验:实验mkdir去创建一个aaa目录,权限是0777(因为是8进制,前面需要加0)

实验代码

objectivec 复制代码
#include <sys/stat.h>
#include <sys/types.h>
#include<stdio.h>
int main(){

    int ret=mkdir("aaa", 0777);//这里虽然是0777(8进制),但是最终的权限是mode & ~umask & 0777
//做一个权限的消除,保证安全
    if (ret<0)
    {
        perror("mkdir");
        return -1;
    }
    return 0;
}

实验现象

2.2 rename函数

实验目的:我们把上一节创建的aaa目录改成bbb目录

代码

objectivec 复制代码
#include <stdio.h>
/*实验目的:我们把上一节创建的aaa目录改成bbb目录*/
 
int main(){

    int ret=rename("aaa", "bbb");
    
    if (ret<0)
    {
        perror("rename");
        return -1;
    }
    return 0;
}

实验现象

2.3 chdir函数和getcwd函数

objectivec 复制代码
/*

    #include <unistd.h>
    int chdir(const char *path);
        作用:修改进程的工作目录
            比如在/home/nowcoder 启动了一个可执行程序a.out, 进程的工作目录 /home/nowcoder
        参数:
            path : 需要修改的工作目录

    #include <unistd.h>
    char *getcwd(char *buf, size_t size);
        作用:获取当前工作目录
        参数:
            - buf : 存储的路径,指向的是一个数组(传出参数)
            - size: 数组的大小
        返回值:
            返回的指向的一块内存,这个数据就是第一个参数

*/

实验目的:获取当前的工作目录后再修改当前的工作目录

代码

objectivec 复制代码
#include <unistd.h>
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

/*实验目的:获取当前的工作目录后再修改当前的工作目录*/
int main(){
    //获取当前的工作目录
    char buf[128];
    getcwd(buf,sizeof(buf));
    printf("当前的工作目录是:%s\n",buf);

    //修改工作目录
    int ret=chdir("/home/book/Linux/lesson13");
    //修改当前目录到指定目录,我们当前的目录是lesson14
    if(ret == -1) {
        perror("chdir");
        return -1;
    } 

    /*我们怎么样去判断我们切换路径有没有成功,就在lesson13目录下创建一个文件
    此时lesson13目录下为空
    */
    int fd=open("chdir.txt", O_CREAT | O_RDWR, 0664);
    if(fd == -1) {
        perror("open");
        return -1;
    }

    //关闭刚刚创建的文件
    close(fd);

    //再次获取当前的工作路径
    char buf1[128];
    getcwd(buf1,sizeof(buf1));
    printf("修改后的工作目录是:%s\n",buf1);
    return 0;
}

实验结果

相关推荐
小渔村的拉线工12 分钟前
18.SPI通信的原理及相关知识
单片机·嵌入式硬件·spi通信·全双工通信·主从机通信
youcans_20 分钟前
【动手学STM32G4】(13)STM32G431之 TIM+ADC
stm32·单片机·嵌入式硬件·定时器
zhangrelay37 分钟前
Linux(ubuntu)如何锁定cpu频率工作在最低能耗模式下
linux·笔记·学习
_OP_CHEN1 小时前
【Linux系统编程】(二十)揭秘 Linux 文件描述符:从底层原理到实战应用,一篇吃透 fd 本质!
linux·后端·操作系统·c/c++·重定向·文件描述符·linux文件
捷智算云服务1 小时前
告别运维割裂!捷智算GPU维修中心重新定义“全栈式”维修新标准
运维·服务器·性能优化
chem41111 小时前
玩客云 边缘AI模型 本地搭建部署 llama.cpp qwen
linux·人工智能·llama
一个平凡而乐于分享的小比特1 小时前
Linux内核中的BogoMIPS详解
linux·bogomips
橘颂TA2 小时前
【Linux 网络】TCP 拥塞控制与异常处理:从原理到实践的深度剖析
linux·运维·网络·tcp/ip·算法·职场和发展·结构与算法
zbguolei2 小时前
CentOS 7.6离线安装Nginx
linux·nginx·centos
苏宸啊2 小时前
Linux开发工具(二)
linux