read系统调用

  • 头文件 #include <unistd.h>
  • 函数使用 ssize_t read(int fd, void *buf, size_t count)
    read 函数会从文件描述符fd中读取指定的count长度的内容,并且将读到的结果放入到buf缓冲区中
  • 返回值
    count 读取成功,则会返回读到的字节数
    小于count 表示同样读取成功,只是fd从current offset中并未读到count的字节数
    0 表示读到了文件的末尾
    -1 表示读取失败,可能fd已经关闭,可能读到了一个管道,或者read被内核信号中断

注意:
read操作会从当前文件的文件偏移处进行读取,同时 文件偏移会随着读到的长度进行移动。如果当前文件的偏移地址是在上一个文件的结束,那就无法读到fd中的内容。所以这里如果想要读取文件中的内容,在使用read系统调用之前需要重新设置偏移地址lseek

其他详细描述可以参考man 2 read

write系统调用

  • 头文件 #include <unistd.h>
  • 函数使用 ssize_t write(int fd, const void *buf, size_t count)
    write函数会向文件描述符fd中写入count bytes的内容,内容的来源是buf
  • 返回值
    count 写入的数据大小 bytes
    0 没有写入任何东西
    -1 表示写入失败

read一样,write也是基于当前文件的偏移地址开始写入,同时文件的偏移随着写入的数据进行移动
其他详细描述可以参考man 2 write

lseek系统调用

  • 头文件
    #include <unistd.h>
    #include <sys/types.h>

  • 函数使用 off_t lseek(int fd, off_t offset, int whence)
    lseek函数会将文件描述符fd所代表的当前文件偏移地址移动指定的偏移量offset,移动方式是通过whence
    其中whence有如下几种:
    a. SEEK_SET 如果offset为0,则读写位置移动到开头。如果不为0,则读写位置在当前位置基础上向前移动offset个字节
    b. SEEK_CUR将读写位置移动到当前位置后再增加offset个字节
    c. SEEK_END 将读写位置移动到文件结尾后再增加offset个字节

  • 返回值
    offset 成功则返回该值。该offset并非参数传入的offset,而是移动偏移量之后 当前偏移量相对于文件开头的偏移量值
    -1 移动偏移量失败

代码案例


#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <string.h>int main()
{int fd;char buf[100];memset(buf,0,sizeof(buf));fd = open("write.test",O_RDWR|O_APPEND); //追加可 读写方式打开了一个文件size_t x = write(fd,"my name is hello \n",20)  //写入20个字符串printf("you have writed %d words to the buffer and off is %d\n",x,fd);//close(fd); //此时close,则后续的lseek都返回 -1//如果此时不进行lseek,则后续read读出的buf是空的。lseek此时使用`SEEK_SET`的`whence`,即跳到文件开头进行偏移off_t k = lseek(fd,10,SEEK_SET); printf("The file offset is %d\n",k);size_t t = read(fd,buf,20);printf("you have read %d words and %s content\n",t,buf);close(fd);return 0;
}

输出如下:

[root@localhost ~]# ./a.out
you have writed 20 words to the buffer and off is 3
The file offset is 10 //向前移动10个字符,最后读出的内容是 “hello \n”
you have read 10 words and  hello content
[root@localhost ~]# cat write.test
my name is hello

