一、文件IO补充
1.文件IO的读写
(1)write
原型:ssize_t write(int fd, const void *buf, size_t count);
功能:
向文件描述符中写入buf指向的count个字节的数据
参数:
fd:文件描述符
buf:要写入的数据空间首地址
count:要写入的字节数
返回值:
成功返回实际写入的字节数
失败返回-1
(2)read
原型:ssize_t read(int fd, void *buf, size_t count);
功能:
从文件描述符中读取count个字节放入buf指向的空间中
参数:
fd:文件描述符
buf:存放数据空间的首地址
count:想要读取的字节数
返回值:
成功返回实际读到的字节数
读到文件末尾返回0
读取出错返回-1
2.文件描述符偏移量的定位
lseek
原型:off_t lseek(int fd, off_t offset, int whence);
功能:
重新定位流的偏移量
参数:
fd:文件描述符
offset:偏移量
whence:
SEEK_SET
SEEK_CUR
SEEK_END
返回值:
成功返回偏移量
失败返回-1
3. 文件IO与标准IO互相转换的函数
(1)fileno
功能:根据文件流指针获得文件描述符
(2)fdopen
功能:根据已经打开的文件描述符获得文件流指针
(3)feof
功能:判断文件流指针是否到达末尾
(4)ferror
功能:判断文件流指针是否出错
二、目录IO
1.操作方式:打开目录文件,读取目录文件中的目录项,关闭目录文件
2.函数接口:
(1)opendir
原型:DIR *opendir(const char *name);
功能:
打开目录流获得目录流指针
参数:
name:目录文件的路径
返回值:
成功返回目录流指针
失败返回NULL
(2)closedir
原型:int closedir(DIR *dirp);
功能:
关闭目录流指针
(3)readdir
原型:struct dirent *readdir(DIR *dirp);
功能:
读取并返回下一个目录项的信息
参数:
dirp:目录流指针
返回值:
成功返回包含目录项信息结构体指针
失败返回NULL
读到文件末尾返回NULL
struct dirent {
ino_t d_ino; /* Inode number:通过inode找到文件对应的磁盘空间位置 */
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: 文件名*/
};
(4)getcwd
原型:char *getcwd(char *buf, size_t size);
功能:
获得当前工作目录的绝对路径
参数:
buf:存放路径字符串空间首地址
size:最多存放字符串的大小
返回值:
成功返回包含字符串空间的首地址
失败返回NULL
(5) chdir
原型:int chdir(const char *path);
功能:
切换当前的工作路径
参数:
path:要切换的路径
返回值:
成功返回0
失败返回-1
(6)mkdir
原型:int mkdir(const char *pathname, mode_t mode);
功能:
创建目录文件
注意:
r:读权限,决定用户是否能够查看目录下所有文件名
w:写权限,决定用户是否能够在目录下新建文件
x:执行权限,决定用户是否能够进入目录
(7)rmdir
原型:int rmdir(const char *pathname);
功能:
删除目录文件
3.文件名和路径
file.txt:文件名
./file.txt:路径
三、时间相关函数接口
1.分类
(1)time_t 类型时间
1970-1-1到现在的秒数
一般用于时间计算相关逻辑
(2) struct tm 类型时间
包含年月日时分秒信息
(3) char *字符串类型时间
由时间拼接的字符串
2.函数接口
(1)time
原型:time_t time(time_t *tloc);
功能:
返回1970-1-1日到现在的秒数
参数:
存放秒数空间的首地址
返回值:
成功返回秒数
失败返回-1
(2)localtime
原型:struct tm *localtime(const time_t *timep);
功能:
将秒数转换为结构体时间
参数:
timep:1970-1-1到现在的秒数
返回值:
成功返回包含时间的结构体指针
失败返回NULL
struct tm {
int tm_sec; /* Seconds (0-60) */
int tm_min; /* Minutes (0-59) */
int tm_hour; /* Hours (0-23) */
int tm_mday; /* Day of the month (1-31) */
int tm_mon; /* Month (0-11) */
int tm_year; /* Year - 1900 */
int tm_wday; /* Day of the week (0-6, Sunday = 0) */
int tm_yday; /* Day in the year (0-365, 1 Jan = 0) */
int tm_isdst; /* Daylight saving time */
};
(3)mktime
原型:time_t mktime(struct tm *tm);
功能:
将结构体时间转换为time_t类型的时间
参数:
tm:结构体时间的首地址
返回值:
成功返回time_t时间
失败返回-1
(4)ctime
原型:char *ctime(const time_t *timep);
功能:
将time_t时间转换为字符串时间


被折叠的 条评论
为什么被折叠?



