文件IO(IO编程)
一、文件IO(IO编程)
系统IO:和系统有关的IO接口函数
标准IO: 标准库里面的IO接口函数 #include <stdio.h>
目录操作:操作目录相关的IO接口函数
LCD屏的操作:刷图
TS(touch screen)触摸屏的操作:点击、滑动
二、文件
1.一切皆文件(重点)
一切皆文件,对于linux来说,所有的硬件设备都是文件。比如说你要去操作一个LCD的
硬件屏幕,对于我们应用开发者来说,我们不需要去了解它的寄存器,我们只需要找到
LCd所对应的哪一个文件就可以操作LCD
2.linux系统是怎样去管理它的文件
每一种硬件都对应着一种文件类型,那这么多的硬件对应这各种各样的文件类型;在linux如何
对他们进行管理;所有的硬件文件类型都由VFS来管理;
说明:
有了VFS来同统一管理所有的硬件类型,就可以实现不同格式文件类型之间的内容的交互;
比如你把U盘里面的内容拷贝到电脑的硬盘里面,就是通过VFS来控制协调。
3.在linux中有哪些文件类型7种(重点)
'-':普通文件
'd' :目录文件
'l' :链接文件
'p':管道文件 (系统编程)
's':套接字文件 (网络编程)
'c':字符设备文件
'b':块设备文件
4.文件类型的其它分类
普通文件类型:txt记事本文件、jpg图片文件、tar.gz压缩文件等等
看不见的文件:proc目录下的系统文件,这里面的文件信息是系统文件信息,实时变化,没有权限去修改它
设备文件(硬件文件):这里面的每一个文件描述的都是一个硬件 /dev目录下
三、怎么样来操作文件
系统IO:open、close、read、write、lseek
标准IO:fopen、fclose、fread、fwrite、fseek
四、系统IO---man手册
1.使用man手册来学习系统IO函数
1 Executable programs or shell commands 用来查看普通命令
2 System calls (functions provided by the kernel) 系统调用接口(系统IO)
3 Library calls (functions within program libraries) 库调用接口(标准IO)
4 Special files (usually found in /dev)
5 File formats and conventions eg /etc/passwd
6 Games
7 Miscellaneous (including macro packages and conventions), e.g.
man(7), groff(7)
8 System administration commands (usually only for root)
9 Kernel routines [Non standard]
2.使用方法(3要素)
1)第一步找到它的头文件和函数原型
SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
2)第二步看DESCRIPTION描述的第一段话
DESCRIPTION
Given a pathname for a file, open() returns a file descriptor, a small,
(重点找下划线的单词--参数)
3)第三步查看它的返回值
RETURN VALUE
open(), openat(), and creat() return the new file descriptor, or -1 if
五、系统IO
1.open
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
参数:
pathname: 文件路径名 (字符指针=字符串)
flags:标志量
O_RDONLY, 只读
O_WRONLY, 只写
O_RDWR.可读可写
O_CREAT, If the file does not exist, it will be created如果没有自动创建
返回值:
成功:文件描述符
失败:-1
练习1:
使用open函数自动创建一个2.txt文件
2.文件描述符
练习2:
死循环open函数,打印出文件描述符fd的值,观察它的现象
while(1)
{
fd = open();
printf("fd=%d\n",fd);
}
现象:
1)缺了3个文件描述符的值 0 1 2
2)最大的文件描述符的值是1023
总结:
1)文件描述符的个数只有1024个
2)有3个文件描述符被系统占用 0 1 2
3)开发者创建的文件描述符的值是从3开始的
gec@ubuntu:/mnt/hgfs/GZ2264/6_文件IO/01/code$ vi /usr/include/unistd.h
212 /* Standard file descriptors. */
213 #define STDIN_FILENO 0 /* Standard input. */ -->标准输入 键盘
214 #define STDOUT_FILENO 1 /* Standard output. */ -->标准输出 屏幕
215 #define STDERR_FILENO 2 /* Standard error output. */ -->标准出错 屏幕
练习3:
当前路径下有3个文件1.txt 2.txt 3.txt
fd1 = open("1.txt",O_RDWR) //fd1 = 3
fd2 = open("2.txt",O_RDWR) //fd2 = 4
fd3 = open("3.txt",O_RDWR) //fd3 = 5
2.close
#include <unistd.h>
int close(int fd);
参数:
fd:文件描述符
返回值:
成功:0
失败:-1
说明:
如果重复关闭一个描述符,它会失败。
练习4:
当前路径下有3个文件1.txt 2.txt 3.txt
fd1 = open("1.txt",O_RDWR) //fd1 = 3
fd2 = open("2.txt",O_RDWR) //fd2 = 4
fd3 = open("3.txt",O_RDWR) //fd3 = 5
close(fd1);
fd4 = open("1.txt",O_RDWR) //fd4 = 3
fd5 = open("2.txt",O_RDWR) //fd5 = 6
close(fd2);
close(fd3);
fd6 = open("3.txt",O_RDWR) //fd6 = 4
fd7 = open("3.txt",O_RDWR) //fd7 = 5
总结:
文件描述符的值是从数组里面从小到大按照顺序拿,如果没有就往往后面找。
3.read
SYNOPSIS
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
参数:
fd:文件描述符
buf:你想要读取的buffer
count:你想要读取的字节数
返回值:
成功:> 0返回实际读到的字节数
=0(zero indicates end offile) 如果是0预示着文件尾
失败:-1(<0)
结论:
读数据的时候,返回值是你实际读到的字节数;并不是想读多少就读多少。当你想读的字节数小于文件里面实际有的字节数的时候,此时count的值和返回值是一样的;当你想读的字节数大于文件里面实际有的字节数的时候,返回值就是文件里面的实际的字节数。
文件IO(IO编程)相关推荐
- 提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)
复制.移动.删除.比较.监控.文件读写 等文件和IO操作是编程中比较常用的功能. 幸运的是,Apache Commons IO等开源组件已经帮我们实现了. 我们可以不用重复造轮子了. 1 ...
- arduino nano 蓝牙_掌控板IO接口编程入门 | 用Arduino玩转掌控板(ESP32)系列
众所周知,掌控板在创客教育中用的非常广泛,它是一块基于 ESP32 的学习开发板.大家对掌控板编程,用的比较多的都是图形化编程的方式,比如 mPython.Mind+ 等.但是,既然掌控板是基于 ES ...
- ESP32与掌控板IO接口编程入门 | ESP32轻松学(Arduino版)
众所周知,掌控板在创客教育中用的非常广泛,它是一块基于 ESP32 的学习开发板.大家对掌控板编程,用的比较多的都是图形化编程的方式,比如 mPython.Mind+ 等.但是,既然掌控板是基于 ES ...
- (33)ISE 约束文件(IO约束)
(33)ISE 约束文件(IO约束) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)ISE 约束文件(IO约束) 5)技术交流 6)参考资料 2 FPGA入门与提升 ...
- 文件数据IO 的细节分析
文件数据IO 的细节分析: 参考: Linux设备驱动开发详解:基于最新的Linux4.0内核:宋宝华编著. 编程离不开数据, 所以数据获取是编程的第一步. 1.文件打开方式 数据IO可以是阻塞式式的 ...
- Java基础(七)——文件、IO流
文章目录 文件.IO流 1 流 2 BIO 3 NIO 4 AIO 文件.IO流 1 流 InputStream/Reader:所有的输入流的基类,前者是字节输入流,后者是字符输入流 OutputSt ...
- java删除相对路径文件夹_Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录...
Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录 这里先简单的贴下常用的方法: File.separator //当前系统文件分隔符 File.pathSeparator// F ...
- 使用uploadify上传大文件报 IO error #2038错误的解决方案
使用uploadify上传大文件报 IO error #2038错误的解决方案 参考文章: (1)使用uploadify上传大文件报 IO error #2038错误的解决方案 (2)https:// ...
- 《java-----我的第一款像样的小软件》---运用了jsoup,jmail,多线程,文件的io操作等等
运用了jsoup,jmail,多线程,文件的io操作等等多项技术,经历了12*5多个小时终于完成了. 部分代码: package com.ytu.view;import java.awt.Border ...
- 第九章 文件处理(IO) ② 代码
第九章 文件处理IO 代码 1.课前测试 2.异常捕获 try{}-catch{} 3.创建目录/文件 File 文件的基本操作 4.获取目录所有子文件名/子级文件对象数组 5.遍历目录下的文件 6. ...
最新文章
- 面试官:谈谈Redis缓存和MySQL数据一致性问题
- 编译驱动时出现Cannot open file trace.h错误
- 最少步数(dfs + bfs +bfs优化)
- linux下面拷贝gbk编码的网页
- 史上最让数学家无奈的规定!背后真相让人不敢相信,可是没有人能证明对错.........
- C++并发编程实战---阅读笔记
- 余世维《职业经理人常犯的错误》[文字版]
- WIN7 MBR转GPT分区实现UEFI启动
- Android Studio创建AVD教程
- win7安装iis及web配置教程
- BurpSuite系列(四)----Scanner模块(漏洞扫描)
- ftp,fxp服务器误删代码如何恢复
- 2020计算机专硕考数二的学校,2020考研备考:考研数一、数二、数三哪个最难?...
- B端设计指南——表格 究竟应该如何设计?
- 可以缩放平移的时间刻度尺,方便自定义UI需求。仿萤石云历史录像时间轴
- (转)《一定要争气》
- lombok中的builder注解居然是一种设计模式:让我们了解一下超级实用的“建造者模式”吧
- 模拟电路学习常用原件之电阻的作用和仿真
- python3 安装依赖库db4-devel和libpcap-devel安装失败 请大佬指教
- 白帽子,强大的XSS钓鱼漏洞,怎么获取用户的真实ip