文件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 */

		/* Since Linux 2.6, the kernel supports nanosecond
		   precision for the following timestamp fields.
		   For the details before Linux 2.6, see NOTES. */

		struct timespec st_atim;  /* Time of last access */
		struct timespec st_mtim;  /* Time of last modification */
		struct timespec st_ctim;  /* Time of last status change */

#define st_atime st_atim.tv_sec      /* Backward compatibility */
#define st_mtime st_mtim.tv_sec
#define st_ctime st_ctim.tv_sec
};

opendir函数

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

readdir函数

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

closedir函数

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

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

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

相关文章

JAVA就业笔记8——第二阶段(5)

课程须知 A类知识&#xff1a;工作和面试常用&#xff0c;代码必须要手敲&#xff0c;需要掌握。 B类知识&#xff1a;面试会问道&#xff0c;工作不常用&#xff0c;代码不需要手敲&#xff0c;理解能正确表达即可。 C类知识&#xff1a;工作和面试不常用&#xff0c;代码不…

Spire.PDF for .NET【页面设置】演示:在 C#/VB.NET 中创建 PDF 小册子

当人们打印大型 PDF 文档时&#xff0c;PDF 小册子非常有用。它在书籍、报纸和杂志编辑中特别受欢迎。本节将介绍一种通过C#、VB.NET 中的.NET PDF组件创建 PDF 小册子的非常简单的方法。 Spire.PDF for .NET 是一款独立 PDF 控件&#xff0c;用于 .NET 程序中创建、编辑和操作…

进程和作业管理

1.概念 &#xff08;1&#xff09;进程 进程是指一个具有独立功能的程序的一次运行过程&#xff0c;也是系统进行资源分配和调度的基本单位&#xff0c;即每个程序模块和它执行时所处理的数据组成了进程。进程虽不是程序&#xff0c;但由程序产生。进程与程序的区别在于&#…

中国联通目前规模最大的境外综合性通信枢纽大楼

中国联通&#xff08;香港&#xff09;将军澳智 云数据中心&#xff1a;打造境外通信服务新标杆 在数字化浪潮席卷全球的今天&#xff0c;数据中心作为信息社会的基石&#xff0c;其重要性日益凸显。中国联通&#xff08;香港&#xff09;将军澳智 云数据中心&#xff0c;作…

基于django的代理商订单管理系统

基于Django的代理商订单管理系统——高效助力代理商管理 在如今企业业务日益复杂的环境下&#xff0c;如何高效地管理代理商订单成为不可或缺的环节。我们推出了一款基于Django框架的代理商订单管理系统&#xff0c;专为企业的订单管理及返利控制设计&#xff0c;为企业与代理…

uniapp-uniapp + vue3 + pinia 搭建uniapp模板

使用技术 ⚡️uni-app, Vue3, Vite, pnpm &#x1f4e6; 组件自动化引入 &#x1f34d; 使用 Pinia 的状态管理 &#x1f3a8; tailwindcss - 高性能且极具灵活性的即时原子化 CSS 引擎 &#x1f603; 各种图标集为你所用 &#x1f525; 使用 新的 <script setup> …

LLM - 配置 ModelScope SWIFT 测试 Qwen2-VL 图像微调(LoRA) 教程(2)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142882496 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 SWIFT …

编程练习7 5G网络建设

需要用到并查集的相关知识&#xff1a;可以参考如下链接 并查集详解&#xff08;原理代码实现应用优化&#xff09;-CSDN博客 #include<iostream> #include<algorithm> #include<vector>using namespace std;vector<int> split(string params_str) {…

观察者模式的思考

观察者模式由来 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它的起源可以追溯到20世纪90年代初&#xff0c;由设计模式四人帮&#xff08;Erich Gamma, Richard Helm, Ralph Johnson 和 John Vlissides&#xff09;在其著作《设计模…

KTH576X在智能手表行业表冠产品中的应用方案

行业需求 随着移动技术的发展&#xff0c;许多传统的电子产品也开始增加移动方面的功能&#xff0c;比如过去只能用来看时间的手表&#xff0c;现今也可以通过智能手机或家庭网络与互联网相连&#xff0c;显示来电信息和新闻、天气信息等内容。这类产品主要是为消费者在不方便…

