句柄:filediscriber(fd)
文件描述符本质为一个整型的数据,是对一个数据表的索引值
内存的实模式和虚模式:刚开机内存使用实模式,之后使用虚模式来运行应用。
CPU复位(reset)或加电(power on)的时候以实模式启动,处理器以实模式工作。
虚模式则是以映射的形式将应用使用的内存地址虚拟化映射到实际内存上。
man 2 open #打开文件的各种方式(flags)
man 2 read / write #文件的读写
系统调用是最快的 但是占用了内核 不建议频繁使用
对fd的操作是类UNIX系统的操作
库调用可移植性好 对内核依赖性低
库函数使用FILE指针的流式传输,是标准库的内容
— 查 两者区别 原理 性能 效益
stat fstat lstat 函数中的 *buf 是要求一片空间而不是一个指针
— 区别是 fstat 使用fd lchown 使用对象是link文件
— 同理 chown fchown lchown 是一样的
cp -p 带属性拷贝
ps 定制 -eo <定制项目>
lseek 中的 whence :
- SEEK_SET 从头开始
- SEEK_CUR 从之前的指针开始相对偏移
- SEEK_END 从尾开始
lseek(fd, SEEK_CUR, 0) 返回当前指针所指的位置
free #查看内存与交换区使用率
流的读写(fread/fwrite)中的大小是 块字节和块个数的乘积 返回值是块各个数
使用库函数(stdio)中的函数比较通用 易于移植
--- 而read write 是linux的内核中的函数
流读写是有缓存的! 会在close时进行刷新,而系统调用是及时的
基于流的打开文件会在内存中占用一片位置,将读写的内容放在缓存中,最后再写入硬盘
流操作时对系统调用的封装,减少了IO的次数
系统调用存在切换内核上下文的问题 会使内核运行速度减慢 尤其是多人调用
如果大量单人调用速度提高 反之速度降低
可以使用fdopen 和 fileno 来转换系统调用与标准库
linux下可以用uname获取其版本
fopen 返回NULL 且错误码为21: EISDIR 是目录
或者用stat的st_mode中对文件类型的修饰
S_ISDIR(stat.st_mode) -> 是目录
fdopendir()//打开目录
fcntl() //对文件的操作(删除)
unlink() //同上
system() //用shell命令删除
stat() //用errno获取文件是否存在
//系统调用:
opendir()
readdir() //依次读目录下一个文件的名字当返回为空时读取结束
mkdir() //创建一个目录(mode_t 用stat的mode值)
chmod() //改变st_mode值
Hash算法! -> 适用的数据结构
mira DB -> mysql 被收购后作者的作品