hondrif的学习日志
1 系统调用stat将文件filename的信息存放在参数buf指向的stat结构中
int stat(const char *filename,struct stat *buf) 用来获取文件的状态
是系统调用
其中mode_t指的是 Access: (0664/-rw-rw-r--)
r表示4, w表示2,x表示1
文件模式定义的常量符号,定义在文件<sys/stat.h>
(类似的,lstat对link文件,fstat的参数是fd,文件描述符)
其实可以直接在bash中使用stat这个系统调用 $ stat filename
可以直接在屏幕上显示结果
2 opendir 打开目录项/ readdir 读取目录项中内容/ closedir 关闭目录项
scanfdir函数用来实现目录文件的定位
下面一段程序实现将当前目录下的文件以逆序的方式显示出来
#include<sys/types.h>
#include<dirent.h>
int main()
{
struct dirent **namelist;
int n;
n=scandir(".",&namelist,0, alphasort);
// int scandir(const char* dir, struct dirent ***namelist,
int (*select)(const struct dirent *),
int (*compar)(const struct dirent **,const struct dirent **)
)
//四个参数
if(n<0)
perror("scandir");
else
while(n--) printf("%s/n",namelist[n]->d_name);
}
类似还有一个例子:
vi lls.c
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main(int argc, char *argv[])
{
DIR *dp;
struct dirent *dirp;
if(argc !=2)
printf("请输入一个 路径名/n");
else
{
if((dp = opendir(argv[1])) == NULL)
printf("不能打开 路径 %s/n", argv[1]);
else
{ while((dirp = readdir(dp)) != NULL)
printf("%s/n", dirp->d_name);
}
closedir(dp);
}
exit(0);
}
:wq
gcc -o lls lls.c
/
dir,dirent为文件管理方面的数据结构
链表形式:dir 有一个指向下一个文件的指针next
其中readdir( DIR ) 函数得到当前dir,而且dir=dir->next;
#include <sys/dir.h>
Description
A directory is a file that contains information and structures necessary to define a file hierarchy. A file is interpreted as a directory by the system if it has the S_IFDIR file mode. All modifications to the structure of a directory must be performed under the control of the operating system.
The directory file format accommodates component names of up to 256 characters. This is accomplished through the use of a variable-length structure to describe individual directory entries. The structure of a directory entry follows.
Note: This structure is a file system-specific data structure. It is recommended that file system-independent application programs use the file system-independent direct structure and its associated library support routines.
struct direct {
ino_t d_ino; /* inode number of entry */
ushort d_reclen; /* length of this entry */
ushort d_namelen; /* length of string in d_name */
char d_name[256]; /* name of entry (filename) */
};
By convention, the first two entries in each directory are . (dot) and .. (dot dot). The . (dot) is an entry for the directory itself. The .. (dot dot) entry is for the parent directory. Within the root ( / ) directory the meaning of .. (dot dot) is modified; because there is no parent directory, the .. (dot dot) entry has the same meaning as the . (dot) entry.
/
3 access 获得用户对文件的访问许可
int access(const char *pathname, int mode)
mode包括 R_OK, W_OK, X_OK 以及 F_OK
检查读写权利,不是赋予读写权利──chmod
umask为进程设置文件方式 设置屏蔽字
chmod(const char *path, mode_t mode) 和 chown( const char* path, uid_t owner, gid_t group)
/*是系统调用*/
4 目录项操作
(1)truncate 截断文件。打开文件时可以用O_TRUNC标志可清空文件数据,将文件长度变为0
int truncat(const char* path, off_t length)
(2)link
不同于系统调用ln,系统调用link 用法link File1 File2,硬链接
FIle1,FIle2都指向同一文件(inode),修改File1 则File2内容也会发生变化
(3)symlink 软链接(符号链接)
符号链接 只是包含一个文件的名字的文件,可以给一个目录做链接,也可以跨越文件系统做链接
readlink 打开符号链接( 系统调用 )
(4) unlink 系统调用
int unlink(const char* path)
当path指向一个符号链接时,则该链接被删除
当文件链接数为0时,没有有其它进程打开这个文件,即内存inode的引用数为1,释放inode所指向的磁盘数据块,并释放inode本身
当文件链接数为0时,有其它进程打开这个文件,即内存inode的引用数大于1,还不能释放该文件占用的磁盘数据块和索引节点,仅将内存节点引数减1
(5)mkdir / rmdir / mknod 系统调用
(6)remove 如果是文件同unlink; 如果是目录功能同rmdir
rename 系统调用
(7)chdir改变目录
getcwd获得当前目录
char* getcwd(char *buf, size_t size)
(8)utime改变文件的访问时间和修改时间
#include<sys/types.h>
#include<utime.h>
5 设备特殊文件
设备号所用的数据类型为 dev_t
对st_dev和t_rdev 用major和minor两个宏可以得到主设备号和从设备号
6 sync函数实现同步,为了保证磁盘上的实际文件系统与缓存中内容一致
只是将所有修改过的块的缓存排入些队列,不等实际的I/O结束
7 mount 将一个文件系统安装到某个目录下
1 系统调用stat将文件filename的信息存放在参数buf指向的stat结构中
int stat(const char *filename,struct stat *buf) 用来获取文件的状态
是系统调用
其中mode_t指的是 Access: (0664/-rw-rw-r--)
r表示4, w表示2,x表示1
文件模式定义的常量符号,定义在文件<sys/stat.h>
(类似的,lstat对link文件,fstat的参数是fd,文件描述符)
其实可以直接在bash中使用stat这个系统调用 $ stat filename
可以直接在屏幕上显示结果
2 opendir 打开目录项/ readdir 读取目录项中内容/ closedir 关闭目录项
scanfdir函数用来实现目录文件的定位
下面一段程序实现将当前目录下的文件以逆序的方式显示出来
#include<sys/types.h>
#include<dirent.h>
int main()
{
struct dirent **namelist;
int n;
n=scandir(".",&namelist,0, alphasort);
// int scandir(const char* dir, struct dirent ***namelist,
int (*select)(const struct dirent *),
int (*compar)(const struct dirent **,const struct dirent **)
)
//四个参数
if(n<0)
perror("scandir");
else
while(n--) printf("%s/n",namelist[n]->d_name);
}
类似还有一个例子:
vi lls.c
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main(int argc, char *argv[])
{
DIR *dp;
struct dirent *dirp;
if(argc !=2)
printf("请输入一个 路径名/n");
else
{
if((dp = opendir(argv[1])) == NULL)
printf("不能打开 路径 %s/n", argv[1]);
else
{ while((dirp = readdir(dp)) != NULL)
printf("%s/n", dirp->d_name);
}
closedir(dp);
}
exit(0);
}
:wq
gcc -o lls lls.c
/
dir,dirent为文件管理方面的数据结构
链表形式:dir 有一个指向下一个文件的指针next
其中readdir( DIR ) 函数得到当前dir,而且dir=dir->next;
#include <sys/dir.h>
Description
A directory is a file that contains information and structures necessary to define a file hierarchy. A file is interpreted as a directory by the system if it has the S_IFDIR file mode. All modifications to the structure of a directory must be performed under the control of the operating system.
The directory file format accommodates component names of up to 256 characters. This is accomplished through the use of a variable-length structure to describe individual directory entries. The structure of a directory entry follows.
Note: This structure is a file system-specific data structure. It is recommended that file system-independent application programs use the file system-independent direct structure and its associated library support routines.
struct direct {
ino_t d_ino; /* inode number of entry */
ushort d_reclen; /* length of this entry */
ushort d_namelen; /* length of string in d_name */
char d_name[256]; /* name of entry (filename) */
};
By convention, the first two entries in each directory are . (dot) and .. (dot dot). The . (dot) is an entry for the directory itself. The .. (dot dot) entry is for the parent directory. Within the root ( / ) directory the meaning of .. (dot dot) is modified; because there is no parent directory, the .. (dot dot) entry has the same meaning as the . (dot) entry.
/
3 access 获得用户对文件的访问许可
int access(const char *pathname, int mode)
mode包括 R_OK, W_OK, X_OK 以及 F_OK
检查读写权利,不是赋予读写权利──chmod
umask为进程设置文件方式 设置屏蔽字
chmod(const char *path, mode_t mode) 和 chown( const char* path, uid_t owner, gid_t group)
/*是系统调用*/
4 目录项操作
(1)truncate 截断文件。打开文件时可以用O_TRUNC标志可清空文件数据,将文件长度变为0
int truncat(const char* path, off_t length)
(2)link
不同于系统调用ln,系统调用link 用法link File1 File2,硬链接
FIle1,FIle2都指向同一文件(inode),修改File1 则File2内容也会发生变化
(3)symlink 软链接(符号链接)
符号链接 只是包含一个文件的名字的文件,可以给一个目录做链接,也可以跨越文件系统做链接
readlink 打开符号链接( 系统调用 )
(4) unlink 系统调用
int unlink(const char* path)
当path指向一个符号链接时,则该链接被删除
当文件链接数为0时,没有有其它进程打开这个文件,即内存inode的引用数为1,释放inode所指向的磁盘数据块,并释放inode本身
当文件链接数为0时,有其它进程打开这个文件,即内存inode的引用数大于1,还不能释放该文件占用的磁盘数据块和索引节点,仅将内存节点引数减1
(5)mkdir / rmdir / mknod 系统调用
(6)remove 如果是文件同unlink; 如果是目录功能同rmdir
rename 系统调用
(7)chdir改变目录
getcwd获得当前目录
char* getcwd(char *buf, size_t size)
(8)utime改变文件的访问时间和修改时间
#include<sys/types.h>
#include<utime.h>
5 设备特殊文件
设备号所用的数据类型为 dev_t
对st_dev和t_rdev 用major和minor两个宏可以得到主设备号和从设备号
6 sync函数实现同步,为了保证磁盘上的实际文件系统与缓存中内容一致
只是将所有修改过的块的缓存排入些队列,不等实际的I/O结束
7 mount 将一个文件系统安装到某个目录下