Linux系统IO:除了open函数之外,其它的函数第一个形参都是文件描述符。对文件进行IO操作:写入和读取操作是没有缓存操作。write因为没有缓存的操作,如果IO操作的数据很多的情况下是不建议使用,特别是那种多媒体数据文本文档数据。因为没有缓存的操作,如果IO操作的数据不多的情况下,而且是操作硬件设备的信息数据,最好就用他。
标准IO:除了fopen函数之外,其它的函数最后一个形参都是文件流指针。对文件进行IO操作:写入和读取操作是有缓存(有个缓冲区)操作。因为有缓存的操作,如果IO操作的数据很多的情况下最好用它,特别是那种多媒体数据文本文档数据。因为有缓存的操作,如果IO操作的数据不多的情况下,是不建议使用,而且是操作硬件设备的信息数据,最好不要用他。函数接口总结:Linux系统IO:是Linux系统提供的系统接口,系统内部运行的时候也在调用的,简称系统调用函数,man 2open、close、read、write、lseek、mmap、ioctl标准IO:是C标准库提供的,那是可以跨系统平台的fopen、fclose、fread、fwrite:读写若干个数据fgets、fputs、gets(已经遗弃了)、puts:读写一行数据fgetc、fputc、putchar、getchar:读写一个字节的数据ftell:获取当前读写位置到文件首部的偏移量feof:判断当前的读写位置时候到了文件的末尾fseek:偏移读写位置 (fseek和lseek的区别)ferror:判断当前读写操作时候有错两种IO的使用理解:原来标准IO是系统IO的升级版(C库给你升级的,库函数),这个升级版一般用于应用层(数据库文件管理)。是不是说没有缓存区的很垃圾?不是的,看情况,在开发环境中,系统IO 用于 对设备文件的数据进行IO操作:设备文件产生的信息本来就不多,实时性要求很高(硬件产生的数据对实时性要求很高)标准IO 用于 磁盘中的普通文件的数据、以及数据库对库中的数据进行IO操作等等 其实数据库里面就是用标准IO实现的。因为这些数据都是很大的,那么使用有缓存区的操作就会更好提高CPU的IO操作性能。
标准IO分析,fflush主动刷新缓存区,设置缓存区的大小,设置缓存区机制(setbuff)
系统IO分析
简述FAT32与NTFS的区别:
安全性:NTFS 安全性更高,可以针对不同用户设置不同的访问级别,并且作为日志类磁盘,即便在数据传输过程中遭遇突发状况造成传输中断,也可通过日志恢复数据,防止数据丢失。而 FAT32 不支持这些安全性功能。
兼容性:FAT32 兼容性较好,在 Windows 系统和 macOS 系统中均能被正常读写,常被制作成 U 盘。NTFS 兼容性较差,虽然是 Windows 开发的磁盘格式,但 Windows 2000 之前的系统版本无法正常读写,macOS 系统对其仅有只读权限,不能取出/写入数据。
单个文件容量限制:FAT32 格式磁盘在传输单个文件时,数据不能超过4GB。而 NTFS 格式磁盘则没有此限制。
分区容量:FAT32 格式磁盘最大扩容仅能达到32GB,NTFS 格式磁盘的最大扩容可以达到2TB(在 GPT 分区下可支持高达128PB)。
使用功能:FAT32 推出较早,功能相对简单。NTFS 功能丰富,如支持文件索引、加密操作、压缩分区等。
闪存性能:NTFS 采用的“日志式”分区形式会对 U 盘等闪存介质造成较大负担,降低其使用寿命。而 FAT32 在闪存性能方面更优。
在实际应用中,如果需要在不同操作系统之间频繁交换数据,且存储设备不需要存储大于4GB 的单个文件,那么 FAT32 是一个较好的选择;如果是在 Windows 系统下使用磁盘(包括机械硬盘和固态硬盘),且需要利用 NTFS 的高级功能,如文件加密、权限控制等,那么 NTFS 是首选;如果需要使用 U 盘等移动设备来存储大文件,并且希望这些设备能在多个操作系统上都能被识别和使用,那么 exFAT 是最佳选择,它是微软为闪存 U 盘量身定制的格式,突破了 FAT32 单个文件容量的限制,支持大于4GB 的文件,同时在台式机或笔记本和移动设备之间的互操作能力较强,且支持访问控制,在多个操作系统上也有较好的支持。