使用Linux的文件API,经常看见一个东西,叫做文件描述符.

什么是文件描述符?

(1)文件描述符其实实质是一个数字,这个数字在一个进程中表示一个特定的含义,当我们open打开一个文件时,操作系统在内存中构建了一些数据结构来表示这个动态文件,然后返回给应用程序一个数字作为文件描述符,这个数字就和我们内存中维护这个动态文件的这些数据结构挂钩绑定上了,以后我们应用程序如果要操作这一个动态文件,只需要用这个文件描述符进行区分。

(2)文件描述符就是用来区分一个程序打开的多个文件的。

(3)文件描述符的作用域就是当前进程,出了当前进程这个文件描述符就没有意义了

(4)文件描述符fd的合法范围是0或者一个正数,不可能是一个负数

(5)open返回的fd必须记录好,以后向这个文件的所有操作都要靠这个fd去对应这个文件,最后关闭文件时也需要fd去指定关闭这个文件。如果在我们关闭文件前fd丢了,那么这个文件就没法关闭了也没法读写了

1)打开与读取文件

1 #include

2 #include

3 #include

4 #include

5 #include

6

7 int main(int argc, char const *argv[]) {8

9 int fd = -1; //文件描述符10

11 //打开文件

12 fd = open( "ghostwu.txt", O_RDWR );13

14 if ( -1 ==fd ) {15 printf("文件打开失败\n");16 }else{17 printf("文件打开成功,fd=%d\n", fd );18 }19

20 //读取文件

21 int count = 0;22 char buf[20];23 count = read( fd, buf, 50);24 if ( -1 ==count ) {25 printf("文件读取失败\n");26 }else{27 printf("文件读取成功,实际读取的字节数目为:%d\n内容为%s\n", count, buf );28 }29

30 //关闭文件

31 close( fd );32

33 return 0;34 }

需要在当前目录下存在ghostwu.txt这个文件,否则打开的时候失败,这里涉及2个api

int open(const char *pathname, int flags);

open非常简单,第一个参数就是文件路径, 第二个是文件模式,在man手册中还提供了其他几种方式。

ssize_t read(int fd, void *buf, size_t count);

第一个参数为文件描述符,就是open返回的那个值

第二个参数buf用来存储从文件中读取的内容

第三个参数,表示希望从文件中读取的内容( 注:这个count数字可以随便给,最终以返回的实际数目(read的返回值)为准

2)打开与写入文件

1 #include

2 #include

3 #include

4 #include

5 #include

6 #include

7

8 int main(int argc, char const *argv[]) {9

10 int fd = -1; //文件描述符11

12 //打开文件

13 fd = open( "ghostwu.txt", O_RDWR );14

15 if ( -1 ==fd ) {16 printf("文件打开失败\n");17 }else{18 printf("文件打开成功,fd=%d\n", fd );19 }20

21 //写文件

22 char buf[] = "I love Linux, Linux is very very good!!!";23 int count = 0;24 count =write( fd, buf, strlen( buf ) );25 if ( -1 ==count ) {26 printf("文件写入失败\n");27 }else{28 printf("文件写入成功,实际写入的字节数目为:%d\n", count);29 }30

31 //关闭文件

32 close( fd );33

34 return 0;35 }

ssize_t write(int fd, const void *buf, size_t count);

第一个参数为文件描述符,就是open返回的那个值

第二个参数buf用来存储写入的内容

第三个参数,表示希望写入的文件大小

