linux读书体会(一)

◎顺序文件
linux的普通文件事数据字节的集合.这些数据字节一个接一个顺序地存储在该文件中.所以也称顺序(sequential)文件.linux并不在数据上增加任何类型的内部结构.就linux来说,它并不是把数据分解成记录或字段.如果一项特定的应用要求使用某种类型的内部数据结构,则由作为你在数据上增加相应的结构.这使得linux对文件的接口变得特别简单.


◎文件描述符

在linux系统,通过文件描述符访问文件.每个进程最多能够同时使用OPEN_MAX个文件描述符.通过标准头文件<limits.h>访问OPEN_MAX值.对于linux讲  为256


OPEN_MAX 得定义实际上是<linux/limits.h>中.但是为了使程序具有可移植性质,不应该在代码中直接包含这个头文件. 因为在代码中包含#include <limits.h>语句时候,它就自动地被包含.

当启动一个进程时候,文件描述符0,1和2已经分配并被使用.文件描述符0用作标准输入设备     1用作输出设备       2用作错误输出设备.

每个分配得文件描述符和一个打开的文件描述(与该文件有关的信息结构,信息结构有:偏移值offset,文件访问模式mode,其他有关标志flag)相联系..

◎ open系统调用
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int open(const char *path,int flags);

int open(const char *path,int flags,mode_t mode);
flags参数规定如何打开该文件  有三个参数选择:
O_RDONLY 只读
O_WRONLY 只写
O_RDWR   读写
还可以利用以下任意组合:

O_CREAT  打开文件时候,如果文件不存在则建立文件
O_EXCL   如果已经置O_CREAT并且文件存在,则强制open()失败
O_TRUNC  在open()时候,将文件长度截至0
O_APPEND 强制write()写在文件得结束处
还可以规定另外一些标志,但是在普通文件中并不使用他们.所有这些标志值得符号名称可以通过#include <fcntl.h>访问

参数mode用来规定该文件的访问权限位.<sys/stat.h>
S_IRUSR 文件所有者的读权限位
S_IWUSR 文件所有者的写权限位
S_IXUSR 文件所有者的执行权限位

S_IRGRP 文件用户组的读权限位
S_IWGRP 文件用户组的写权限位
S_IXGRP 文件。。。。执行权限

S_IROTH 文件其他用户的读权限位
S_IWOTH 文件其他用户的写权限位
S_IXOTH 文件其他用户的执行权限位

S_IRWXU=S_IRUSR|S_IWUSR|S_IXUSR
S_IRWXG=S_IRGRP|S_IWGRP|S_IXGRP
S_IRWXO=S_IROTH|S_IWOTH|S_IXOTH


S_ISUID  置set-uid位
S_ISGID  置set-gid位


当一个进程代表你创建文件时候,其权限位由与该进程相联系的umask值所修改.进程利用下列公式决定被创建的文件的实际权限位:
mode&(~umask)
这个表示,如果程序所创建的文件上所得到的权限位和在open()调用中所要求的mode参数不一致,不该惊讶.

※当open()检测到错误时候,由返回-1值表示.因为存在许多不同的产生错误的条件,由内核赋予外部整形变量errno相应的值,以此来指示发生了什么错误
open()调用的主要错误有:
ENOENT  没有规定O_CREAT就试图打开一个不存在的文件
EEXIST  利用O_CREAT|O_EXCL强制创建一个已经存在的文件
EACCES  没有该文件所需要的访问权限,或者没有文件路径名中包含的目录的搜索权限.

这些符号通过<errno.h>访问

◎如果没有出现错误,从open()调用的返回值是个文件描述符.在随后对该文件的所有操作中将使用这个文件描述符.
文件描述符:本身是个小的非负整数,实际上是个指向打开文件描述的指针数组的索引.当一个文件描述符被分配时候,将搜索这个数组以找到第一个空闲的元素.结果是当打开一个文件时候,linux总是分配最低编号的空闲的文件描述符.
以后将看到-讨论如何实现输入输出重新定向到文件和管道时候,将得到好的利用.

◎有的时候试图打开一个特定的文件前,可能希望检验进程是否已经访问过该文件,可以用accessv()系统调用来完成.access()系统调用的一般形式是:
#include <unistd.h>
int access(char *pathname,int mode);
mode 是包含在文件<unistd.h>中的下列值之一:
R_OK  检验调用进程是否有过读访问
W_OK  。。。。。。。。。。写访问
X_OK  。。。。。。。。。。执行访问
F_OK  检验规定的文件是否存在

-Linux内核启动-内核的生成...........................................2 读核感悟-Linux内核启动-从hello world说起...................................3 读核感悟-Linux内核启动-BIOS.................................................5 读核感悟-Linux内核启动-setup辅助程序........................................6 读核感悟-Linux内核启动-内核解压缩...........................................8 读核感悟-Linux内核启动-开启页面映射.........................................9 读核感悟-Linux内核启动-链接脚本............................................11 读核感悟-伪装现场-系统调用参数.............................................13 读核感悟-伪装现场-fork()系统调用...........................................15 读核感悟-伪装现场-内核线程:...............................................17 读核感悟-伪装现场-信号通信.................................................19 读核感悟-kbuild系统-内核模块的编译.........................................22 读核感悟-kbuild系统-编译到内核和编译成模块的区别...........................24 读核感悟-kbuild系统-make bzImage的过程.....................................26 读核感悟-kbuild系统-make menuconfig........................................31 读核感悟-文件系统-用C来实现面向对象........................................32 读核感悟-设计模式-用C来实现虚函数表和多态..................................32 读核感悟-设计模式-用C来实现继承和模板......................................33 读核感悟-设计模式-文件系统和设备的继承和接口...............................34 读核感悟-设计模式-文件系统与抽象工厂.......................................36 读核感悟-阅读源代码技巧-查找定义...........................................37 读核感悟-阅读源代码技巧-变量命名规则.......................................42 读核感悟-内存管理-内核中的页表映射总结.....................................43 读核感悟-健壮的代码-exception table-内核中的刑事档案.......................44 读核感悟-定时器-巧妙的定时器算法...........................................45 读核感悟-内存管理-page fault处理流程.......................................45 读核感悟-文件读写-select实现原理...........................................47 读核感悟-文件读写-poll的实现原理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值