Linux系统编程-文件

目录

  • 1、系统编程介绍以及文件基本操作
    • 文件编程系统调用
    • 文件基本读写练习
  • 2、文件描述符以及大文件拷贝
    • 文件描述符
    • 大文件拷贝对比试验
  • 3、文件实战练习

1、系统编程介绍以及文件基本操作

系统编程是基于Linux封装好的一些函数,进行开发。

Linux文件信息属性在indoe和block的数据结构里,文件的长度和它在磁盘上的存放地点也保存在inode里。inode结构体和inode编号一一对对应。系统使用的是文件的inode编号。 ls -i 可以看到inode编号和文件名的对应情况。综上,文件结构分为inode和block两部分。

inode结构体(保存文件属性) block(报文文件内容)
用于存储文件的各属性,包括:
所有者的信息:文件的owner,group;
权限信息:read write 和excite
时间信息:建立或改变的时间(ctime)、最后读取时间(atime)、最后修改时间(mtime);
标志信息:一些flags;
内容信息:type,size,以及相应的block的位置信息。
注意:inode不记录文件名或目录名,文件名或目录名记录在文件所在目录对应的block里。

创建目录或文件:
当创建一个目录时,文件系统会为该目录分配一个inode和至少一个block,该inodejilu该目录的属性,并指向那块block,该block记录该目录下相关联文件或目录的inode编号和名字。
当创建一个文件时,文件系统会为该文件分配至少一个inode和与该文件大小相对应的数量的block。该inode记录该文件的属性,并指向block。
通过ls -i查询发现,一般情况下,目录的文件的大小都是4096byte,对应的是一个block的大小,如果一个目录中的文件数太多,以至于1个block容纳不下这么多文件时,Linux的文件系统会为该目录分配更多的block
在这里插入图片描述
普通文件的大小是该文件大小相对应的数量的block的Size。

文件编程系统调用

文件的系统调用接口和Stdio库文件接口在Linux系统中的位置。
在这里插入图片描述

文件操作是通过操作系统提供的系统调用实现对文件的创建、访问、编辑、删除等操作。
文件相关的基本系统调用如下:

open 打开一个文件来读写或创建一个空文件
creat 创建一个空文件
close 关闭以前打开的文件
read 从文件中读数据
write 写数据到文件中
/font>
可以通过man 2 open 查询系统调用的使用方法,按q退出。

文件基本读写练习

每次读取文件data的10个字节,直到读取到文件结尾,并打印出来。

2、文件描述符以及大文件拷贝

文件描述符

open的返回值是int型的文件描述符
文件描述符的概念:
一个运行中的程序被称为一个进程,他又一些与之相关的文件描述符,文件描述符是一些小的、正整数数值的数,通过他们可以访问打开的文件和设备。
文件描述符是打开文件的进程与文件之间的连接;
文件描述符是一个正整数的值(文件访问的一个句柄);
同时打开几个文件,描述符不相同;
一个文件打开多次,描述符也不相同。

#include <unistd.h>
/* Standard file descriptors*/
#define STDIN_FILENO 	0		/*标准输入*/
#define STDOUT_FILEENO 	1		/*标准输出*/
#define STDERR_FILENO	2		/*标准错误输出*/

open 系统调用:建立了一条到文件或设备的访问路径。功能为打开或创建文件。

O_RDONLY 只打开文件
O_WRONLY 只写打开文件。
O_RDWR 写打开文件

以下具体使用规则参见man手册
O_CREAT 按mode中出的向方式创建文件
O_EXCL 査文件是否存在(配合O_CREAT参数使用)。
O_TRUNC 强制创建文件(与O_CREAT参数配合使用时)。
O_APPEND open函数打开文件后,自动调整读写指针指向文件尾。

使用open函数在创建一个bbb文件,并指明其权限为664.