linux系统简单操作代码,Linux系统编程:简单文件IO操作(示例代码)相关推荐

  1. python io操作有什么_Python笔记:文件IO操作

    读取文件 使用open()打开文件,文件不存在会抛出IOError错误. try: f = open('/path/to/file', 'r') print(f.read()) finally: if ...

  2. 【Linux系统编程】文件IO操作

    文件描述符 在 Linux 的世界里,一切设备皆文件.我们可以系统调用中 I/O 的函数(I:input,输入:O:output,输出),对文件进行相应的操作( open().close().writ ...

  3. Linux系统编程【文件IO、进程、进程间通信、信号、线程、互斥】

    linux系统编程 个人通过学习,手打了一份48000字的Linux系统编程的笔记,包含了[文件IO.进程.进程间通信.信号.多线程.互斥]等知识点,并给出了大量的代码案例对每个重要的知识点进行了代码 ...

  4. Linux系统编程之文件IO

    Linux系统编程之文件IO 文件IO第一天 一.标准IO基本概念 1.1c语言函数 (c库函数) 调用实现某一个功能,(API) 1.2系统调用:内核中的程序接口,应用程序和硬件设备之间的中间层 1 ...

  5. linux的文件io操作(转)

    linux文件IO操作有两套大类的操作方式:不带缓存的文件IO操作,带缓存的文件IO操作.不带缓存的属于直接调用系统调用(system call)的方式,高效完成文件输入输出.它以文件标识符(整型)作 ...

  6. Linux基础(6)--文件IO操作

    文件IO操作 1. open打开操作 2. close关闭操作 3. creat创建操作 4. write写操作 5. read读操作 Linux下一切皆文件,所以文件IO是很重要的也是很基础的操作. ...

  7. 基于QT的【第一个项目】设计+所有组件配合使用+网络编程局域网通信+文件IO操作+登录界面和头像+多界面跳转+JSON数据解析+表情包制作

    基于QT的第一个项目+所有组件配合使用+网络编程局域网通信+文件IO操作+登录界面和头像+多界面跳转+JSON数据解析+表情包制作 第一阶段 网络编程局域网TCP/IP聊天QT实现 main.c ma ...

  8. 文件IOday02--------时间编程与文件IO

    目录 一,时间编程 1,概念:  2,在程序开发费时,可以获取标准时间(以秒为单位) 将标准时间转换为字符串格式的时间的函数 char *ctime(time_t*timep) 将标准时间转换为本地时 ...

  9. Python 文件 IO 操作详解

    Python 文件 IO 操作详解 1.文件 IO 常用操作 2.文件打开操作 2.1 打开命令 2.2 命令参数 2.2.1 路径 2.2.2 mode 2.2.3 buffering 缓冲区 2. ...

  10. C++之文件IO操作流

    C++之文件IO操作流 前两节介绍了C++的IO流类库,标准设备IO操作流中部分预定义流对象的成员函数以及IO格式控制.那今天我将继续介绍关于C++中的流操作内容--文件IO操作流fstream.并会 ...

最新文章

  1. 云栖社区 正文 永久免费SSL安全证书Letsencrypt安装使用方法
  2. Json字符串转二维数组
  3. leetcode874
  4. windows和linux-JDK环境变量设置
  5. 牛客题霸 NC2 重排链表
  6. php7.3安装yaf扩展
  7. Linux Redhat5.7系统配置网易的yum源
  8. 菜单自定义图标_操作系统任务栏了解多少,Windows server 2008 R2自定义通知区域...
  9. 在Exchange 2010中批量导入用户
  10. Liunx 中tr的用法
  11. 11月14号站立会议(从即日14号起到24号截至为final阶段工作期)
  12. ICCV 2019 | 清华等联合提出高精度、高效率点云3D重建网络框架PointMVSNet
  13. 3-8《Ruby元编程》第二章对象模型
  14. 【静默】Oracle各类响应文件何在?
  15. vista 改xp BIOS设置(ASUS,dell,hp,Acer,Lenovo)
  16. 【剑指offer】面试题17、合并两个排序的链表
  17. python获取虎牙弹幕_python实现虎牙直播弹幕
  18. 2018蓝桥模拟赛 天上的星星
  19. 使用html5 canvas绘制简单图形小作品~灰太狼
  20. Linux内核原理之通用块设备层

热门文章

  1. 转图片_图片怎么转PDF?图片转PDF就用这些方法吧!
  2. win7更新错误0x800b0109_win10 5月版严重翻车,更新频出10多个bug,看完你还敢升级吗?...
  3. 你不知道的事---SringCloud的feign的继承特性
  4. SpringBoot+Mybatis 实现动态数据源切换方案
  5. Linux下的USB总线驱动 1
  6. keil5函数 默认返回值_C++的返回值return
  7. 查找字符位置_查找某个字符最后一次出现的位置
  8. 在dw中如何调试html代码,如何在 Dreamweaver 中优化和调试代码 - Dreamweaver 用户指南...
  9. linux下查看BLAST程序,Linux下BLAST的使用---转载
  10. java组长一个月工资多少,保准看明白!