26,UC(05)

/*
 达内学习 UC day26 2013-10-9
 */
回忆:
 各种内存管理的函数 malloc()/free() C语言版
 

brk()/sbrk() Unix版本
 mmap()/munmap() 针对物理内存映射

今天:
 系统调用(system  call)
 Unix/Linux

文件相关的设置和函数
系统调用
 内存地址空间有用户空间和内核空间之分,用户空间不能直接进入内核空间

。Unix/Linux中,很多操作都需要内核完成,Unix/Linux遵守的POSIX标准中,专门提供了一些列的函数的接口

,用于用户空间进入内核空间。这一系列函数统称系统调用
Unix/Linux系统 通过系统调用可以进入内核
用户层

进入内核层,需要先封存用户层状态,然后进入内核层,内核层处理完毕后,返回用户层,并且之前封存的状态

还原,因此 :程序不宜频繁的调用系统调用
time a.out可以察看进程在用户态和内核态的时间

文件操作
 在

Linux系统中,几乎一切都做成文件,内存可以看成文件,目录可以看成文件,硬件设备可以看成文件
文件操作

函数
 open() -读文件
 read() -写文件
 write()-写文件 
 close()-关闭
 ioctl()-输入输出控

制   以上可以操作大多数的设备,而不只是文件
int open(char* filename,int flags,...)  ...可变长参数,

就是0-n个任意类型的参数
filename 就是被打开的文件名(带路径),flags 指明打开方式  返回文件标识符号
常见的标识(flags),指明如何打开  返回文件描述符  出错返回-1
O_RDONLY O_WRONLY O_RDWR - 

打开文件后的访问权限
O_CREAT - 如果文件不存在 新建,存在打开
O_EXCL - 一般和O_CREAT联合使用,不存在

新建,存在直接返回-1,(不打开文件)
O_TRUNC  一般和O_CREAT联合使用,不存在新建,存在就清空现有文


O_APPEND 针对写文件有效,代表用追加方式写文件

在UC中,用非负整数代表一个打开的文件。这个整数

叫做文件描述符
操作系统预先用 0 1 2 代表标准输入  标准输出 和标准错误,因此用户的文描述从3开始,到

OPEN_MAX(LINUX为256),文件描述符可以循环使用,只要close()就可以继续使用

文件描述符,代表文件的过程
 

1 open() 函数打开一个文件,并且把文件的相关内容(数据,状态)存入一个文件表   如果是新建文件,需要

第三个参数需要指定新建文件的权限
 2 每个进程都有一张文件描述符和文件表的对应关系总表,在总表

中,每个文件表 对应 一个 整数(文件描述符)
 3 从对应关系总表中,察看一下最小的没有被使用的整数

作为新打开的文件的描述符、对应新的文件表
 4 把新的对应关系,存入对应关系的总表
 5 close()

就是从总表中删除对应描述符和文件表
UC程序员 只接触描述符,不接触文件表
只有 在总表从对应上文件表的

整数才是文件描述符 而没有对应关系的整数,只能是整数
int read(int fd,void *buf,size_t size)
参数:fd

代表 一个打开的文件描述符
 buf 一块内存的首地址
 size buf的大小
返回: 》0 实际读到的字节


  ==0 都到了文件尾
  -1 读文件出错
int write(int fd,void* buf,size_t

count)
参数:前两个和read()一样
 count代表 准备写入的字节数
返回: > 0 实际写入的字节数
   ==0 没有

写入
   -1 写文件出错
练习:
 用UC函数实现员工信息的存储(写)和取出(读),员工信息包括: 员工

ID,员工姓名,薪水
 写两个文件(reademp.c writeemp.c),定义员工的结构emp,读写 结构( 先写后读


关于标C文件,读写函数和UC文件读写函数
标C函数有缓冲区,UC函数在用户层没有缓冲区,因此如果频繁调用

,标C函数效率比UC函数高,但UC函数可以通过自定义缓冲区的方式提高效率

练习:
 要求在写入员工信息

时候,可以直接用vi看到ID和sal
提示:
 只有char* 类型才能被vi所识别, 因此:之需要把emp的ID name

sal  拼接成一个字符串,再把字符串写入文件即可(sprintf)
作业:
 用UC函数实现用户的注册和登录
思路:

用户信息包含:用户名,密码,email

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值