【父子线程传值TransmittableThreadLocal使用踩坑-及相关知识拓展】

文章目录 一.业务背景二.TransmittableThreadLocal是什么&#xff1f;三.问题复现1.定义注解DigitalAngel2.定义切面3.TransmittableThreadLocal相关4.线程池配置信息5.Controller6.Service7.测试结果8.问题分析9 解决办法及代码改造10.最终测试&#xff1a; 四.与 ThreadLocal…

Web集群服务-代理和负载均衡

1. 概述 1. 用户----->代理--->Web节点,后面只有一个节点,一般使用的是nginx代理功能即可 2. 后面如果是集群需要使用nginx负载均衡功能 2. 代理分类 代理分类方向应用正向代理用户(服务器)-->代理--->外部(某网站)服务器通过代理实现共享上网/访问公网反向代理用…

数据结构~AVL树

文章目录 一、AVL树的概念二、AVL树的定义三、AVL树的插入四、AVL树的平衡五、AVL树的验证六、AVL树的删除七、完整代码八、总结 一、AVL树的概念 AVL树是最先发明的自平衡二叉查找树&#xff0c;AVL是⼀颗空树&#xff0c;或者具备下列性质的二叉搜索树&#xff1a;它的左右子…

《微软飞行模拟2024》在飞行中可能占用高达180 Mb/s的互联网带宽

《微软飞行模拟2024》是一款要求相当高的游戏。 从理想的系统规格所需的高性能系统来看&#xff0c;该游戏目前在用户飞行和地形加载时使用的网络带宽高达 180 Mb/s。 这相当于每小时耗费高达 81 GB 的网络数据&#xff0c;对于有数据上限的用户来说简直就是噩梦。 数据上限通…

[Python学习日记-47] Python 中的系统调用模块—— os 与 sys

[Python学习日记-47] Python 中的系统调用模块 简介 os sys 简介 os 模块和 sys 模块提供了很多允许你的程序与操作系统直接交互的功能。下面将进行逐一介绍。 os 一、os.getcwd() 得到当前工作目录&#xff0c;即当前 Python 脚本工作的目录路径&#xff08;绝对路径&#…

芝法酱学习笔记(0.7)——harbor与SpringBoot容器化docker部署

前言 之前我们主要讲的jar包部署。使用jar包部署可能导致不同服务互相争抢资源&#xff08;隔离性&#xff09;&#xff0c;不同服务可能需要不同的jdk环境&#xff0c;有时也会造成困扰。故在微服务时代&#xff0c;我们通常使用docker部署 一、docker安装 docke相关的知识…

sherpa-ncnn 语言模型简单对比

在昨天把系统搞崩溃前&#xff0c;对sherpa-ncnn的中文模型做了一个简单的对比。这次使用的分别是sherpa-ncnn-streaming-zipformer-bilingual-zh-en-2023-02-13&#xff08;以下简称bilingual-zh-en-2023-02-13&#xff09;和sherpa-ncnn-streaming-zipformer-small-bilingual…

WPF自定义控件实现的几种方法

Windows Presentation Foundation (WPF) 是微软提供的一种用于构建 Windows 应用程序的开发框架。它以其强大的数据绑定、资源管理和可视化效果处理能力而闻名。在WPF中&#xff0c;自定义控件的实现是一个非常重要的方面&#xff0c;几乎所有的应用程序都会或多或少地需要自定…

哪款宠物空气净化器性价比高?希喂、米家和范罗士哪款更好?

这次我真的不是很想抱怨&#xff0c;是我男朋友真的很过分&#xff01;真的很过分&#xff0c;差点让我们两个分道扬镳。先听我说&#xff0c;这不是我和他都嫌家里太安静了吗&#xff0c;每天下班后两个人吃完饭就各玩各的手机&#xff0c;生活太无趣了&#xff0c;加上这几年…

【云从】五、负载均衡CLB

文章目录 1、负载均衡2、云负载均衡CLB3、CLB的组成4、CLB的应用场景 1、负载均衡 互联网发展早期&#xff0c;应用服务单机部署就足以负载所有用户的访问需求 如此&#xff0c;部署和运维都简单&#xff0c;但随着用户和访问量的提高&#xff0c;单台服务器的硬件性能是有上限…