热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

简图记录linux文件编程基础

简图记录学习~参考《高级UNIX编程》linux应用编程中文件编程是很重要的一块一、基础概念文件概念本质是对数据的一种抽象,linux对其做了扩展,

简图记录学习~参考《高级UNIX编程》linux应用编程中 文件编程是很重要的一块

一、基础概念


文件概念

本质是对数据的一种抽象,linux对其做了扩展,不仅数据 如 设备资源 目录 套接字都视作文件。这样统一了操作接口,“一切皆文件”。要掌握linux的文件编程,首先得熟悉相关概念:文件描述符、索引节点、熟悉linux下6种文件类型、文件权限。

文件的分类


1、普通文件(-) 以线性数组组织的字节,存储在磁盘上。任意字节可以被读写,但不可删除或者插入字节(改变大小),可以重写覆盖。

2、目录文件(d) 用于访问文件的两个列表,一为文件名,一为索引字节好。目录文件和普通文件一样占用一个信息节点。

3、符号连接(l) 硬链接,目录中揭露,包含文件名和索引节点号。软链接,一段指向某个文件的记录信息,类似快捷方式。当一个文件的硬件链接数为0,表示文件删除。

4、特殊文件(b/c)某种设备,包含块设备(按块如4096字节访问)、和 字符设备 (按任意长度字节访问)。

5、命名管道(p) 用于进程剑通信的文件(传输数据)

6、套接字文件(s) 用于计算机内或者计算机之间的一种通信文件。


文件描述符(访问文件的句柄)

打开文件时,返回的整数,内核生成数据结构,通过文件描述符对文件进行操作。

特殊文件描述符:0标准输入 1标准输出 2错误输出,进程开始时就已经打开。

索引节点(系统中文件的唯一标识)

inode分为内核node(内存中)和 磁盘inode。inode信息包含:文件类型、硬件链接数、字节数、最后访问/修改时间、磁盘块指针或者设备号。

文件权限(ls -l查看,chmod修改)


文件权限ls -l查看,信息:[文件类型][文件所有者权限][同组权限][其他用户权限]

drwx rwx rwx // 目录文件,owner/同组用户/其他用户 都有 读/写/执行 权限

-rwx r-- r-- //普通文件,owner 有 读/写/执行 权限,同组用户/其他用户 只有读 权限

文件夹权限概念:r代表可以读取文件夹内容的权限,即读取文件夹中文件名列表的权限,如果没有这个权限你无法读取到文件夹内的文件名列表。w标识可以修改文件夹列表(改文件名、新增、删除、移动文件)。x权限在文件夹上就不是可执行权限了,而是代表用户能否进入该目录。

索引节点号(索引节点的索引,通常在目录中与文件名对应)


二、基础文件IO操作

文件相关基础操作 systemcall:如何创建、销毁、读写文件、如何改变文件读写偏移量。

更深层的学习:理解内核缓存概念、如何优化文件的读写。

文件的打开/创建:int open(const char *path, int flags, mode_t perms);---成功返回文件描述符,失败-1

    flags 标志:

        必选标志:O_RDONY只读/O_RDWR可读可写/O_WRONLY只写

        可选标志:O_APPEND每次写追加/O_CREAT无就创建(如果再带上O_EXCL表示存在就失败)

    perms 创建权限(O_CREAT有用):

       S_IRUSR | S_IWUSR | S_IXUSR (拥有者的 读/写/执行权限)---复合标志如:S_IRWXU(拥有 读写执行)

       S_IRGRP | S_IWGRP | S_IXGRP (同组的 读/写/执行权限)

       S_IROTH | S_IWOTH | S_IXOTH (其他用户的 读/写/执行权限)

文件的关闭:int close(int fd);

文件的删除:int unlink(const char* path);删除目录中链接,节点中文件硬链接数-1。--0成功-1失败;

读取文件:size_t read(int fd, void *buf, size_t nbytes);--成功返回读取字节数,失败-1;

写文件:size_t write(int fd, void *buf, size_t nbytes);--成功返回写入字节数,失败-1;

设置偏移量:off_t lseek(int fd, off_t pos, int whence);--返回设置后相对偏移的变化

     whence:SEEK_SET直接移动到pos处,SEEK_CUR 当前位置+pos(可为负数),SEEK_END 相对结尾pos处;

获取文件信息(设备号/节点号/大小等):int stat(const char *path, stuct stat *buf);


三、高级文件IO操作

接下来学习更丰富的文件接口:如 软硬链接创建、目录的相关控制、access使用等等

 

四、文件系统简介

文件系统的学习,学习ext2基本结构划分、掌握系统是怎样通过对inode和数据块的访问去磁盘读取如/var/test这样一个文件。

 

学习建议:学习文件编程不但要会使用接口,更要逐步深入,理解背后的访问机制,弄清楚系统到底是如何通过路径名确认访问磁盘上的数据。


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 判断数组是否全为0_连续子数组的最大和的解题思路及代码方法一_动态规划
    本文介绍了判断数组是否全为0以及求解连续子数组的最大和的解题思路及代码方法一,即动态规划。通过动态规划的方法,可以找出连续子数组的最大和,具体思路是尽量选择正数的部分,遇到负数则不选择进去,遇到正数则保留并继续考察。本文给出了状态定义和状态转移方程,并提供了具体的代码实现。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Linux磁盘的分区、格式化的观察和操作步骤
    本文介绍了如何观察Linux磁盘的分区状态,使用lsblk命令列出系统上的所有磁盘列表,并解释了列表中各个字段的含义。同时,还介绍了使用parted命令列出磁盘的分区表类型和分区信息的方法。在进行磁盘分区操作时,根据分区表类型选择使用fdisk或gdisk命令,并提供了具体的分区步骤。通过本文,读者可以了解到Linux磁盘分区和格式化的基本知识和操作步骤。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
author-avatar
mobiledu2502924733
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有