Linux 应用开发 - 必须掌握的 5 个底层 IO 函数
发布时间:2022-10-05 16:40:27 所属栏目:Linux 来源:
导读: 底层输入输出(Low-Level Input/Output)
这篇文章主要介绍 Linux 原生的 IO 操作(Low IO),你可能会想不是有跨平台的 ANSI C 可以使用么,为啥还要学习底层 IO ? 有以下 4 个原因:
1. 用于读
这篇文章主要介绍 Linux 原生的 IO 操作(Low IO),你可能会想不是有跨平台的 ANSI C 可以使用么,为啥还要学习底层 IO ? 有以下 4 个原因:
1. 用于读
|
底层输入输出(Low-Level Input/Output) 这篇文章主要介绍 Linux 原生的 IO 操作(Low IO),你可能会想不是有跨平台的 ANSI C 可以使用么,为啥还要学习底层 IO ? 有以下 4 个原因: 1. 用于读取大块的二进制文件 2. 在解析之前将整个文件读入内核 3. 执行数据传输以外的操作 4. 将描述符传递给子进程 你需要知道这 4 个使用底层 IO 的原因,在以后遇到实际的情况时能够想到利用底层 IO 来解决。因为底层输入输出的函数也有很多linux feof函数,这篇博客主要介绍 5 个最常用,最基本的底层 IO 函数: 1. 打开文件:open 2. 关闭文件:close 3. 读取文件:read 4. 写入文件:write 5. 操作文件指针:lseek 如果你还有兴趣学习其他的底层 IO 函数,建议你查看 glibc 的官方底层 IO 的学习资料,那是最好,最权威的资料,下面就一起来看看这 5 个函数的用法。 open & close 我们操作 IO 首先要学会的就是打开和关闭文件,我们使用 open 和 close 这两个函数,他们的声明如下(man 2 open): open linux feof函数_linux feof函数_feof函数介绍 打开文件也可以用 create,不过这个函数已经弃用了! close 再来看看 close,关闭文件会有如下结果: 1. 文件描述符被取消分配 2. 文件上进程所拥有的任何记录锁都将被解锁 3. 当与管道或 FIFO 相关联的所有文件描述符都已关闭时,任何未读数据被丢弃 linux feof函数_linux feof函数_feof函数介绍 实例 1: open_close.c 我们来看一个简单的例子: linux feof函数_feof函数介绍_linux feof函数 编译:gcc open_close.c -o open_close 运行,我们没有新建 1.txt 文件: ./open_close 1.txt file open success. file close success. 文件打开成功,并且当前目录下也有了一个 1.txt 文件了,说明我们指定的 O_CREAT 标记使得程序建立了这个文件。这两个函数基本用法就是这样,更多更详细的用法还需要你自己到 glibc 官网或者 man 2 open 去找。 read & write 我们在打开文件后肯定会做的就是读写文件了,不然你打开文件干嘛,我们来看看读文件的 API: read read 函数从文件描述符 filedes 指定的文件中读取 size 个字节,存储到 buffer 中。 linux feof函数_feof函数介绍_linux feof函数 write write 函数从 buffer 中取出 size 个字节的数据,写到 filedes 描述符表示的文件中。 feof函数介绍_linux feof函数_linux feof函数 实例 2: read_write.c 来看一个简单的读写文件的例子:读取 file1 的内容,写到 file2 中,相当于文件拷贝 linux feof函数_linux feof函数_feof函数介绍 编译: gcc read_write.c -o read_write 运行,1.txt 的内容是 hello world: feof函数介绍_linux feof函数_linux feof函数 写入成功,查看下 2.txt 的内容: cat 2.txt hello world 发现成功写入 hello world 到 2.txt 文件了,并且注意到 fd1 = 3, fd2 = 4,这也说明前面的 3 个文件描述符被系统使用了。 lseek lseek 用来移动文件指针,什么是文件指针呢?你可以理解为当前读取或者写入的位置,我们移动这个指针可以控制读取或者写入数据的位置,声明如下: linux feof函数_linux feof函数_feof函数介绍 其中 whence 参数需要特别注意,它有 3 种情况: 1. SEEK_SET:设置文件指针指向文件开始并偏移 offset 字节处 2. SEEK_CUR:设置文件指针只想当前位置偏移 offset 字节处 3. SEEK_END:设置文件指针指向文件末尾偏移 offset 字节处 实例 3:file_length.c 我们可以使用 int file_length = lseek(fd, 0, SEEK_END) 来求文件的长度,这个操作经常被使用。 linux feof函数_feof函数介绍_linux feof函数 编译:gcc file_length.c -o file_length 运行,注意到 1.txt 中的 hello world 加上 ‘\0’ 一共 12 个字符: ./file_length 1.txt file1 open success: fd = 3 file_length = 12 file1 close success. 打印出 12,计算正确啦。 结语 到此,我们就学习了 5 个底层的 IO 函数,并实际练习了 3 个例子,把这 3 个例子搞清楚,基本的用法也就掌握的差不多了 (编辑:海洋资讯信息网_我爱站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