#include <stdio.h>
#include <sys/type.h>
#include <sys/stat.h>
#include <fcnt.h>int main(int argc,char *argv[])
{//使用open函数在桌面上创建一个bbb文件,并指明其权限为664int fd = open("/home/hegf/Desktop/bbb",O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH);printf("first create bbb fd=%d\n",fd);//O_EXCL 	检查文件是否存在(配合O_CREAT参数使用,如果文件已经存在,则返回-1)fd = open("/home/hegf/Desktop/bbb",O_EXCL|O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH);printf("second create bbb fd=%d\n",fd);return 0;
}

open与create对比练习,标准输入输出文件描述符练习

大文件拷贝对比试验

方法一:一个字节为单位进行拷贝
方法二:使用一个1024个字节的buf作为拷贝的缓存(重点掌握)

3、文件实战练习

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用AI解决量子学问题

3 人工智能用于量子力学 在这一部分中&#xff0c;我们提供了有关如何设计高级深度学习方法以有效学习神经波函数的技术评述。在第3.1节中&#xff0c;我们概述了一般情况下定义和解决量子多体问题的方法。在第3.2节中&#xff0c;我们介绍了学习量子自旋系统基态的方法。在第…

微信收款码费率0.38太坑了

作为一个有多年运营经验的商家&#xff0c;我本人在申请收款功能时曾经走过了不少弯路。我找遍了市面上的知名的支付公司&#xff0c;但了解到的收款手续费率通常都在0.6左右&#xff0c;最低也只能降到0.38。这个过程吃过不少苦头。毕竟&#xff0c;收款功能是我们商家的命脉&…

Java笔记三

包机制&#xff1a; 为了更好地组织类&#xff0c;Java提供了包机制&#xff0c;用于区别类名的命名空间。 包语句的语法格式为&#xff1a;pack pkg1[. pkg2[. pkg3...]]; 般利用公司域名倒置作为包名&#xff1b;如com.baidu.com&#xff0c;如图 导包&#xff1a; 为了能够…

Python学习 day01(注意事项)

注释 print语句 变量 数据类型的转换 运算符 / 的结果为浮点数。若// 的两边有一个为浮点数&#xff0c;则结果为浮点数&#xff0c;否则为整数。 字符串 7. 精度控制 8. input()

五、点击切换、滚动切换、键盘切换

简介 通过事件改变当前展示的信息组件,交互的事件有点击上下切换、鼠标轮动上下切换、键盘上下键切换。欢迎访问个人的简历网站预览效果 本章涉及修改与新增的文件:App.vue、public 一、鼠标点击上下箭头切换 <template><div class="app-background"…

python学习--类的浅拷贝与深拷贝

变量的赋值操作 只是形成两个变量&#xff0c;实际上还是指向同一个对象 浅拷贝 Python拷贝一般都是浅拷贝&#xff0c;拷贝时&#xff0c;对象包含的子对象内容不拷贝&#xff0c;因此&#xff0c;源对象与拷贝对象会引用同一个子对象 深拷贝 使用copy模块的deepcopy函数…

古彝文识别:文化遗产的数字化之旅

目录 &#x1f345;前言&#x1f353;古彝文介绍&#x1f353;古彝文识别的重难点&#x1f352;原籍难以获取&#xff0c;传统翻译过程繁琐&#xff0c;周期长。&#x1f352;版式多样&#xff0c;笔画相近。&#x1f352;图像质量差&#xff0c;手写识别难。&#x1f352;古彜…

成为威胁:网络安全中的动手威胁模拟案例

不断变化的网络威胁形势要求组织为其网络安全团队配备必要的技能来检测、响应和防御恶意攻击。然而&#xff0c;在研究中发现并继续探索的最令人惊讶的事情是&#xff0c;欺骗当前的网络安全防御是多么容易。 防病毒程序建立在庞大的签名数据库之上&#xff0c;只需更改程序内…

Vue组件库Element

目录 Vue组件库ElementElement简介Element快速入门环境配置Element常用组件Table表格Table表格演示Table表格属性详解 Pagination分页Pagination分页演示Pagination分页属性详解Pagination分页事件详解 Dialog对话框Dialog对话框组件演示Dialog对话框属性详解 Form表单Form表单…

