嵌入式开发学习日志(linux系统编程--io文件偏移函数(3)和目录)Day26
一、io文件偏移函数
1.lseek
形式:
off_t lseek(int fd, off_t offset, int whence);
【int fd】:需要操作的文件;
【off_t offset,】:偏移量;
【 int whence】:SEEK_SET:开始;SEEK_CUR : 文件中间(一般指文件上次操作结束时候de位置) SEEK_END:文件末尾;
函数的返回值是偏移量;
注意:文件偏移之后如果不写入数据,则文件偏移不成功,文件大小不变;
eg:
fopen和open文件权限对应的关系 | |
r | O_RDONLY |
r+ | O_RDWR |
w | O_WRONLY|O_CREAT|O_TRUNC |
w+ | O_RDWR|O_CREAT|O_TRUNC |
a(文件后追加读) | O_WRONLY|O_CREAT|O_APPEND |
a+(文件后追加读写) | O_RDWR|O_CREAT|O_APPEND |
fopen的操作权限默认为0666 |
2、fileno
形式:
int fileno(FILE *stream);
功能: FILE * fp===>int fd
获得一个文件流指针中的文件描述符;
【FILE *stream】:需要操作的文件名;
返回值: 成功返回文件描述符;
失败返回-1;
注意:在使用此函数的时候,文件的权限不变;
关闭文件:关闭文件时,(fclose和close都可以关闭文件),建议用封装等级高的函数关闭 fclosk
eg:
3、fsopen
形式:
FILE *fdopen(int fd, const char *mode);
参数:
【int fd】:需要操作的文件;
【 const char *mode】:权限和原来的文件权限对应;
功能:将文件描述符转换为文件流指针;
int fd ===> FILE * fp
返回值:成功返回文件流指针;
失败返回NULL;
关闭文件:关闭文件时,(fclose和close都可以关闭文件),建议用封装等级高的函数关闭 fclosk
eg:
4、perror 系统级别报错函数;
形式:
void perror(const char *s);
先判断是否有错,在进行打印报错信息;man 2和man 3的函数可以用;未调用函数时,返回值为success;
【error】:错误号
eg:
文件属性
一、目录
目录操作的步骤:
1、打开;
2、读取目录;
3、关闭目录;
1、opendir
形式:
DIR *opendir(const char *name);
【const char *name】:需要打开的目录名;
功能:打开一个目录,获得该目录的目录流指针;
返回值:
成功返回值为目录流指针;
失败返回NULL;
2、readdir
形式:
struct dirent *readdir(DIR *dirp);
【DIR *dirp】:目录流指针;
功能:从目录流中读取文件信息,并保存的结构体信息;
返回值:为包含信息的结构体;
出错或者读到目录流末尾,返回值为NULL;
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 */ | 文件的名字 |
DT_BLK | 块设备 | B |
DT_CHR | 字符设备 | C |
DT_DIR | 目录 | D |
DT_FIFO | 管道 | P |
DT_LNK | 软连接/符号链接 | L |
DT_REG | 规则文件/普通文件 | - |
DT_SOCK | 网络文件 | |
DT_UNKNOW | 未知文件 |
eg:
3、关闭文件
形式:
int closedir(DIR *dirp);
功能:关闭之前已经打开的目录流对象;
返回值:成功返回0 失败返回-1;
eg:
时间函数
1、time
形式:
time_t time(time_t *tloc);
【time_t *tloc】:存放秒数的空间首地址;
传参为NULL时,返回值为1970年1月1日0时0分0秒至今的秒数
2、localtime
形式:
struct tm *localtime(const time_t *timep);
功能:将一个秒数转换为日历时间;
【const time_t *timep】:保存秒数空间的地址;
返回值:成功返回值保存日历时间结构体指针;
失败返回NULL;
eg:
总结