分享
 
 
 

linux读书体会(一)

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

◎顺序文件

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 检验规定的文件是否存在

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有