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");
    }
        
    
}

 

posted @ 2017-02-28 14:45  ren_zhg1992  阅读(357)  评论(0)    收藏  举报