linux 系统调用 read,write和lseek 使用相关推荐

  1. Linux系统调用之lseek函数

    前言 如果,想要深入的学习Linux系统调用函数lseek了话,还是需要去阅读Linux系统中的帮助文档的. 具体输入命令: man 2 lseek 即可查阅到完整的资料信息. lseek函数 lse ...

  2. 什么是Linux系统调用system call?(Linux内核中设置的一组用于实现各种系统功能的子程序)(区别于标准C库函数调用)核心态和用户态的概念、中断的概念、系统调用号、系统调用表

    文章目录 什么是系统调用? 为什么要用系统调用? 系统调用是怎么工作的? 如何使用系统调用? _syscall*()是什么? errno是什么? 调用性能问题 Linux系统调用列表 进程控制 文件系 ...

  3. Linux系统调用相关概念

    目录: 1. Linux系统调用原理 2. 系统调用的实现 3. Linux系统调用分类及列表 4.系统调用.用户编程接口(API).系统命令和内核函数的关系 5. Linux系统调用实例 6. Li ...

  4. linux close 头文件,Linux open close read write lseek函数的使用

    我们经常需要在Linux中进行文件操作,今天我就来分享下文件操作用到的一些函数 1 open 所需头文件: 函数原型:int open(const char *pathname,flags,int p ...

  5. Linux系统调用表:x86和x86_64

    <Linux系统调用表> <linux系统调用表(system call table)> <线上环境 Linux 系统调用追踪> <Linux系统调用权威指南 ...

  6. Linux系统调用表(system call table)

    <Linux系统调用表> <linux系统调用表(system call table)> <线上环境 Linux 系统调用追踪> <Linux系统调用权威指南 ...

  7. [Linux]Linux系统调用列表

    本文列出了大部分常见的Linux系统调用,并附有简要中文说明. 以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数.这可能是你在互联网上所能看到的唯一一篇中文注释的 ...

  8. Linux系统调用详解(实现机制分析)--linux内核剖析(六)

    本文介绍了系统调用的一些实现细节.首先分析了系统调用的意义,它们与库函数和应用程序接口(API)有怎样的关系.然后,我们考察了Linux内核如何实现系统调用,以及执行系统调用的连锁反应:陷入内核,传递 ...

  9. Linux 系统调用的本质

    简单概念 fd #include <unistd.h> #include <string.h>int main(int argc,char* argv[]) {char buf ...

最新文章

  1. 人脸对齐--Dense Face Alignment
  2. 图神经网络GNN预训练技术进展概述
  3. 编译与部署dubbo管控平台dubbo-admin
  4. LVS+Keepalived-DR模式负载均衡高可用集群
  5. 求最大元最小元极大元极小元_极大元、最大元.ppt
  6. oracle删错表了怎么办,Oracle中表被删除或数据被错误修改后的恢复方法
  7. 成都两年JAVA工程师_成都Java工程师学习路线
  8. mysql导出表结构_mysql导入导出表结构及表数据及执行sql文件
  9. 如何看别人网络下计算机,如何查看电脑是否被他人偷偷使用过网络技巧 -电脑资料...
  10. 汽车维护管理软件开源_感谢开源和自由软件维护者的10种方法
  11. linux openssh升级7.4,RHEL Centos上升级OpenSSH7.4p1
  12. 反序列化对象列表发生异常_面试官:你知道Java对象的序列化与反序列化背后的原理吗?...
  13. 如何应用Matlab plot画点
  14. oracle扩容临时表空间,oracle临时表空间扩容
  15. Anaconda Clean命令
  16. 蓝牙sbc怎么解决_蓝牙耳机不会挑?蓝牙编解码器了解一下
  17. 快速故障定位 看联想和Riverbed如何演绎?
  18. SpringBoot项目运行时出现A cookie header was received警告问题
  19. 稳踞三大价值高地!昆仑万维角逐AIGC“新大陆”
  20. 深度学习在语音分离的应用

热门文章

  1. senfile函数实例的运行过程截图
  2. 一步一步Asp.Net MVC系列_权限管理总结(附MVC权限管理系统源码)
  3. 从瀑布模型、极限编程到敏捷开发
  4. 挨踢人生路--记我的10年18家工作经历 - 后记
  5. ubuntu中常用指令
  6. np.dot()运算准则
  7. 一维卷积filter_从零开始学Pytorch(七)之卷积神经网络
  8. android java 中文乱码_android读写中文如何避免乱码详解
  9. java script 6 折线_Java入门第六篇:Java script(js)的事件
  10. barmanager 不显示_广州13.3寸广告液晶显示屏品牌排行榜