学习什么:
【1】IO的基础知识
【2】标准的IO编程
【3】时间编程
【4】文件IO编程
【5】文件和目录属性
【6】C库的制作
基本概念:看看就ok
1>什么是文件
定义:
文件:一组相关数据的有序集合。
文件名:这个数据集合的名称。
>什么是文件
定义:
文件:一组相关数据的有序集合。
文件名:这个数据集合的名称。
按类型分类:
常规文件
ASCII码文件
二进制的文件
目录
字符设备
块设备
有名管道
套接口
符号链接
2>系统调用
用户空间进程访问内核的接口
把用户从底层的硬件编程中解放出来
极大的提高了系统的安全性
使用户程序具有可移植性
是操作系统的一部分
3>库函数---系统提供函数:printf scanf
库函数为了实现某个功能而封装起来的API集合
提供统一的编程接口,更加便于应用程序的移植
是语言或者应用程序的一部分
4>文件描述符------------*
顺序分配的非负整数
内核用以标识一个特定进程正在访问的文件
其他资源(socket、pipe等)的访问标识
5>标准输入、标准输出和标准出错
由shell默认打开,分别为0/1/2
在linux开机的时候,系统就会打开三个文件---三个文件描述符
标准输入 标准输出 标准错误输出
0 1 2
stdin stdout stderr
6>不用缓存的I/O
通过文件描述符进行访问
open()/read()/write()/lseek()/close()… 标准I/O
7>通过FILE*进行访问
printf()/fprintf()/fopen()/fread()/fwrite()/fseek()/fclose()…
8>全局错误码---------------*133种错误
在errno.h中定义,全局可见
错误值定义为“EXXX”形式,如EACCESS
错误种类:/usr/include/asm
farsight@ubuntu:~$ sudo vim /usr/include/asm-generic/errno
errno-base.h errno.h ---两个文件都是保存错误信息的
#define EPERM 1 /* Operation not permitted */
#define ENOENT 2 /* No such file or directory */
#define ESRCH 3 /* No such process */
#define EINTR 4 /* Interrupted system call */
#define EIO 5 /* I/O error */
#define ENXIO 6 /* No such device or address */
#define E2BIG 7 /* Argument list too long */
#define ENOEXEC 8 /* Exec format error */
#define EBADF 9 /* Bad file number */
#define ECHILD 10 /* No child processes */
#define EAGAIN 11 /* Try again */
#define ENOMEM 12 /* Out of memory */
#define EACCES 13 /* Permission denied */
#define EFAULT 14 /* Bad address */
#define ENOTBLK 15 /* Block device required */
#define EBUSY 16 /* Device or resource busy */
#define EEXIST 17 /* File exists */
#define EXDEV 18 /* Cross-device link */
#define ENODEV 19 /* No such device */
9>处理规则
如果没有出错,则errno值不会被一个例程清除,即只有出错时,
才需要检查errno值任何函数都不会将errno值设置为0,
errno.h中定义了所有常数都不为0
10>函数错误信息输出-----用来判断某个函数是否出错
strerror(); --映射出errno对应的错误信息
perror();-----*输出函数以及函数中对应的errno错误
---如何查看函数信息?
通过man手册查看
用法:man + 你要查询的函数名
#include
void perror(const char *s);
用perror判断的函数名
sterror用法:声明#include
printf("malloc:%s\n",strerror(errno));
文件IO和标准IO的区别
标准IO有缓冲区,文件IO无缓冲区。
标准IO相当于将需要操作的东西打包一次性给内核空间进行操作。文件IO相当于一次次的进行操作
文件描述符表——————————PCB进程管理块,是一个非常巨大的结构体。
文件描述符特点
1,文件描述符按顺序排列,且是非负正数。
2,优先分配没被使用的空闲整数。
3,操作文件描述符相当于操作对应的文件
标准IO分类
格式化IO和非格式化IO
两者区别:格式化IO可以自定义输入或输出,非格式化不行
格式化IO对数据进行操作,非格式化IO对文件操作。
标准IO的特点:1,由C库提供,头文件较少,有
2,代替用户处理很多细节
3,是由系统调用函数构建的
4,为底层IO系统调用提供了一个通用的接口。
文本流:处理的数据以字符出现,‘\n’会被转换。
二进制流:处理的数据以二进制序列出现‘\n’不会被替换。
标准IO分为全缓冲,行缓冲,不缓冲。
全缓冲:针对常规文件
缓冲刷新条件
1,缓冲区满了
2,程序正常结束
3,文件正常关闭
4,强制刷新缓冲区fflush(stdout)
行缓冲:针对标准输入和输出
缓冲刷新条件
1,缓冲区满了
2,程序正常结束
3,文件正常关闭
4,强制刷新缓冲区fflush(stdout)
不缓冲:标准出错