简图记录-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这样一个文件。

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值