使用nvm快速切换node版本,windows安装nvm实现管理node版本

使用nvm node管理工具管理node版本&#xff0c;可以做到node版本随意切换&#xff0c;能快速的降低、升高node版本 这里写目录标题 使用nvm node管理工具管理node版本&#xff0c;可以做到node版本随意切换&#xff0c;能快速的降低、升高node版本安装和使用步骤&#xff1a; 一…

XC6206 低压线性稳压器 300mA低功耗LDO

XC6206系列是一款采用CMOS和激光修整技术制造的高精度、低能耗、3端子、正电压调压器。该系列提供了一个大的电流和一个明显的小的辍学电压。 XC6206由限流器电路、驱动器晶体管、精确参考电压和纠错电路组成。该系列兼容低ESR陶瓷电容。电流限制器的折叠电路作为短路保护以及输…

如何通过Gunicorn和Niginx部署Django

本文主要介绍如何配置Niginx加载Django的静态资源文件&#xff0c;也就是Static 1、首先需要将Django项目中的Settings.py 文件中的两个参数做以下设置&#xff1a; STATIC_URL /static/ STATIC_ROOT os.path.join(BASE_DIR, static) 然后在宝塔面板中执行python manage.…

86、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->String相关命令

本次讲解要点&#xff1a; String相关命令&#xff1a;String是指value中的数据类型 启动redis服务器&#xff1a; 打开小黑窗&#xff1a; C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.…

10.12广州见 | 第十六届智慧城市大会报名通道全面开启

第十六届中国智慧城市大会 将于10月12日至13日 在广州举办 智慧城市是数字中国、智慧社会的核心载体&#xff0c;是数字时代城市发展的高级形态。由中国服务贸易协会、中国测绘学会、中国遥感委员会主办的第十六届中国智慧城市大会&#xff0c;将以“数实融合开放创新智引未…

【Java基础-JDK21新特性】它发任它发,我用java8

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

STL set 和 map

文章目录 一、标准库中 set 和 multiset 的使用二、标准库中 map 和 multimap 的使用三、set 和 map 底层红黑树的模拟实现四、set 类 和 map 类的模拟实现 一、标准库中 set 和 multiset 的使用 set 是一颗 K 模型的红黑树&#xff0c;可以存储任意类型&#xff0c;multiset 和…

【数据结构】顺序查找,折半查找,分块查找的知识点总结及相应的代码实现

目录 1、顺序查找 定义及步骤 代码实现 2、折半查找 定义及步骤 代码实现 折半查找判定树 3、分块查找 定义及步骤 1、顺序查找 定义及步骤 顺序查找的定义&#xff1a;从数据集合的起始位置开始&#xff0c;逐一比较每个数据元素&#xff0c;直到找到所要查找…

哈希表的模拟实现

unordered_set: 接口函数&#xff1a; 对应的应用&#xff1a; unrodered_map: 对应的函数接口&#xff1a; 对应的应用&#xff1a; 比较set和unordered_set的效率&#xff1a; 可以看到各个方面hashset是优于set的。 哈希表的模拟实现&#xff1a; 哈希表的实现分为两种&…

什么是Peppol ID?如何创建?

Peppol 网络的两大优势是安全和高效&#xff0c;由于Peppol 最常用于电子发票&#xff0c;因此这些优势在电子发票上展露无遗。相比之下&#xff0c;通过电子邮件发送 PDF 格式的发票和其他文件不仅处理成本较高&#xff0c;而且容易出现发票欺诈。 如果您所在的公共部门组织或…

华为云云耀云服务器 L 实例评测:快速建站的新选择,初创企业和开发者的理想之选

华为云云耀云服务器 L 实例评测&#xff1a;快速建站的新选择&#xff0c;初创企业和开发者的理想之选 文章目录 华为云云耀云服务器 L 实例评测&#xff1a;快速建站的新选择&#xff0c;初创企业和开发者的理想之选导语&#xff1a;摘要&#xff1a; 正文产品概述部署简易性步…