Linux-目录函数:方便以后查找
序号 | 功能 | 函数 | 示例 |
1 | 获取当前工作目录 | 函数声明: #include <unistd.h> char *getcwd(char * buf,size_t size); 函数参数: char * buf:当前工作目录 size_t size: 指定长度 返回值:当当前路径不超过size则返回buf,否则NULL | char cur_path[128]; char* temp=getcwd(cur_path,sizeof(cur_path)); if(NULL!=tmp) printf("cur_path:%s\n",cur_path); |
2 | 切换工作目录 | 函数声明: #include <unistd.h> int chdir(const char *path); 函数参数: char * buf:当前工作目录 返回值:0:表示成功,否则不成功 | char cur_path[128]="/home/lsw"; if(0==chdir(cur_path)) { printf("changed dir sussess\n"); char cur_path[128]; char* temp=getcwd(cur_path,sizeof(cur_path)); if(NULL!=tmp) printf("cur_path:%s\n",cur_path); } |
3 | 目录的创建和删除 | 函数声明: #include <sys/stat.h> int mkdir(const char *pathname, mode_t mode); 函数参数: char * pathname:目录名称 mode_t mode: 指定长度 返回值:0:创建成功,否则失败 int rmdir(const char *pathname); 函数参数: char * pathname:目录名称 返回值:0:删除成功,否则失败 | if(0==mkdir("/home/test",0777)) { printf("mkdir dir sussess\n"); } else { printf("mkdir dir failed\n"); } 与rmdir一样用法类似 |
4 | 目录中的文件列表 | 函数声明: #include <dirent.h>//包含头文件 打开目录:DIR *opendir(const char *pathname); 函数参数: char * pathname:目录 返回值:返回目录指针,成功为非NULL,否则NULL 读取目录:struct dirent *readdir(DIR *dirp); 函数参数: DIR *dirp: 目录指针 返回值:返回文件结构体,见右边,成功为非NULL,否则NULL 关闭目录:int closedir(DIR *dirp); 函数参数: DIR *dirp: 目录指针 返回值:0:关闭成功,否则失败 | 变量: 1:DIR*:目录指针DIR:: 2:struct dirent { long d_ino; // 索引节点号 off_t d_off; //在目录文件中的偏移 unsigned short d_reclen; //文件名长 unsigned char d_type; // 文件类型 char d_name [NAME_MAX+1]; //文件名 }; DIR* dir; struct dirent *ptr; dir = opendir("/etc/rc.d"); while((ptr=readdir(dir))==NULL) { printf("file_name:%s\n",ptr->d_name); } closedir(dir); |
5 | 文件或目录的存取权限 | 函数声明: #include <unistd.h> int access(const char *pathname, int mode); 函数参数: char * pathname:文件或者目录 mode 需要判断的存取权限: #define R_OK 4 // R_OK 只判断是否有读权限 #define W_OK 2 // W_OK 只判断是否有写权限 #define X_OK 1 // X_OK 判断是否有执行权限 #define F_OK 0 // F_OK 只判断是否存在 返回值:当pathname满足mode的条件时候返回0,不满足返回-1。 | |
6 | 获取文件和目录的状态信息 | 函数声明: #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(const char *path, struct stat *buf); | struct stat结构体用于存放文件和目录的状态信息,如下: struct stat { dev_t st_dev; //文件的设备编号 ino_t st_ino; // 文件的i-node mode_t st_mode; //文件的类型和存取的权限 nlink_t st_nlink; //连到该文件的硬连接数目, 刚建立的文件值为1. uid_t st_uid; // 文件所有者的用户识别码 gid_t st_gid; // 文件所有者的组识别码 dev_t st_rdev; // 若此文件为设备文件, 则为其设备编号 off_t st_size; //文件大小, 以字节计算 unsigned long st_blksize; // I/O 文件系统的I/O 缓冲区大小. unsigned long st_blocks; // 占用文件区块的个数, 每一区块大小为512 个字节. time_t st_atime; // 文件最近一次被存取或被执行的时间 time_t st_mtime; //文件最后一次被修改的时间, time_t st_ctime; // 最近一次被更改的时间, }; |
7 | 修改存取时间和更改时间 | 函数声明: #include <utime.h> int utime(const char *filename, const struct utimbuf *times); 函数参数: filename:要修改的文件名字符串 times:如果参数times为空指针(NULL), 则该文件的存取时间和更改时间全部会设为目前时间。 返回值:执行成功则返回0,失败返回-1。 | 结构utimbuf 定义如下: struct utimbuf { time_t actime; time_t modtime; }; |
8 | 重命名文件或目录 | 函数声明: include <stdio.h> int rename(const char *oldpath, const char *newpath); 函数参数: const char * oldpath 文件或目录的原名。 const char *newpath 文件或目录的新的名称。 返回值:0-成功,-1-失败。 | |
9 | 删除文件或目录 | 函数声明: #include <stdio.h> int remove(const char *pathname); 参数说明: const char *pathname 待删除的文件或目录名。 返回值:0-成功,-1-失败。 | |
10 | 改变权限 | 头文件: #include <sys/types.h> #include <sys/stat.h> int chmod(const char * path, mode_t mode); 函数说明:chmod()会依参数mode 权限来更改参数path 指定文件的权限 |
实例如下:
#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <dirent.h>
int main()
{
printf("获取当前目录\n");
{
char cur_path[128];
char* temp=getcwd(cur_path,sizeof(cur_path));
if(NULL!=tmp)
printf("cur_path:%s\n",cur_path);
}
printf("切换目录\n");
{
FILE *fp=fopen("1","rw");
if(NULL==fp)
{
printf("open file failed\n");
return -1;
}
fclose(fp);
char cur_path[128]="/home/lsw";
if(0==chdir(cur_path))
{
printf("changed dir sussess\n");
char cur_path[128];
char* temp=getcwd(cur_path,sizeof(cur_path));
printf("cur_path:%s\n",cur_path);
}
else
{
printf("changed dir failed\n");
}
fp=fopen("1","rw");
if(NULL==fp)
{
printf("open file failed\n");
return -1;
}
fclose(fp);
}
printf("新建目录\n");
{
if(0==mkdir("/home/test",0777))
{
printf("mkdir dir sussess\n");
}
else
{
printf("mkdir dir failed\n");
}
}
printf("遍历目录\n");
{
DIR* dir;
struct dirent *ptr;
dir = opendir("/etc/rc.d");
while((ptr=readdir(dir))==NULL)
{
printf("file_name:%s\n",ptr->d_name);
}
closedir(dir);
}
return 0;
}
参考: