文件IO(Linux文件IO,目录操作函数)

前言

        本文介绍Linux系统下自带的文件IO的函数。

Linux文件IO相关函数

open函数

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
//调用实例
//只写的方式打开当前路径文件demo.c 没有创建 有清空
int fd = open("./demo.c", O_WRONLY|O_TRUNC|O_CREAT, 0666);

        功能:打开文件

        参数1:要打开文件的路径
        参数2:打开文件方式
        参数3:文件权限

O_RDONLYread only 只读
O_WRONLYwrite only 只写
O_RDWR可读可写
O_TRUNC清空
O_APPEND追加
O_CREAT创建

         返回值:非负的文件描述符,没打开一个文件,系统就会在内核空间开辟一块内存。会分配一个非负文件描述符作为每个文件的唯一标识。 成功,int fd 非负的数;失败,-1。

文件权限掩码(umask)

        在Linux中,文件权限掩码(umask)是一个权限掩码,用于限制新建文件的默认权限。目的是提高系统安全性,通过限制新建文件的默认权限,确保用户不会意外赋予其他用户过多的权限。

新创建的文件默认权限为 666(rw-rw-rw-)
新创建的目录默认权限为 777(rwxrwxrwx)

0        代表不掩盖(允许设置该权限)
1        代表掩盖执行权限
2        代表掩盖写入权限
3        代表掩盖读取权限 

close函数

#include <unistd.h>
int close(int fd);

        功能:关闭文件
        参数:open函数的返回值,打开文件的唯一标识
        返回值:成功,0;失败,-1。 

read函数

#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
//调用案例
char buf[128] = {0};    //存储数据
read(fd, buf, sizeof(buf));

        功能:按照字节来读取文件内容

        参数1:open的返回值,打开文件的唯一标识
        参数2:读取内容存放的首地址
        参数3:能读取的最多字节数

        返回值:成功,实际读取的字节数;失败,-1 

write函数

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
//调用案例
char buf[128] = "hello world";
write(fd, buf, strlen(buf));

        功能:按照字节写入内容

        参数1:open的返回值,打开文件的唯一标识
        参数2:要写入内容存放的首地址
        参数3:最多要写入的字节数

        返回值:成功,实际写入的字节数;失败,-1。 

lseek函数

#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
typedef long off_t;
//调用实例
long res = lseek(fd,100,SEEK_SET); //相对文件起始位置向后移动100个字符
lseek(fd,-100,SEEK_END); //相对于文件尾位置向前移动100个字符

        功能:移动文件光标指针的同时,还能获取文件光标指针的位置(兼具fseek和ftell函数的功能)

        参数1:open的返回值,打开文件的唯一标识
        参数2:偏移量,正数向后,负数向前
        参数3:基准位
                SEEK_SET        文件头
                SEEK_END        文件尾
                SEEK_CUR        当前位置 

        返回值:成功,返回文件指针所在位置;失败,-1

统计一个文件有多少个字节的方式(3种)

//1.fgetc一个字符一个字符读 然后计数
while((ch = fgetc(fp))!= EOF)
    count++;
//2.fseek移动文件指针位置到文件尾 再用ftell获取文件指针位置
fseek(fp,0,SEEK_END);
long size = ftell(fp);
//3.lseek移动文件指针位置到末尾获取文件指针位置即可
long size = lseek(fd,0,SEEK_END);

三个文件描述符

        标准输入:0
        标准输出:1
        标准错误:2

目录操作函数

stat函数

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *pathname, struct stat *statbuf);

struct stat {
		dev_t     st_dev;         /* ID of device containing file */
		ino_t     st_ino;         /* Inode number */
		mode_t    st_mode;        /* File type and mode */
		nlink_t   st_nlink;       /* Number of hard links */
		uid_t     st_uid;         /* User ID of owner */
		gid_t     st_gid;         /* Group ID of owner */
		dev_t     st_rdev;        /* Device ID (if special file) */
		off_t     st_size;        /* Total size, in bytes */
		blksize_t st_blksize;     /* Block size for filesystem I/O */
		blkcnt_t  st_blocks;      /* Number of 512B blocks allocated */
};

        功能:获取文件属性

        参数1:获取文件的路径
        参数2:用于存放文件属性结构体的首地址

        返回值:成功,0;失败,-1

opendir函数

#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);

        功能:打开目录
        参数:打开文件路径
        返回值:成功,DIR* 非空的打开目录文件的标识,目录流指针;失败,NULL

readdir函数

#include <dirent.h>
struct dirent *readdir(DIR *dirp);

