lseek()函数详解
今日命令:
df -k //查看磁盘的分区情况
andrew@andrew-Thurley:~/work/iotec$ df -k
文件系统 1K-块 已用 可用 已用% 挂载点
udev 2800604 0 2800604 0% /dev
tmpfs 566068 8376 557692 2% /run
/dev/sda1 479605520 22543516 432676368 5% /
tmpfs 2830324 41372 2788952 2% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 2830324 0 2830324 0% /sys/fs/cgroup
tmpfs 566068 68 566000 1% /run/user/1000
紧接着使用:sudo tune2fs -l /dev/sda1 命令查看洗盘下面的文件的具体划分
andrew@andrew-Thurley:~/work/iotec$ sudo tune2fs -l /dev/sda1
[sudo] andrew 的密码:
tune2fs 1.42.13 (17-May-2015)
Filesystem volume name: <none>
Last mounted on: /
Filesystem UUID: 7df6cde0-ecea-46a6-82e5-f477ec203ebe
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 30466048
Block count: 121846272
Reserved block count: 6092313
Free blocks: 114272179
Free inodes: 30176830
First block: 0
Block size: 4096 //说明一个磁盘块的大小是4096大小,使用IO读写一次大小是4096大小,所以 设置缓存的大小最好使用4096大小,用于存放文件,这样在频繁的使用读写文件的时候,能够将操作系统的性能发挥到最大化。
Fragment size: 4096
Reserved GDT blocks: 994
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Tue Aug 7 23:50:03 2018
Last mount time: Fri Aug 10 20:47:28 2018
Last write time: Fri Aug 10 20:47:24 2018
Mount count: 7
Maximum mount count: -1
Last checked: Tue Aug 7 23:50:03 2018
Check interval: 0 (<none>)
Lifetime writes: 34 GB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
First orphan inode: 11411639
Default directory hash: half_md4
Directory Hash Seed: 2707a476-4240-4ce1-99ef-36d47dd99c2a
Journal backup: inode blocks
od -c //按照二进制文件查看文件
andrew@andrew-Thurley:~/work/iotec$ od -c hole.txt
0000000 0 1 2 3 4 5 6 7 8 9 \0 \0 \0 \0 \0 \0
0000020 \0 \0 \0 \0 0 1 2 3 4 5 6 7 8 9
more hole.txt //按照字符查看文件 当碰到空洞文件的’\0’的时候会停止 ,因此对于空洞文件,hole.txt使用more将无法查看空洞后面的文件
andrew@andrew-Thurley:~/work/iotec$ od -c hole.txt
0000000 0 1 2 3 4 5 6 7 8 9 \0 \0 \0 \0 \0 \0
0000020 \0 \0 \0 \0 0 1 2 3 4 5 6 7 8 9
头文件:#include <sys/types.h> #include <unistd.h>
用 法: off_t lseek(int handle, off_t offset, int fromwhere);
EEK_SET 将读写位置指向文件头后再增加offset个位移量。
SEEK_CUR 以目前的读写位置往后增加offset个位移量。
SEEK_END 将读写位置指向文件尾后再增加offset个位移量。
当whence 值为SEEK_CUR 或SEEK_END时,参数offet允许负值的出现。
下列是较特别的使用方式:
1) 欲将读写位置移到文件开头时:
lseek(int fildes,0,SEEK_SET);
2) 欲将读写位置移到文件尾时:
lseek(int fildes,0,SEEK_END);
3) 想要取得目前文件位置时:
lseek(int fildes,0,SEEK_CUR);
返回值
当调用成功时则返回目前的读写位置,也就是距离文件开头多少个字节。若有错误则返回-1,errno 会存放错误代码。
可能设置erron的错误代码:
EBADF: fildes不是一个打开的文件描述符。
ESPIPE:文件描述符被分配到一个管道、套接字或FIFO。
EINVAL:whence取值不当。
例子:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
intmain(void)
{
int handle;
char msg[]="This is a test";
char ch;
/*create a file*/
handle=open("TEST.$$$",O_CREAT|O_RDWR,S_IREAD|S_IWRITE);
/*write some data to the file*/
write(handle,msg,strlen(msg));
/*seek to the begining of the file*/
lseek(handle,0,SEEK_SET);
/*reads chars from the file until we hit EOF*/
do
{
read(handle,&ch,1);
printf("%c",ch);
}while(!EOF);
close(handle);
return0;
}
代码例子2:
#define BUFFER_SIZE 1024
int main(int argc,char **argv)
{ int readfd, writefd; long filelen=0; int ret=1; char buffer[BUFFER_SIZE]; char *ptr; /*打开源文件*/ if((readfd=open("test.txt", O_RDONLY|O_CREAT)) == -1) { printf("Open Error\n"); exit(1); } /*创建目的文件*/ if((writefd=open("dest.txt", O_WRONLY|O_CREAT)) == -1) { printf("Open Error\n"); exit(1); } /*测得文件大小*/ filelen= lseek(readfd,0L,SEEK_END); lseek(readfd,0L,SEEK_SET); printf("read file size is %d\n",filelen); /*进行文件拷贝*/ while(ret) { ret= read(readfd, buffer, BUFFER_SIZE); if(ret==-1) { printf("read Error\n"); exit(1); } write(writefd, buffer, ret); filelen-=ret; bzero(buffer,BUFFER_SIZE); } close(readfd); close(writefd); exit(0);
}
lseek()函数详解相关推荐
- Linux系统调用四、lseek()函数详解
- C语言网络编程:accept函数详解
文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...
- 【FFmpeg】函数详解(三)
FFmpeg函数详解 14.av_write_frame 15.av_interleaved_write_frame 16.av_write_trailer 17.avio_close 18.av_i ...
- 【FFmpeg】函数详解(二)
FFmpeg函数详解 9.av_dump_format 10.avio_open 11.avformat_write_header 12.avcodec_send_frame 13.avcodec_r ...
- 【FFmpeg】函数详解(一)
FFmpeg函数详解 一.错误码相关 1.AVERROR 2.av_strerror 3.其他错误码解释 二.编解码 1.获取编解码器 2.申请.释放上下文环境 3.打开编码器avcodec_open ...
- 【ES6】Generator函数详解
[ES6]Generator函数详解 一.Generator函数简介 基本概念 函数写法 yield关键字介绍 二.next方法的参数 三.for...of循环 四.关于普通throw()与Gener ...
- mysql的聚合函数综合案例_MySQL常用聚合函数详解
一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...
- python平方数迭代器_对python中的高效迭代器函数详解
python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...
- python基础知识~ 函数详解2
python~函数详解2 1 生成器函数 定义 如果函数有yield这个关键字,就是生成器函数.生成器函数() 获取的是生成器,不执行函数 须知 yield和return一样,都可以返回数 ...
- scanf函数详解与缓冲区
1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数,遇到文件结束返回EOF,出错返回0. 函数功能: sca ...
最新文章
- python3调用OCR识别
- 30~60万|项目需求——胳膊与手指的动态识别技术
- oracle+数据到+mysql数据库乱码问题_Linux系统Oracle数据库乱码问题的解决方法
- frp 路由穿透(github开源穿透软件)
- php 递归格式化数组,利用php递归实现无限分类 格式化数组的详解
- 安卓案例:基于HttpURLConnection下载文本与图片
- Kafka 如何保证消息全局有序
- JavaScript通过style只能获取内联 状态的样式
- mysql如何只查询表中的前几条数据?多表查询前提了解
- AWS SageMaker 基于Random Cut Forest 的异常值检测 随机森林
- Java项目源码下载SSM网上水果生鲜超市商城|电商购物系统
- C# 之 观察者模式实例 -- 订牛奶
- java网络编程--TCP程序设计
- 怎么准备全国计算机二级(C语言)考试?
- 2023.02.09 草图大师厨房效果图1skp素材效果图
- GoogleCast 简介
- 国企的面试我们应该怎么准备?
- 宗地权属图生成的解决方案设计
- 贝叶斯例题(一)先验分布与后验分布
- Android学习之仿QQ侧滑功能的实现