文件属性与目录操作

一、文件属性的获取

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

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值