今天主要对zuot学习函数进行了补充
一,文件IO函数
1.fileno函数 类型转换函数
函数原型:int fileno(FILE *stream);
功能:fileno函数用于取得参数stream指定的文件流所使用的文件描述符。文件描述符是一个非负整数,用于在底层操作系统中表示打开的文件、套接字或其他I/O资源。
返回值:返回指定文件流的文件描述符。如果失败,则返回-1,并设置errno以指示错误。
2.fdopen函数 类型转换
函数原型:FILE *fopen(const char *filename, const char *mode);
功能:fopen函数用于以指定的模式(如只读、只写、追加等)打开一个文件,并返回一个指向FILE对象的指针。该FILE对象用于后续的读写操作。
参数:
filename:要打开的文件名。
mode:打开文件的模式,如"r"(只读)、"w"(只写,文件不存在则创建,存在则清空)、"a"(追加,文件不存在则创建)等。
返回值:成功时返回一个指向FILE的指针,失败时返回NULL,并设置errno以指示错误。
二,文件目录相关操作
文件目录操作三步走,opendir, readdir, closedir
1.Opendir函数
函数原型:
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);
功能:
opendir函数用于打开一个目录,并返回一个指向该目录的句柄(DIR*),这个句柄将在后续的readdir调用中使用。如果目录无法打开,则返回NULL。
参数:
name:指定需要打开的目录路径名,可以是绝对路径,也可以是相对路径。
返回值:
成功时,返回指向DIR结构体的指针,用于后续的目录读取操作。
失败时,返回NULL,并设置相应的errno以指示错误。
DIR *opendir 目录流指针
2.Readdir函数
函数原型:
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
功能:
readdir函数用于读取opendir返回的目录流中的下一个目录条目(即文件或子目录的信息)。每次调用readdir都会返回目录流中的下一个条目,直到到达目录流的末尾或发生错误。
参数:
dirp:由opendir函数返回的目录句柄。
返回值:
成功时,返回一个指向struct dirent结构体的指针,该结构体包含了目录条目的信息,如文件名(d_name)、inode号(d_ino)等。
当到达目录流的末尾或发生错误时,返回NULL。可以通过检查errno来区分是到达末尾还是发生错误。
使用时,一般需要循环读取
struct dirent * info 为指针
3.Readdir函数中要用的宏
4.chdir // cd 切换路径
函数原型:
#include <unistd.h>
int chdir(const char *path);
功能:
chdir 函数用于更改进程的当前工作目录到指定的路径。
参数:
path:指向新工作目录路径的字符串。
返回值:
成功时,返回 0。
失败时,返回 -1,并设置 errno 以指示错误。
5.getcwd // pwd 打印当前工作路径
函数原型:
#include <unistd.h>
char *getcwd(char *buf, size_t size);
功能:
getcwd 函数用于获取当前工作目录的完整路径,并将其存储在 buf 指向的数组中。
参数:
buf:指向用于存储当前工作目录路径的字符数组的指针。如果此参数为 NULL,函数将分配足够的内存来存储路径。
size:buf 指向的数组的大小。
返回值:
成功时,返回 buf 指针(如果 buf 不是 NULL)。如果 buf 是 NULL,则返回一个指向新分配的字符串的指针,该字符串必须使用 free() 函数释放。
失败时,返回 NULL,并设置 errno 以指示错误。
6.mkdir函数 创建文件夹
函数原型:
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *pathname, mode_t mode);
功能:
mkdir 函数用于创建一个新目录。
参数:
pathname:指向要创建的新目录的路径的字符串。
mode:指定新目录的权限。这些权限在创建时会被进程的 umask 值修改。
返回值:
成功时,返回 0。
失败时,返回 -1,并设置 errno 以指示错误。
7.rmdir 移除文件夹(文件夹要为空)
函数原型:
#include <unistd.h>
int rmdir(const char *pathname);
功能:
rmdir 函数用于删除一个空目录。
参数:
pathname:指向要删除的目录的路径的字符串。
返回值:
成功时,返回 0。
失败时,返回 -1,并设置 errno 以指示错误(例如,如果目录不为空)。
这些函数在处理文件系统和目录操作时非常有用,特别是在需要编写跨平台或基于 UNIX 的系统编程任务时。
8.stat函数
stat 函数原型
在 C 语言中,stat 函数的原型定义在 <sys/stat.h> 头文件中,如下所示:
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *pathname, struct stat *buf);
pathname 参数是一个指向以 null 结尾的字符串的指针,该字符串包含了要查询状态的文件或目录的路径。
buf 参数是一个指向 struct stat 结构的指针,该结构将被填充以描述文件或目录的状态。
struct stat 结构
struct stat 结构包含了多个字段,用于描述文件或目录的各种属性。一些常用的字段包括:
st_mode:文件类型和权限。
st_size:文件大小(以字节为单位)。
st_uid 和 st_gid:文件的所有者和组 ID。
st_mtime、st_atime、st_ctime:文件的最后修改时间、最后访问时间和最后状态改变时间(以自 Unix 纪元(1970-01-01 00:00:00 UTC)以来的秒数表示)。
stat函数的打印
其中st_mode的宏
st_mode 是 struct stat 结构体中的一个成员,它是一个 32 位无符号整型(mode_t),用于描述文件的类型和权限。在 UNIX 和类 UNIX 系统(包括 Linux)中,st_mode 字段包含了多个位(bit)的信息,这些位被用来表示文件的类型、所有者权限、组权限以及其他用户的权限等。
S_IFMT:文件类型的位遮罩(mask),用于提取文件类型信息。
S_IFSOCK:套接字文件(socket)。
S_IFLNK:符号链接(symbolic link)。
S_IFREG:普通文件(regular file)。
S_IFBLK:块设备文件(block device)。
S_IFDIR:目录(directory)。
S_IFCHR:字符设备文件(character device)。
S_IFIFO:管道文件(FIFO,First In First Out)。
这些宏定义用于检查文件类型,例如,要检查一个文件是否是目录,可以使用 S_ISDIR(st.st_mode)。
权限宏:
S_IRWXU、S_IRUSR、S_IWUSR、S_IXUSR:分别表示文件所有者具有读、写、执行权限。
S_IRWXG、S_IRGRP、S_IWGRP、S_IXGRP:分别表示与文件所有者同组的用户具有读、写、执行权限。
S_IRWXO、S_IROTH、S_IWOTH、S_IXOTH:分别表示其他用户具有读、写、执行权限。
这些宏定义用于检查文件的权限,例如,要检查文件所有者是否具有执行权限,可以使用 (st.st_mode & S_IXUSR)。
特殊权限宏:
S_ISUID、S_ISGID、S_ISVTX:分别表示设置用户ID(set-user-ID)、设置组ID(set-group-ID)和粘滞位(sticky bit)的特殊权限。
这些宏定义用于检查文件的特殊权限,例如,要检查文件是否具有设置用户ID的特殊权限,可以使用 (st.st_mode & S_ISUID)。