Linux系统调用四、lseek()函数详解

您所在的位置:网站首页 系统调用的函数 Linux系统调用四、lseek()函数详解

Linux系统调用四、lseek()函数详解

#Linux系统调用四、lseek()函数详解| 来源: 网络整理| 查看: 265

🚀文章目录 ❀1. 案例:写文件并把写入内容打屏❀2. lseek移动文件读写位置❀3. lseek计算文件大小❀4. lseek拓展文件大小

❀1. 案例:写文件并把写入内容打屏

我们可以通过上一节所讲的read()和write()函数来实现向一个文件中写入内容并把写入内容打印到屏幕的功能。

/************************************************************ >File Name : readandprint.c >Author : QQ >Company : QQ >Create Time: 2022年05月13日 星期五 12时11分44秒 ************************************************************/ #include #include #include #include #include #include #include #define BUF_MAX 512 /*buf缓冲区最大值*/ /*向中文件写入数据并把写入内容打印到标准输出*/ int main(int argc, char* argv[]) { if(argc write(STDOUT_FILENO, buf, read_size); /*STDIN_FILENO STDERR_FILENO*/ } close(fd); return 0; }

我们知道,在C语言中,字符串都是以 ‘\0’ 结尾的,比如 “hello linux…” 加上结束符共15字节。

write(fd, "hello linux...", 15);

我们来测试下程序,首先明确一点,字符串会写入相应文件,但是不会打印在屏幕中,这个后面分析。这里先看一下结束符 ‘\0’ 是如何显示的。 可以看到,确实不会打屏,且文件内容已写入。我们通过vim编辑器打开1.txt文件。 在这里插入图片描述 可以看到一个 ‘^@’ 字符,这个就是我们多写入的 ‘\0’ 字符,如果我们把写入字节数15改为14,就没有这个字符了。

❀2. lseek移动文件读写位置 包含头文件 #include #include 函数原型 off_t lseek(int fd, off_t offset, int whence);

函数功能

reposition read/write file offset.

函数参数

fd:文件描述符offset:偏移量whence:位置 SEEK_SET:The offset is set to offset bytes. offset为0时表示文件开始位置。SEEK_CUR:The offset is set to its current location plus offset bytes. offset为0时表示当前位置。SEEK_END:The offset is set to the size of the file plus offset bytes. offset为0时表示结尾位置

函数返回值

成功返回当前位置到开始的长度失败返回-1并设置errno

下面我们通过上面的案例来分析lseek函数的用法,上面案例测试中说到,字符串已经写入了相应文件,但是并没有打印在屏幕中。这是因为,我们用write()函数写入文件之后,这时候读写位置就指在写完后的那个位置,也就是字符串的后面,这样我们在使用read()函数去读的时候就相当于从写入字符串的后面去读的,所以啥也没读到。这时候,就可以使用lseek()函数来移动读写位置,我们只需在上面代码中加一句话即可。

#include #include #include #include #include #include #include #define BUF_MAX 512 /*buf缓冲区最大值*/ /*向中文件写入数据并把写入内容打印到标准输出*/ int main(int argc, char* argv[]) { if(argc write(STDOUT_FILENO, buf, read_size); /*STDIN_FILENO STDERR_FILENO*/ } close(fd); return 0; }

再测试一下,就发现可以正常打屏了。 在这里插入图片描述

❀3. lseek计算文件大小

利用lseek()函数执行成功时的返回值可以来计算一个文件所占字节的大小。

/************************************************************ >File Name : getsize.c >Author : QQ >Company : QQ >Create Time: 2022年05月13日 星期五 18时47分04秒 ************************************************************/ #include #include #include #include #include #include int main(int argc, char* argv[]) { if(argc if(argc if(argc


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3