APUE学习笔记 - Chapter 4. Files and Directories

1.stat , fstat , lstat

     int stat( const char * restrict pathname , struct stat * restrict buf ) ;
     int fstat ( int filedes , struct stat* restrict buf ) ;
     int lstat ( const char * restrict pathname , struct stat * restrict buf  ) ; 
     
     以上三个函数均可以获取文件的相关信息,以stat的结构返回。其中,stat使用文件名进行获取,而且会跟踪链接,而lstat会显示链接文件的信息,不会跟踪。而fstat则是通过已经打开的文件描述符来获得相关的文件信息。

 struct stat {
mode_t st_mode; /* file type & mode (permissions) */
ino_t st_ino; /* i-node number (serial number) */
dev_t st_dev; /* device number (file system) */
dev_t st_rdev; /* device number for special files */
nlink_t st_nlink; /* number of links */
uid_t st_uid; /* user ID of owner */
gid_t st_gid; /* group ID of owner */
off_t st_size; /* size in bytes, for regular files */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last modification */
time_t st_ctime; /* time of last file status change */
blksize_t st_blksize; /* best I/O block size */
blkcnt_t st_blocks; /* number of disk blocks allocated */
};
2.每个进程都有六个相关的用户ID值 :

real user ID
real group ID

who we really are

effective user ID
effective group ID
supplementary group IDs

used for file access permission checks

saved set-user-ID
saved set-group-ID

saved by exec functions,是effective user ID和effective group ID的复制。


3.文件访问权限

S_IRUSR

user-read

S_IWUSR

user-write

S_IXUSR

user-execute

S_IRGRP

group-read

S_IWGRP

group-write

S_IXGRP

group-execute

S_IROTH

other-read

S_IWOTH

other-write

S_IXOTH

other-execute

在访问相关的文件时,我们必须对于该路径上的所有的文件夹拥有运行权限。如果我们拥有read的权限,则可以以只读形式打开文件,
如果 拥有write权限,则可以以写的形式打开文件。要在一个目录下新建或者删除文件,我们必须对该目录拥有写与运行权限。
4.访问检查
int access( const char * pathname , int mode ) ;
5.sticky bit
通过设定stick bit,在该文件第一次被运行后,text的内容被复制到交换区,下一次可以快速地运行。
6.文件系统

因为每个i-node都是要同一个文件系统内部进行编号的,所以ln(1)无法在不同的文件系统中进行链接操作。
而在同一个文件系统中时,mv与rm操作都不需要搬运数据。
对于每个cylinder group,可以表示成以下形式:


打开该文件,如果该文件的link count为0,则为将该文件删除。
每个inode都会包含如下信息:
文件类型,文件权限,文件大小, 文件数据的指针
stat中的信息大部分都是保存在inode之中。
7.链接
硬链接,均指向同一个i-node
符号链接,通过存储指向的路径名实现,可以实现跨文件系统与指向目录。

Function

Does not follow symbolic link

Follows symbolic link

access

 

chdir

 

chmod

 

chown

creat

 

exec

 

lchown

 

link

 

lstat

 

open

 

opendir

 

pathconf

 

readlink

 

remove

 

rename

 

stat

 

truncate

 

unlink

 

8.文件时间:

Field

Description

Example

ls(1) option

st_atime

last-access time of file data

read

-u

st_mtime

last-modification time of file data

write

default

st_ctime

last-change time of i-node status

chmod, chown

-c

access time 与modification time 均可以使用下面的函数进行修改:
int utime( const char * pathname , const struct utimbuf * times ) ;


posted @ 2010-08-17 19:47  梁星  阅读(260)  评论(0编辑  收藏  举报
Mobile and Web Analytics