zoukankan      html  css  js  c++  java
  • 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 中所包含的信息)

  • 相关阅读:
    答《同样 25 岁,为什么有的人事业小成、家庭幸福,有的人却还在一无所有的起点上?》
    [面试记录-附部分面试题]2014第一波的找工作的记录
    项目总结(二)->一些常用的工具浅谈
    项目总结(一)->项目的七宗罪
    Android学习笔记(三)Application类简介
    Android学习笔记(二)Manifest文件节点详解
    Android学习笔记(一)Android应用程序的组成部分
    Mac下搭建Eclipse Android开发环境
    Android开发必知--自定义Toast提示
    正则表达式(一)
  • 原文地址:https://www.cnblogs.com/jianxinzhou/p/3922174.html
Copyright © 2011-2022 走看看