一、文件属性的获取
(1)stat函数
int stat(const char *pathname, struct stat *statbuf);
功能:获得文件的属性。
参数:
path
:文件的路径。
buf
:属性存放空间的首地址。
返回值:成功返回0,失败返回 - 1。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
struct stat st;
int ret = stat("./01ls.c",&st);
if(-1 == ret)
{
printf("stat error\n");
return 1;
}
printf("ino:%lu mode:%d link:%lu uid:%d gid:%d size:%lu time:%lu\n",st.st_ino, st.st_mode,st.st_nlink
,st.st_uid, st.st_gid,st.st_size,st.st_mtim.tv_sec);
return 0;
}
(2)st_mode标志位
用于表示文件的类型、权限等信息。
例如,000 000 000 100 000 000
表示一个目录文件。
S_ISREG(m) is it a regular file?
S_ISDIR(m) directory?
S_ISCHR(m) character device?
S_ISBLK(m) block device?
S_ISFIFO(m) FIFO (named pipe)?
S_ISLNK(m) symbolic link? (Not in POSIX.1-1996.)
S_ISSOCK(m) socket? (Not in POSIX.1-1996.)
二、目录操作
(1)opendir函数
DIR *opendir(const char *name);
功能:打开一个目录获得一个目录流指针。
参数:name
为目录名。
返回值:成功返回目录流指针,失败返回NULL。
(2)readdir函数
struct dirent *readdir(DIR *dirp);
功能:从目录流中读取文件信息并将保存信息的结构体地址返回。
参数:dirp
为目录流指针。
返回值:包含文件信息的结构体,出错或者读到目录流末尾返回NULL。
(3)closedir函数
int closedir(DIR *dirp);
功能:关闭之前已经打开的目录流对象。
参数:opendir
的返回结果中目录流对象。
返回值:成功返回0,失败返回 - 1。
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
int main(int argc, char *argv[])
{
DIR *dir = opendir("./");
if(NULL == dir)
{
printf("opendir");
return 1;
}
while(1)
{
struct dirent * info = readdir(dir);
if(NULL == info)
{
break;
}
printf("%s\n",info->d_name);
}
closedir(dir);
return 0;
}
(4)chdir函数
int chdir(const char *path);
功能:改变当前程序的工作路径。
参数:path
为改变到的路径。
返回值:成功返回0,失败返回 - 1。
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int ret = chdir("../");
if(-1 == ret)
{
printf("chdir error\n");
return 1;
}
fopen("aaa","w");
return 0;
}
(5)getcwd函数
char *getcwd(char *buf, size_t size);
功能:获得当前的工作路径。
参数:
buf
:保存工作路径空间的首地址。
size
:保存路径空间的长度。
返回值:成功返回包含路径空间的字符串首地址,失败返回NULL。
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char buf[512]={0};
getcwd(buf,sizeof(buf));
printf("current path is %s\n",buf);
int ret = chdir("../");
if(-1 == ret)
{
printf("chdir error\n");
return 1;
}
getcwd(buf,sizeof(buf));
printf("after change path is %s\n",buf);
return 0;
}
(6)mkdir函数
int mkdir(const char *pathname, mode_t mode);
功能:创建一个目录。
参数:
pathname
:路径。
mode
:创建目录的权限模式,通常与umask
进行按位与操作。
返回值:成功返回0,失败返回 - 1。
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
int main(int argc, char *argv[])
{
int ret = mkdir("bbb",0777);
if(-1 == ret)
{
printf("mkdir error\n");
return 1;
}
return 0;
}
(7)rmdir函数
int rmdir(const char *pathname);
功能:删除一个空目录文件。
参数:pathname
为目录文件的名字。
返回值:成功返回0,失败返回 - 1。
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int ret = rmdir("bbb");
if(-1 == ret)
{
printf("rmdir error\n");
return 1;
}
return 0;
}