struct dirent
{
    long d_ino;                /* inode number 索引节点号 */
    off_t d_off;               /* offset to this dirent 在目录文件中的偏移 */
    unsigned short d_reclen;   /* length of this d_name 文件名长 */
    unsigned char d_type;      /* the type of d_name 文件类型 */
    char d_name[NAME_MAX + 1]; /* file name (null-terminated) 文件名,最长255字符 */
}

        功能:读取目录,每次读取一个文件
        参数:opendir的返回值,目录流指针,目录文件的标识
        返回值:成功,struct dirent * ,用来保存从目录中读取文件的内容;失败,NULL,当目录文件读取到尾巴。

closedir函数

#include <sys/types.h>
#include <dirent.h>
int closedir(DIR *dirp);

        功能:关闭目录文件
        参数:opendir的返回值
        返回值:成功,0;失败,-1 

案例

#include <dirent.h>
#include <stdio.h>
int main(int argc, const char *argv[])
{
    // 打开目录
    DIR *dp = opendir("./Netdisk");
    if (NULL == dp)
    {
        perror("opendir failed");
        return -1;
    }
    struct dirent *em = NULL;
    // 读目录
    while (1)
    {
        em = readdir(dp); // 调用一次读取出一个文件
        if (em == NULL)
            break; // 读取文件完毕结束循环
        // 将隐藏文件不打印 隐藏文件的特点是以.开头
        if (em->d_name[0] == '.')
            continue;
        printf("%s ", em->d_name);
    }
    printf("\n");
    // 关闭目录
    closedir(dp);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/893135.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024ideaUI切换和svn与git的切换

2024的UI实在很不舒服&#xff0c;隐藏了很多按键&#xff1b; 第一步&#xff1a; 视图 -》 外观 -》 工具栏选出来&#xff1b; 结果出来&#xff1a; 运行的按键和设置的按钮 第二步 点击设置的按钮&#xff0c;选择最后一个&#xff0c;重启就行 结果 舒服&#xff01; s…

双通道音频功率放大电路D2822M兼容TDA2822,全封装输出功率0.11W,用于音频产品

在某客户的便携式音频产品中&#xff0c;客户想在确保其产品的性能的前提下&#xff0c;为产品方案寻找一颗国产备份料。客户产品之前使用的是TDA2822&#xff0c;在了解客户的电路设计以及该产品的电气特性后&#xff0c;给客户寻找了一款可兼容相同电路设计使用的国产厂牌芯谷…

2010年国赛高教杯数学建模C题输油管的布置解题全过程文档及程序

2010年国赛高教杯数学建模 C题 输油管的布置 某油田计划在铁路线一侧建造两家炼油厂&#xff0c;同时在铁路线上增建一个车站&#xff0c;用来运送成品油。由于这种模式具有一定的普遍性&#xff0c;油田设计院希望建立管线建设费用最省的一般数学模型与方法。   1. 针对两炼…

Python零基础01——Python的由来,Python的特点、优缺点有哪些?

文章目录 Python的由来Python的特点Python的优缺点什么是编译器 Python的由来 1989年圣诞节期间&#xff0c;在阿姆斯特丹为打发圣诞节的无趣&#xff0c;决定开发一款新的脚本解释语言&#xff0c;作为ABC语言的一种继承&#xff0c;然后他就这么做了&#xff0c;并实现了&am…

Python中的help()函数:追踪错误并提供解决方案

引言 在Python编程中&#xff0c;help()函数是一个非常有用的内置工具&#xff0c;它能够提供关于模块、关键字、属性和方法等的详细信息。对于初学者来说&#xff0c;help()函数可以帮助他们理解代码的工作原理&#xff0c;快速查找文档&#xff0c;以及解决编程过程中遇到的…

<Linux> 线程安全

目录 文章目录 一、Linux线程互斥 1. 进程线程间的互斥相关背景概念 2. 互斥量mutex 3. 互斥量接口 初始化互斥量 动静态分配 销毁互斥量 互斥量加锁 互斥量解锁 4. 互斥量实现原理 5. 简单封装互斥量 二、可重入与线程安全 1. 概念 1.1 可重入 1.2 线程安全 2. 常见的线程不…

LLama 3.2 1B 和 3B:体型虽小,但威力强大!

MetaAI 刚刚推出了 Llama-3.2&#xff0c;这是一套新的模型&#xff0c;其中包括两个令人印象深刻的轻量级大型语言模型 (LLM)&#xff0c;分别具有 10 亿 (1B) 和 30 亿 (3B) 个参数&#xff0c;以及更大的视觉语言模型 (VLM)&#xff0c;分别具有 11B 和 90B 个参数。 取决于…

IT监控平台可视化:多维度展示助力运维效率提升

在信息化时代&#xff0c;IT设备的稳定性与业务的连续性紧密相连&#xff0c;任何细微的故障都可能给企业带来巨大的损失。因此&#xff0c;IT运维团队面临着前所未有的挑战&#xff0c;他们需要迅速、准确地识别和解决问题&#xff0c;以确保业务的平稳运行。而IT监控平台的可…

Django学习- ORM基础操作_创建数据

ORM操作&#xff1a; 管理器对象&#xff1a; 创建数据&#xff1a; Django shell 想要操作模型对象&#xff0c;首先我们需要把它引进Django shell中 >>> from bookstore.models import Book >>> b1 Book.objects.create(titleAI, pub清华大学出版社, pr…

Java | Leetcode Java题解之第478题在圆内随机生成点

题目&#xff1a; 题解&#xff1a; class Solution {Random random;double xc, yc, r;public Solution(double radius, double x_center, double y_center) {random new Random();xc x_center;yc y_center;r radius;}public double[] randPoint() {double u random.next…

基于机器学习与深度学习的贷款批准预测

1.项目背景 该数据集源自Kaggle的“Playground Series - Season 4, Episode 10”竞赛&#xff0c;是通过在贷款批准预测数据集上训练的深度学习模型生成的数据&#xff0c;旨在使用借款人信息预测贷款批准结果&#xff0c;它通过模拟真实贷款审批场景&#xff0c;帮助金融机构…

【Linux系统编程】环境基础开发工具使用

目录 1、Linux软件包管理器yum 1.1 什么是软件包 1.2 安装软件 1.3 查看软件包 1.4 卸载软件 2、Linux编辑器-vim 2.1 vim的概念 2.2 vim的基本操作 2.3 vim的配置 3、Linux编译器-gcc/g 3.1 gcc编译的过程​编辑​编辑​编辑 3.2 详解链接 动态链接 静态链接 4…

深度解析LMS(Least Mean Squares)算法

目录 一、引言二、LMS算法简介三、LMS算法的工作原理四、LMS算法的特点五、LMS算法的应用场景六、LMS算法的局限性七、总结八、进一步探讨 一、引言 自适应滤波器是一种动态调整其参数以适应变化环境的信号处理工具&#xff0c;广泛应用于噪声消除、信道均衡和系统识别等领域。…

Axure RP电商系统商城PC+app+后台买家卖端高保真原型模板及元件库

AxureRP电商商城PCapp后台买家卖端高保真原型模板本套包含三份原型图素材 APP买家端原型简介&#xff1a; 包含了用户中心、会员成长、优惠券、积分、互动社区、运营推广、内容推荐、商品展示、订单流程、订单管理、售后及服务等完整的电商体系功能架构和业务流程。 本模板由…

Rancher—多集群Kubernetes管理平台

目录 一、Rancher 简介1.1 Rancher 和 k8s 的区别 二、Rancher 安装及配置2.1 安装 rancher2.2 登录 Rancher 平台2.3 Rancher 管理已存在的 k8s 集群2.4 创建名称空间 namespace2.5 创建 Deployment 资源2.6 创建 service2.7 Rancher 部署监控系统 一、Rancher 简介 Rancher …

中国科学院大学与美团发布首个交互式驾驶世界模型数据集DrivingDojo:推进交互式与知识丰富的驾驶世界模型

中国科学院大学与美团发布首个交互式驾驶世界模型数据集DrivingDojo&#xff1a;推进交互式与知识丰富的驾驶世界模型 Abstract 驾驶世界模型因其对复杂物理动态的建模能力而受到越来越多的关注。然而&#xff0c;由于现有驾驶数据集中的视频多样性有限&#xff0c;其卓越的建…

uniapp学习(004-2 组件 Part.2生命周期)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第31p-第p35的内容 文章目录 组件生命周期我们主要使用的三种生命周期setup(创建组件时执行)不可以操作dom节点…

我对软件工程的理解

1 引言 从事软件行业这么年&#xff0c;写了10年代码&#xff0c;又从事了多年的项目产品方面的工作&#xff0c;一些每天用到的软件工程的方法&#xff0c;虽然天天都在用但一些概念总感觉似是而非&#xff0c;正好借假期的时间&#xff0c;好好整理下&#xff0c;以供自己或…

【你也能从零基础学会网站开发】浅谈一下SQL Server 2000中的NULL值到底有什么用处

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 NULL 是什么 …

2d实时数字人聊天语音对话使用案例,对接大模型

参看: https://github.com/wan-h/awesome-digital-human-live2d 电脑环境: ubuntu 1060ti 下载: git clone https://github.com/wan-h/awesome-digital-human-live2d.gitdocker部署; cd awesome-digital-human-live2d docker-compose -f docker-compose-quickStart.ya…