UNIX的高级编程环境要点.docx
- 文档编号:3036552
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:27
- 大小:55.08KB
UNIX的高级编程环境要点.docx
《UNIX的高级编程环境要点.docx》由会员分享,可在线阅读,更多相关《UNIX的高级编程环境要点.docx(27页珍藏版)》请在冰豆网上搜索。
UNIX的高级编程环境要点
1.1文件系统的内部结构
硬件:
在硬件上,把磁盘划分为一连串的块,块的大小从512到4096个字节都有可
能,完全依系统而定
文件系统在磁盘上的分布:
|引导块|超级块|I节点表|数据块|
1.引导块的内容:
文件系统的大小
可供使用的存储块的总数以及可供使用的块所组成的连接列表.
超级块是否被修改过,修改过,当核心程序执行sync指令时,会把主存中的超
级块写回磁盘里.
文件系统与磁盘的逻辑名称
可供使用的I节点总数及能够使用的I节点所组成的连接列表
最近一次I节点被修改的时间
2.i节点的内容:
文件的存取权限(用一个16位的字段表示)
位元
符号常数
含义
15
S_IFREG
一般文件
14
S_IFDIR
目录
13
S_IFCHR/S_IFBLK
字符或块设备
12
S_IFIC
命名管道
11
S_ISUID
用户标识符是否被设定
10
S_ISGID
用户组标识符是否被设定
9
S_ISVTX
是否被置换
0~8
Rwx-rwx-rwx
文件存取权限
注:
其中12位到15位是用来判别文件类别,它们在文件建立时就已经设定
完成,而且不能被更改
S_ISUID:
当一个文件被建立时,文件的用户标识符(userID)与用户组标符
(groupID)被系统设置.当一个用户签到进入UNIX系统时,其用户标识符
(userID)与用户组标识符(groupID)被系统设置,当一个文件被执行时,该
进程会被给定两个标识符:
真实用户标识符与有效用户标识符.其中真实
用户标识符为文件的用户标识符,有效用户标识符随S_ISUID的不同的
设定而不同.其中如S_ISUID为off,则有效用户标识符与真实用户标识
符相同.如S_ISUID为on,则有效用户标识符为运行该文件的用户的用户
标识符.有效用户标识符标识的用户享有与真实用户标识符标识的用户相
同的权利.例如:
真实用户标识的用户对文件拥有读写的权利,则有效用户
标识的用户也对该文件享有读写的权利.在系统中,S_ISUID能设为on的
文件不能超过50个
S_ISUID的设定:
chmodrwsrwxrwx第三位不是x而设为s
S_ISGID同S_ISUID,但是指用户组
S_ISGID的设定:
chmodrwxrwsrwx第六位不是x而设为s
S_ISVTX(是否被置换):
当该位被置为1时,该文件被装入内存后,形同
DOS的TSR程序,将常驻内存.
S_ISVTX的设定:
chmodrwtrwxrwx第三位不是t而设为s
文件存取权限的设置:
格式一:
rwxrwxrwx
格式二:
八进制
意义
0400
允许文件主读
0200
允许文件主写
0100
允许文件主执行
0040
允许组读
0020
允许组写
0010
允许组执行
0004
允许其它人读
0002
允许其它人写
0001
允许其它人执行
04000
同S_ISUID
02000
同S_ISGID
01000
同S_ISVTX
注:
设置时用其中的八进制数相加值进行设置即可
如0400+0200=0600即为文件主可读写
文件的所有者标识
文件的实际存储地址
文件的存取时间:
最近被修改的时间,指文件最近一次被写入或删除数据
的时间
最近被访问的时间,指最近一次被访问的时间
最近文件模式被更改的时间,指I节点的内容被修改的
时间,会影响到I节点的指令有chmod,chown等
文件有多少个连接
文件的大小
文件的类型:
一般文件,目录文件,字符设备,块设备和FIFO(命名管道).
3.内存中的I节点,内存中的I节点除保留了文件中的I节点的内容外,还会增加四
项数据:
I节点被存取的状态,比如I节点被锁定或明或I节点被修改过
有多少个进程在使用该文件及其I节点
现在文件指针所指的位置.换言之,下批数据将由此开始读入
I节点所在的磁盘设备标识符(deviceID)
4.如何通过I节点表索引文件在磁盘上的位置(略)
1.2文件系统调用
类型
函数
用途
文件基本操作
Open
打开文件
Creat
建立并打开文件
Close
关闭文件
Read
读文件
Write
写文件
lseek
移动文件指针
fcntl
读取并控制文件的信息
文件存取权限的改变
Access
查看文件的存取权限
Chmod
改变文件的存取权限
Chown
改变文件的所有者,所属组
文件链接操作
Link
文件链接
Unlink
删除文件链接
获取文件系统信息
stat
获取文件的系统信息
Fstat
同上
目录操作
chdir
改变当前工作目录
mkdir
建立目录
rmdir
删除目录
mknod
建立目录与特殊文件
chroot
改变文件系统的起点
ftw
扫描当前目录树
文件卷操作
mount
文件系统的装载
unmount
文件系统的卸载
sync
把缓冲区内容送到磁盘
1.#include
intfd;
intopen(char*,int,int)
fd=open(fname,flags,perms);
fname:
可以是绝对路径,也可以是相对路径
flags:
O_RDONLY打开文件用于读
O_WRONLY打开文件用于只写
O_RDWR打开文件用于读写
O_APPEND同fopen的”a”模式
O_NDELAY立即打开不做任何耽搁
O_TRONC写入前先删除原有数据
O_CREAT如果该文件不存在,则建立之,并要求给予存取权限参数
Perms
O_EXCL如果目的文件已经存在,那么若以写入模式打开该文件,
则open()调用失败
O_NOCTTY如果此标志被设定,而打开的文件为设备文件(主要指
终端),则该终端不可以作为调用open()系统调用的哪个
进程的控制终端
其中前三项符号常量是互斥的,其余的若以无意义的组合,则系统不做处
理
perm:
例如0666
fd:
成功0–19的整数
失败-1
2.#include
intcreat(char*,int)
fd=creat(filename,perms)
filename:
是指要打开的文件名称
perms:
指打开后的文件的存取权限的设置
fd:
打开成功后的文件描述符
成功,打开后的蛙文件描述符
失败,-1
功能:
1.用creat打开的文件只能用于写操作;
2.filename可以为一个已存在的文件,此时perms无意义,fd为打开此文件
后的文件句柄
3.如filename为一个不存在的文件,则creat建立并打开此文件,并把该文
件截为空,此时perms为该文件的存取权限
3.#include
intclose(intfd)
fd:
用open或creat打开的文件的句柄
creat成功返回值为0,失败返回值为-1
4.#include
intnum_read=read(intfd,char*buf,intbufsize)
intnum_write=write(intfd,char*buf,intbufsize)
fd:
文件描述字
buf:
输入输出缓冲区
bufsize:
每次调用read/write时必须读写的字节数量,最小值为1
num_read:
如果是0表示EOF,若是-1则指读取过程有误.一般情形返回值是读
取的字节总数(该总数可能小于bufsize),不过EOF与回车符不算在被
读入字节总数中
num_write:
返回-1,指写的过程出错,否则返回的是写的字节数(该总数可能小于
bufsize)
补充:
1.如果write写入的对象为文本文件时,在遇到换行符时,它会输出换行符
与回车符(0D0A),而read的操作在读到换行符与回车符时转换为换行符
2.通过设定不同的bufsize可改变读写速度,在stdio.h中的符号常量
BUFSIZ是磁盘块的长度
3.write在进行写操作时仅能覆盖从当前文件指针到bufsize这么长的一
部分字符,文件其余的字符仍然存在
4.文件在read/write操作时,系统保留一文件指针指向当前文件操作位置
5.#include
longlseek(intfd,longoffset,intorigin)
fd:
文件描述符
offset:
每一读写操作所需移动的距离,这个值可正可负,正值向前移,负值指向后
移.
origin:
当前位置的基点:
0当前位置为文件的开头
1指当前位置为前一个位置加上偏移量
2当前位置为文件的尾端
返回值:
从文件头到现在正要读写的位置之间的字节总数;失败,返回-1
补充:
1.因为文件的长度可能大于正型变量的值,所以用long
2.只有当第三个参数是1或2时,偏移才可以为负值
3.新的当前位置可超过文件尾,此时对读是没意义的;但对于写,它将导致
文件的扩展,在新位置与原文件尾部之间,在进行读操作时,读到的将是
null字符(0x00)
4.如打开文件时,存取模式设为只读(O_RDONLY),则lseek将不允许当前
位置设定成超过文件尾
5.在unistd.h中定义了SEEK_SET(0),SEEK_CUR
(1),SEEK_END
(2)三个
符号常量供参数使用
6.#include
intstat=link(char*oldlink,char*newlink)
oldlink:
原文件名
newlink:
新文件名
stat:
成功,返回0
失败,返回-1
7.#include
intstat=unlink(char*filename)
8.#include
intstat=fcntl(intfd,intcmd,intoparg)
9.#include
intstat(char*path,structstat*buf)
intfstat(intfd,structstat*buf)
path:
为目标文件的完整路径
fd:
为打开的文件描述符
structstat
{
dev_tst_dev;/*磁盘设备的标识符*/
ino_tst_ino;/*文件I节点的值*/
unsignshortst_mode;/*文件存取权限为的设定状态*/
nlink_tst_nlink;/*文件有多少个连接*/
uid_tst_uid;/*文件所有者的用户标识符*/
gid_tst_gid;/*文件所有者的用户组标识符*/
d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UNIX 高级 编程 环境 要点
![提示](https://static.bdocx.com/images/bang_tan.gif)