read 函数

  -#include <unistd.h>-ssize_t read(int fd, void *buf, size_t count);

从fd 所指的文件中读取count 个字节到buf 中。返回实际读取到的字节数,有错误发生则返回-1。读取文件时,文件读写指针会会随着读取到的字节数移动。

write 函数

 - #include <unistd.h>- ssize_t write(int fd, const void *buf, size_t count);

把buf中的count个字节写入fd 所指的文件中, 返回实际写入的字节数,有错误发生则返回-1。写入文件时,文件读写指针会随着写入的字节数移动。

lseek 函数:控制文件指针的位置

-#include <sys/types.h>-#include <unistd.h>-off_t lseek(int fd, off_t offset, int whence);

offset 根据whence 来移动文件指针的位移数

whence 取值 :

取值 含义
SEEK_SET 从文件开始处向后移动 offset
SEEK_CUR 从文件指针当前位置处向后移动 offset,负数时向前移动offset
SEEK_END 从文件结尾处向后移动 offset,负数时向前移动offset

成功返回当前的读写位置,也就是距离文件开始处多少个字节,错误返回-1

常用操作:

用法 含义
lseek( int fd , 0,SEEK_SET) 移动到文件开头
lseek(int fd, 0, SEEK_END) 移动到文件结尾i
lseek(int fd, 0, SEEK_CUR) 获取当前位置(相对于文件开头的偏移量)

实例:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<errno.h>
void my_err(const char *err_string ,int line )
{fprintf(stderr,"line:%d " ,line) ; //fprintf()函数根据指定的格式(format)向输出流(stream)写入数据,把后面的写到前面perror(err_string) ;//先输出err_string ,再输出错误原因exit(1) ;
}
int  my_read(int fd) //读数据函数
{int len ;int ret ;int i ;char read_buf[64] ;if((lseek( fd , 0 ,SEEK_END))== -1) //移动文件指针到结尾my_err("lseek",__LINE__) ; //__LINE__  预编译器内置宏,表示行数if((len=lseek(fd,0,SEEK_CUR)) ==  -1 ) //求相对于文件开头的偏移量,用于表明文件开始处到文件当前位置的字节数 lenmy_err("lseek",__LINE__) ; if((lseek(fd,0,SEEK_SET)) ==  -1 ) //移动文件指针到开头 my_err("lseek",__LINE__) ; printf(" 字节数是 : %d \n",len) ;if((ret = read(fd,read_buf,len)) < 0) //成功时返回实际读到的字节数,失败返回 -1my_err("read",__LINE__ ) ;for(i= 0 ;i< len ;i++)printf("%c",read_buf[i]) ;printf("\n") ;return  ret ;
}
int main(void)
{int fd ;char write_buf[32]="Hello Word !!" ;if((fd =open("example_63.c",O_RDWR | O_CREAT |O_TRUNC ,S_IRWXU))== -1) //O_RDWR 可读写 O_CREAT 创建 O_TRUNC 文件清空my_err("open",__LINE__) ;else{printf("Creat file success !!\n") ;}if(write(fd,write_buf,strlen(write_buf)) != strlen(write_buf) ) //写入文件,write 的返回值是实际写入的字节数my_err("write",__LINE__) ;my_read(fd) ;    //读出数据printf("/*--------------------------------------------*/\n") ;if(lseek(fd,10,SEEK_END)== -1) //从文件结尾处向后移动10位my_err("lseek",__LINE__) ; //_LINE_  预编译器内置宏,表示行数if(write(fd,write_buf,strlen(write_buf)) != strlen(write_buf) ) //写入文件,write 的返回值是实际写入的字节数my_err("write",__LINE__) ;my_read(fd) ;close(fd) ; //关闭文件return  0;
}

lseek 允许文件指针移到EOF之后,会以\0 填充,但不会改变文件大小。

预编译器内置宏有:

   __LINE__    行数__TIME__    时间__FUNCTION__   函数__FINE__     文件名

下一篇介绍关于文件锁的那些事.

转载于:https://www.cnblogs.com/Tattoo-Welkin/p/10335344.html

