目录
#include
#include
#include
int stat(const char *pathname, struct stat *statbuf);//如果文件的属性为符号链接文件,则返回目标文件的信息
int fstat(int fd, struct stat *statbuf);
//需要先打开文件得到文件描述符才可以使用
int lstat(const char *pathname, struct stat *statbuf);
如果文件的属性为符号链接文件,则返回链接文件的信息
三个函数的返回值:成功返回0,失败返回-1并返回 错误码
struct stat {
dev_t st_dev; /* ID of device containing file */ 设备文件
ino_t st_ino; /* Inode number */ inode码
mode_t st_mode; /* File type and mode */文件的类型和权限
nlink_t st_nlink; /* Number of hard links */硬链接数
uid_t st_uid; /* User ID of owner */文件拥有者的ID
gid_t st_gid; /* Group ID of owner */文件所属组的ID
dev_t st_rdev; /* Device ID (if special file) */设备号
off_t st_size; /* Total size, in bytes */文件大小
blksize_t st_blksize; /* Block size for filesystem I/O */块大小
blkcnt_t st_blocks; /* Number of 512B blocks allocated */块数
struct timespec st_atim; /* Time of last access */
struct timespec st_mtim; /* Time of last modification */
struct timespec st_ctim; /* Time of last status change */
#define st_atime st_atim.tv_sec /* Backward compatibility */最后访问时间
#define st_mtime st_mtim.tv_sec 最后修改时间
#define st_ctime st_ctim.tv_sec 文件状态最后修改时间
};
#include
#include
struct passwd *getpwuid(uid_t uid);
struct passwd {
char *pw_name; /* username */
char *pw_passwd; /* user password */
uid_t pw_uid; /* user ID */
gid_t pw_gid; /* group ID */
char *pw_gecos; /* user information */
char *pw_dir; /* home directory */
char *pw_shell; /* shell program */
};
#include
#include
struct group *getgrgid(gid_t gid);
struct group {
char *gr_name; /* group name */
char *gr_passwd; /* group password */
gid_t gr_gid; /* group ID */
char **gr_mem; /* NULL-terminated array of pointers
to names of group members */
};
目录文件(directory file) 这种文件包含了其他文件的名字以及指向与这些文件有关信息的指针。对一
个目录文件具有读许可权的任一进程都可以读该目录的内容,但只有内核可以写目录文件。
普通文件(regular file) 这是最常见的文件类型,这种文件包含了某种形式的数据。至于这种数据是文
本还是二进制数据对于内核而言并无区别。对普通文件内容的解释由处理该文件的应用程序进行。
字符特殊文件(character special file) 这种文件用于系统中某些类型的设备。
块特殊文件(block special file) 这种文件典型地用于磁盘设备。系统中的所有设备或者是字符特殊文
件,或者是块特殊文件。
FIFO 这种文件用于进程间的通信,有时也将其称为命名管道。
套接口(socket) 这种文件用于进程间的网络通信。套接口也可用于在一台宿主机上的进程之间的非网
络通信。第1 5 章将用套接口进行进程间的通信。
符号连接(symbolic link) 这种文件指向另一个文件。
1>打开目录
#include
#include
DIR *opendir(const char *name);
功能:
打开目录
参数:
要打开目录的名称
返回值:
成功返回DIR指针
失败返回NULL,并返回报错码
2>读取一个目录
#include
struct dirent *readdir(DIR *dirp);
参数:
opendir返回的指针
返回值: 成功返回读取的结构体数据
失败返回0,并返回错误码
struct dirent {
ino_t d_ino; /* Inode number */ 索引码
off_t d_off; /* Not an offset; see below */在目录文件中的偏移
unsigned short d_reclen; /* Length of this record */ 文件名的长度
unsigned char d_type; /* Type of file; not supported 文件类型
by all filesystem types */
char d_name[256]; /* Null-terminated filename */ 文件名
};
3>关闭目录
closedir
#include
#include
int closedir(DIR *dirp);
功能:
关闭目录
参数:
opendir返回的指针
返回值:
成功返回:0
失败返回-1,并返回报错码