Linux-目录函数

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;
}

 参考:

Linux&C语言 目录操作_LtMamba的博客-CSDN博客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值