文件IO第一天

学习什么:

【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)

不缓冲:标准出错

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值