中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
linux读书体会(一)
作者:未知 时间:2005-07-27 23:30 出处:CSDN 责编:chinaitpower
              摘要: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  检验规定的文件是否存在


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有