文件读写和文件指针的移动相关推荐

  1. java文件读写long_Java文件的简单读写、随机读写、NIO读写与使用MappedByteBuffer读写...

    文件与目录的创建和删除较为简单,因此忽略这部分内容的介绍,我们重点学习文件的读写.本篇内容包括: 简单文件读写 随机访问文件读写 NIO文件读写-FileChannel 使用MappedByteBuf ...

  2. Python基础day07 作业解析【文件操作(文件读写、文件夹操作)】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day07[文件读写.文件夹操作.面向对象(类.对象)] 目录 加强训练 题目1 ...

  3. Python基础day07【文件读写、文件夹操作、面向对象(类、对象)】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员]   目录 01.复习 1.1.递归函数参数问题 1.2.格式化输出位数 1.3.extend函数解 ...

  4. 文件操作ofstream,open,close,ifstream,fin,按照行来读取数据, fstream,iosin iosout,fio.seekg(),文件写入和文件读写,文件拷贝和文件

     1.ofstream,open,close 写入文件 #include<iostream> #include<fstream> using namespace std; ...

  5. C文件操作、读写文件 C++文件读写、文件操作

    转自  飘羽随风 基于C的文件操作  在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之. 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FI ...

  6. Python 文件读写、文件内移动

    目录 打开/建立文件 读取文件 写入文件 小结 References 我们平时在做数据处理时,常常只需通过类似 pandas.read_csv 这样的高层命令就可以方便地把磁盘中的文件读取为 Pyth ...

  7. python第二十九课——文件读写(复制文件)

    自定义函数:实现文件复制操作有形参(2个) 没有返回值相似版(不用) def copyFile(src,dest):#1.打开两个文件:1个关联读操作,1个关联写操作fr=open(src,'rb') ...

  8. c++ 文件读写_Java文件读写的常用技术

    Java文件读写的常用技术--项目开发实战篇 一. 概述: 本文主要以Office办公软件和PDF文件的读写为主线逐步展开说明,分析将相关格式的文件内容文本化的过程.另外针对于Excel文件内容的结构 ...

  9. java opencsv_用opencsv文件读写CSV文件

    首先明白csv文件长啥样儿: 用excel打开就变成表格了,看不到细节 推荐用其它简单粗暴一点儿的编辑器,比如Notepad++, csv文件内容如下: csv文件默认用逗号分隔各列. 有了基础的了解 ...

最新文章

  1. Molecule – 帮助你构建跨平台的 HTML5 游戏
  2. 如何下载和离线安装Chrome的CRX扩展文件包
  3. 005_JavaScript使用
  4. linux编译运行build.sh,linux下libwebsockets编译及实例
  5. 联想终成全球PC第一
  6. 多电压等级计算机潮流计算,电力系统潮流计算
  7. 极坐标格式下的二维傅里叶变换与逆变换推导
  8. 制作属于你的终端词典
  9. 2021-10-06 BGP错误配置导致脸书网络瘫痪
  10. 简单的创建一个小型服务器
  11. 艾司博讯:拼多多批量发货怎么做?
  12. Task02 python与excel
  13. linux之shell语言
  14. 在Matlab R2019版本上分析simulink模型的BODE图、阶跃响应、单位脉冲响应
  15. 【专业数据】二.2020~2022年北京交通大学【信息与通信工程】专业复试线/分数线差/计划招生数/复试数/录取数/复试比例/录取率
  16. 一个离职员工对中兴的回望
  17. pca图解读_利用R绘制PCA分析图(2)
  18. 网易云音乐ios停更_20(更多)网站下载免费的创用CC音乐
  19. C5t:函数求长方形的周长和面积
  20. 【C++ 程序】 2048游戏

热门文章

  1. k8s的storageclass
  2. 如何坚持每天的英语学习
  3. vue AntD中栅格布局的四种大小xs,sm,md,lg
  4. linux修改ip以及路由
  5. codemirror6 版本不包含 mode,addon 等目录
  6. 【等你来战】京东金融-中信证券杯量化策略大赛第6期!
  7. [财务][数据化分析][帆软]报表设计-第一张报表
  8. leetcode70 爬楼梯
  9. 10. python入门速通教程之类、继承类、类中的特殊方法
  10. iphone通讯录恢复