Linux系统调用四、lseek()函数详解 |
您所在的位置:网站首页 › 系统调用的函数 › Linux系统调用四、lseek()函数详解 |
🚀文章目录
❀1. 案例:写文件并把写入内容打屏❀2. lseek移动文件读写位置❀3. lseek计算文件大小❀4. lseek拓展文件大小
我们可以通过上一节所讲的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’ 是如何显示的。 函数功能 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; }再测试一下,就发现可以正常打屏了。 利用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 |