3.目录操作
3.目录操作
- **1. 目录操作**
- **2. 改变工作目录**
- **3. 目录创建与删除**
- **4. 文件属性获取**
- **5. 时间处理**
- **6. 练习与作业**
- **7. 其他注意事项**
- **8. 总结**
1. 目录操作
- opendir:
- 函数原型:
DIR *opendir(const char *name);
- 功能:打开一个目录,返回目录流指针。
- 参数:
name
:目录名。 - 返回值:成功返回目录流指针,失败返回
NULL
。
- 函数原型:
- readdir:
- 函数原型:
struct dirent *readdir(DIR *dirp);
- 功能:从目录流中读取文件信息,返回包含文件信息的结构体指针。
- 参数:
dirp
:目录流指针。 - 返回值:成功返回文件信息结构体指针,失败或读到目录末尾返回
NULL
。
- 函数原型:
- closedir:
- 函数原型:
int closedir(DIR *dirp);
- 功能:关闭目录流。
- 参数:
dirp
:目录流指针。 - 返回值:成功返回
0
,失败返回-1
。
- 函数原型:
2. 改变工作目录
- chdir:
- 函数原型:
int chdir(const char *path);
- 功能:改变当前程序的工作目录。
- 参数:
path
:目标路径。 - 返回值:成功返回
0
,失败返回-1
。
- 函数原型:
- getcwd:
- 函数原型:
char *getcwd(char *buf, size_t size);
- 功能:获取当前工作目录。
- 参数:
buf
:保存路径的缓冲区。size
:缓冲区大小。
- 返回值:成功返回路径字符串指针,失败返回
NULL
。
- 函数原型:
3. 目录创建与删除
- mkdir:
- 函数原型:
int mkdir(const char *pathname, mode_t mode);
- 功能:创建一个目录。
- 参数:
pathname
:目录路径。mode
:目录权限(如0777
)。
- 返回值:成功返回
0
,失败返回-1
。
- 函数原型:
- rmdir:
- 函数原型:
int rmdir(const char *pathname);
- 功能:删除一个空目录。
- 参数:
pathname
:目录路径。 - 返回值:成功返回
0
,失败返回-1
。
- 函数原型:
4. 文件属性获取
- stat:
- 函数原型:
int stat(const char *path, struct stat *buf);
- 功能:获取文件的属性信息。
- 参数:
path
:文件路径。buf
:保存文件属性的结构体指针。
- 返回值:成功返回
0
,失败返回-1
。
- 函数原型:
- struct stat:
- 包含文件的详细信息,如文件类型、权限、大小、时间戳等。
- 常用字段:
st_mode
:文件类型和权限。st_size
:文件大小。st_mtime
:最后修改时间。
5. 时间处理
- time:
- 函数原型:
time_t time(time_t *t);
- 功能:获取从1970年1月1日到现在的秒数。
- 参数:
t
:保存秒数的变量指针。 - 返回值:成功返回秒数,失败返回
-1
。
- 函数原型:
- localtime:
- 函数原型:
struct tm *localtime(const time_t *timep);
- 功能:将秒数转换为本地时间。
- 参数:
timep
:秒数指针。 - 返回值:成功返回时间结构体指针,失败返回
NULL
。
- 函数原型:
- ctime:
- 函数原型:
char *ctime(const time_t *timep);
- 功能:将秒数转换为可读的字符串格式。
- 参数:
timep
:秒数指针。 - 返回值:成功返回时间字符串指针,失败返回
NULL
。
- 函数原型:
- struct tm:
- 包含时间的详细信息,如年、月、日、时、分、秒等。
6. 练习与作业
- 练习1:设计一个程序,每隔30秒向日志文件写入一条带有时间戳的信息。
- 日志文件路径:
/var/log/a.out.log
。 - 格式:
xx-xx-xx xx:xx:xx asdfasdf
。
- 日志文件路径:
- 练习2:从键盘输入内容,显示输入内容并附加当前时间(时:分)。
- 示例:
1122334455 09:56 1122334455
- 示例:
- 作业1:统计当前系统的进程数,并记录到日志文件中。
- 日志格式:
15:20:30 当前进程数:计数
。
- 日志格式:
- 作业2:设计一个程序,监控
/proc
目录下的进程信息,并记录到日志文件中。
7. 其他注意事项
- 文件权限:
- 使用
stat
函数获取文件权限时,st_mode
字段包含文件类型和权限信息。 - 权限标志位:
S_IRUSR
:用户读权限。S_IWUSR
:用户写权限。S_IXUSR
:用户执行权限。- 类似标志位适用于组和其他用户。
- 使用
- 时间戳:
st_mtime
:文件最后修改时间。st_atime
:文件最后访问时间。st_ctime
:文件状态最后改变时间。
8. 总结
通过目录操作函数(如opendir
、readdir
、closedir
)可以遍历目录内容;通过stat
函数可以获取文件的详细属性;通过时间处理函数(如time
、localtime
、ctime
)可以获取和格式化系统时间。结合这些功能,可以实现文件监控、日志记录等实用程序。