IO的基础 (read/write)
1.认识内核对象
不允许访问内核设备和内存,
但可以通过内核系统函数去访问.
对每个内核对象进行编号ID.
如果访问内核对象,只能通过ID.
编程模型:
申请得到一个ID
在内核系统函数中使用ID得到对应内核对象数据
2.怎么访问文件
使用函数,传递一个文件,系统打开文件,加载文件数据,
返回一个ID.
使用函数,传递ID,得到数据.
使用函数传递ID,告诉系统释放文件.
ID:文件描述符号.file description (fd)
每个程序执行的时候都有一个目录,存放打开的文件描述符号
3.每个程序默认打开三个文件设备:
0:标准输入
1:标准输出
2:错误输出
4.操作文件描述符号
ssize_t write(int fd,
void *buf,//要写入内核对象的数据
size_t size);//写入数据大小
返回:
>0 实际写入的数据
-1 写入错误
ssize_t read(int fd,
void *buf,//返回数据的空间
size_t size);//空间大小
返回:
>0:实际读取的数据
=0:碰到文件结束符号EOF (ctrl+d)
-1:读取错误
建议:
0:输入
1:输出
2:错误输出
课堂练习:
1.使用write向0 1 2 写数据
2.使用read从0 1 读取数据,并判定输入的情况,
然后根据相应的结果输出提示
#include <stdlib.h> #include <stdio.h> main() { //printf("%d\n",getpid()); //while(1); /* int r=write(0,"Hello\n",6); write(1,"world\n",6); write(2,"louis\n",6); int a=20; write(1,&a,4); */ char buf[32]; //memset(buf,0,32); bzero(buf,32); int r=read(0,buf,30); printf("实际输入:%d\n",r); if(r>0) { buf[r]=0; printf("::%s\n",buf); } if(r==0) { printf("ctrl+d\n"); } if(r==-1) { printf("输入错误!\n"); } }

浙公网安备 33010602011771号