• LINUX输入输出与文件——续


    1 目录操作

    改变目录或文件的访问权限

    #include <sys/stat.h>
    
    int chmod(const char *path, mode_t mode); //mode形如0777

    path参数指定的文件被修改为具有mode参数给出的访问权限。

    当修改权限成功返回0,修改失败返回-1。

    (man 2 chmod)

    获取当前目录

    #include <unistd.h>
     
    char *getcwd(char *buf, size_t size); //获取当前目录,相当于pwd命令

    将当前的工作目录绝对路径复制到参数buf所指的内存空间,参数size为buf的空间大小. 在调用此函数时,buf所指的内存空间要足够大,若工作目录绝对路径的字符串长度超过参数size大小,则返回NULL,errno的值则为ERANGE。

    倘若参数buf为NULL,getcwd()会根据参数size的大小自动配置内存(使用malloc()),如果参数size也为0,则getcwd()会根据工作目录绝对路径的字符串程度来决定所配置的内存大小,进程可以在使用完此字符串后自动利用free()来释放此空间。所以常用的形式:getcwd(NULL, 0);

    获取成功,返回指向当前工作目录的指针,一般值与buf相等。

    (man 3 getcwd)

    改变当前目录

    #include <unistd.h>
    
    int chdir(const char *path); //修改当前目录,即切换目录,相当于cd命令

    用来将当前的工作目录改变成以参数path所指的目录。

    修改成功返回0,事变返回-1。

    创建和删除目录

    #include <sys/stat.h>
    #include <sys/types.h>
    #include <unistd.h>
    
    int mkdir(const char *pathname, mode_t mode);    //创建目录,mode是目录权限
    int rmdir(const char *pathname);                 //删除目录

    创建或者删除成功返回0,失败返回-1。

    (man 2 mkdir; man 2 rmdir)

    获取目录信息

    #include <sys/types.h>
    #include <dirent.h>
    
    DIR *opendir(const char *name);        //打开一个目录 
    struct dirent *readdir(DIR *dir);      //读取目录的一项信息,并返回该项信息的结构体指针
    int closedir(DIR *dir);                //关闭目录文件

    opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流,和文件操作函数open()类似,接下来对目录的读取和搜索都要使用此返回值。函数失败则返回NULL。

    readdir()函数用来读取目录的信息,并返回一个结构体指针,该指针保存了目录的相关信息。有错误发生或者读取到目录文件尾则返回NULL;dirent结构体如下:

    On Linux, the dirent structure is defined as follows:
    
    struct dirent {
        ino_t          d_ino;       /* inode number */
        off_t          d_off;       /* offset to the next dirent */
        unsigned short d_reclen;    /* length of this record */
        unsigned char  d_type;      /* type of file; not supported by all file system types */
        char           d_name[256]; /* filename */
    };

    通常我们只关心dirent 结构体中的d_name信息。

    kris_示例代码_1

    /*************************************************************************
      > File Name: my_opendir.c
      > Author: KrisChou
      > Mail:zhoujx0219@163.com 
      > Created Time: Tue 19 Aug 2014 10:19:06 AM CST
     ************************************************************************/
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <dirent.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    {
        DIR* pdir;
        struct dirent *pent;
        pdir = opendir(argv[1]);
        if(pdir == NULL)
        {
            perror("opendir");
            exit(1);
        }
        while((pent = readdir(pdir)) != NULL)
        {
            printf("%u %u %u %x %s 
    ",pent->d_ino,pent->d_off,pent->d_reclen,pent->d_type,pent->d_name);
        }
        closedir(pdir);
        return 0;
    }

    以上代码读取通过命令行输入的目录下的所有文件的信息(dirent 中所包含的信息)

  • 相关阅读:
    16进制颜色转普通RGB
    (null)
    GIT配置
    -other linker flags
    cocoapods使用问题集锦(2017-04)
    关于@property与@syntheszie的使用问题
    iOS端一次视频全屏需求的实现(转)
    用C语言进行最基本的socket编程
    http和socket之长连接和短连接区别(转)
    socket,TCP/IP的理解(转)
  • 原文地址:https://www.cnblogs.com/jianxinzhou/p/3922174.html
Copyright © 2020-2023  润新知