author:zengzhi

1、write 函数
write(int fd, void *buf, size_t count ):
第一个参数:向哪一个文件中去写,用的是设备号;第二个参数:向这个文件中写什么内容,数组名就是一个首地址;第三个参数:向这个文件中写多少个。函数的返回值:是实际写的字节数。

//author:zengzhi
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>int main(int argc,char *argv[])
{int fd;int wr_ret;char buf[]="hello linux";fd=open("./a.c",O_TRUNC|O_RDWR);if(fd<0){printf("open a.c file fail\n");return -1;}printf("open a.c file suceess,fd=%d\n",fd);wr_ret=write(fd,buf,sizeof(buf));printf("wr_ret=%d\n",wr_ret);close(fd);return 0;} 

运行的结果:
wr_ret=12是因为字符串尾部还有一个结束符。

2、read()
read(int fd, void *buf, size_t count)
第一个参数:从哪一个文件中去读, 用的是设备号;第二个参数:读到什么地方去;第三个参数:读多少个。函数的返回值:是实际读的字节数。
返回值:是实际读的字节数.

//author:zengzhi
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>int main(int argc,char *argv[])
{int fd;int wr_ret,rd_ret;char write_buf[]="hello linux";char read_buf[128]={0};fd=open("./a.c",O_TRUNC|O_RDWR);if(fd<0){printf("open a.c file fail\n");return -1;}printf("open a.c file suceess,fd=%d\n",fd);wr_ret=write(fd,write_buf,sizeof(write_buf));//start readrd_ret=read(fd,read_buf,128);printf("wr_ret=%d\n",wr_ret);printf("recv_data:read_buf=%s\n",read_buf);close(fd);return 0;} 

实际的运行结果:
为什么会没读到?这是因为在写的时候,写位置指针指向的是写完数据的最后一个区域。开始读的时候,会接着写位置指针往下读,此时往下没有数据,因此读不到。所以需要调整文件指针的位置。需要用到lseek 函数。

3、lseek()函数
lseek(int fd, off_t offset, int whence),该函数的头文件:sys/types.h unistd.h;
功能:调整读写的位置指针;
第一个参数:要调整的文件的文件描述符;
第二个参数:偏移量,每一读写操作所需要移动的距离,单位是字节的数量,可正可负(向后移,向前移);
第三个参数:当前位置的基点,有三个标志,
SEEK_SET:当前位置为文件的开头,新位置为偏移量的大小;
SEEK_CUR:当前位置为文件指针的位置,新位置为当前位置加上偏移量。
SEEK_END:当前位置为文件的结尾,新位置为文件的大小加上偏移量的大小。函
数的

返回值:成功:文件当前的位置,出错:-1。

//author:zengzhi
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>int main(int argc,char *argv[])
{int fd;int wr_ret,rd_ret;char write_buf[]="hello linux";char read_buf[128]={0};fd=open("./a.c",O_TRUNC|O_RDWR);if(fd<0){printf("open a.c file fail\n");return -1;}printf("open a.c file suceess,fd=%d\n",fd);wr_ret=write(fd,write_buf,sizeof(write_buf));//start readlseek(fd,0,SEEK_SET);rd_ret=read(fd,read_buf,128);printf("wr_ret=%d\n",wr_ret);printf("recv_data:read_buf=%s\n",read_buf);close(fd);return 0;} 

调整偏移位置:

//author:zengzhi
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>int main(int argc,char *argv[])
{int fd;int wr_ret,rd_ret;char write_buf[]="hello linux";char read_buf[128]={0};fd=open("./a.c",O_TRUNC|O_RDWR);if(fd<0){printf("open a.c file fail\n");return -1;}printf("open a.c file suceess,fd=%d\n",fd);wr_ret=write(fd,write_buf,sizeof(write_buf));//start readlseek(fd,2,SEEK_SET);rd_ret=read(fd,read_buf,128);printf("wr_ret=%d\n",wr_ret);printf("recv_data:read_buf=%s\n",read_buf);close(fd);return 0;} 

//author:zengzhi
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>int main(int argc,char *argv[])
{int fd;int wr_ret,rd_ret;char write_buf[]="hello linux";char read_buf[128]={0};fd=open("./a.c",O_TRUNC|O_RDWR);if(fd<0){printf("open a.c file fail\n");return -1;}printf("open a.c file suceess,fd=%d\n",fd);wr_ret=write(fd,write_buf,sizeof(write_buf));//start readlseek(fd,-3,SEEK_CUR);rd_ret=read(fd,read_buf,128);printf("wr_ret=%d\n",wr_ret);printf("recv_data:read_buf=%s\n",read_buf);close(fd);return 0;} 

运行结果:尾部有一个结束符。

Linux 系统编程 --文件IO-write()、read()、lseek()函数相关推荐

  1. Linux系统编程-文件的操作

    Linux系统编程-文件操作 前言: Linux 中所有内容都是以文件的形式保存和管理的,即一切皆文件,普通文件是文件,硬件设备(键盘.监视器.硬盘.打印机)是文件,就连套接字(socket).网络通 ...

  2. 外网访问arm嵌入式linux_嵌入式Linux系统编程——文件读写访问、属性、描述符、API

    Linux 的文件模型是从 Unix 的继承而来,所以 Linux 继承了 UNIX 本身的大部分特性,然后加以扩展,本章从 UNIX 系统接口来描述 Linux 系统结构的特性. 操作系统是通过一系 ...

  3. 4. linux调用文件计算阶乘前5项和_嵌入式Linux系统编程——文件读写访问、属性、描述符、API

    Linux 的文件模型是从 Unix 的继承而来,所以 Linux 继承了 UNIX 本身的大部分特性,然后加以扩展,本章从 UNIX 系统接口来描述 Linux 系统结构的特性. 操作系统是通过一系 ...

  4. linux系统编程——文件编程

    linux系统编程--文件编程 文章目录 linux系统编程--文件编程 一.如何创建.修改一个文件 二.linux系统调用的API 三.文件描述符 四.linux系统调用 1.创建文件-creat ...

  5. linux原子过程,linux系统编程:IO读写过程的原子性操作实验

    所谓原子性操作指的是:内核保证某系统调用中的所有步骤(操作)作为独立操作而一次性加以执行,其间不会被其他进程或线程所中断. 举个通俗点的例子:你和女朋友OOXX的时候,突然来了个电话,势必会打断你们高 ...

  6. linux 文件操作 编程,Linux系统编程------------文件操作(基础)

    一.文件操作 1.1 Linux文件系统结构 1.1.1  Linux常见系统目录 /bin  :  存放普通系统可执行的命令(ls wc等) /sbin  :  存放系统管理程序(fsck等) /b ...

  7. linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...

    信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...

  8. 嵌入式Linux应用开发 1.系统编程 文件IO:open close write read lseek 通过文件io实现cp命令

    跟着b站边学边记,加上自己的理解和代码的测试,也算是给自己做个笔记. 1.使用linuxIO和我们直接写程序的区别 我们平常直接写程序,属于在应用层写程序,通过我们的printf传入内核(在这里pri ...

  9. Linux系统编程@文件操作(一)

    只总结了部分常用的内容,详细内容参考<UNIX环境高级编程>及相关书籍. Linux中文件编程可以使用两种方法 Linux系统调用(依赖于系统) C语言库函数(不依赖于系统) Linux系 ...

  10. 【Linux系统编程】IO标准缓冲区

    00. 目录 文章目录 00. 目录 01. 缓冲区概述 02. 全缓冲 03. 行缓冲 04. 不带缓冲区 05. 附录 01. 缓冲区概述 标准I/O提供了三种类型的缓冲: 1.全缓冲: 在填满标 ...

最新文章

  1. 寻找两个字符串相似度的代码
  2. Word编写代码时输出半角引号
  3. SQL 2008 外网访问说明
  4. 我的世界1.11服务器咋发信息,我的世界进服务器怎么注册怎么发信息
  5. matlab——FFT傅里叶快速变换
  6. c语言 case语句用法,switch ... case语句的用法[组图]
  7. 用BlockingExecutor限制任务提交
  8. leetcode 57. 插入区间
  9. 关于使用ModelSim中编写testbench模板问题
  10. 腾讯“狠心”出手了,这款游戏,未成年人每天限玩1.5小时
  11. scala List
  12. Ubuntu“无法解析或打开软件包的列表或是状态文件”的解决办法。
  13. 谁在指使这家印度 IT 公司攻击全球政治家、投资者和记者?
  14. hp打印机驱动android,惠普打印机驱动
  15. LayuiAdmin+TP5.1 数据表格添加数据详解
  16. java 姓名生成器_java自动机器人自动生成修姓名工具类
  17. CSRF与钓鱼链接攻击
  18. java美团购物车,仿美团详情页与购物车源码-订单页
  19. 花样16流水灯c语言程序,8个花样流水灯c程序
  20. 惠州学院计算机学院院长,惠州学院计算机科学与工程学院院领导一行来我院参观交流...

热门文章

  1. GI 中新的基础架构 --MDNS, gipc 和 gpnp 是如何协同工作的
  2. JS数据结构与算法学习笔记大全 (温故而知新,可以为师矣。)
  3. zblog php robots,怎么写ZBlogPHP网站的robots.txt
  4. Markdown学习
  5. destoon使用教程之经典调用方法汇总
  6. [CUDA报错] CUDA error: device-side assert triggered
  7. matlab绘制香农定理曲线,基于matla对香农公式仿真.doc
  8. Godaddy Web Hosting http 重定向至 https协议
  9. 桌面图标快捷方式小箭头_如何在Windows 7、8和10中删除(或更改)快捷方式图标上的箭头...
  10. TF flags的简介