目录操作的一些函数理解

1.readlink(pathnam,buf,size)

  参数:pathname是一个链接文件名,

  功能:该函数的功能是将pathname文件中的路径读到buf中,一共可读size个大小

2.getcwd(buf,zise)

  功能:获取当前路径到buf中;

3.chdir(path)

  功能:改变当前的工作路径为path;

4.目录操作的打开、读、关闭操作

  4.1opendir(path)

    DIR *dp;//目录流指针

    dp=opendir(path)//打开目录函数返回的是一个目录流指针,指向目录的第一    个元素(类似于文件描述符);

  4.2 readdir(dp)

    struct dirent *ent;//存放读取目录项信息的结构体指针

    ent=readdir(dp);//通过dp读到的信息存放在ent指针指向的变量中,可以通过    while(1)循环依次读取。

    /////////////////////////////////////////

    这个结构与实现有,但互少会包含前两个成员
     struct dirent {
       ino_t          d_ino;       /* inode number */
       char           d_name[256]; /* filename */
       off_t          d_off;       /* offset to the next dirent */
       unsigned short d_reclen;    /* length of this record */
       unsigned char  d_type;      /* type of file */
        };

  4.3 closedir(dp)//关闭目录文件

5.getpwnam(const char *name)

//  struct passwd {
               char   *pw_name;       /* username */
               char   *pw_passwd;     /* user password */
               uid_t   pw_uid;        /* user ID */
               gid_t   pw_gid;        /* group ID */
               char   *pw_gecos;      /* user information */
               char   *pw_dir;        /* home directory */
               char   *pw_shell;      /* shell program */
           };

  struct passwd *pw;

  pw=getpwnam(*name)//通过用户名在passwd中找到用户的信息,返回一个结构体指针。通过pw可以访问结构体内的任何信息。

6.getpwent(void)

  返回值:为一个struct passwd 类型的结构体指针;

  功能:遍历出passwd  database中所有信息,而上个getpwnam()只找出与参数相同的变量的结构体指针。

与它配合使用的还有:

  void  setpwent(void);//指针回到文件头

  void endpwent(void);//function  is used to close the password database after
       all processing has been performed.

7.文件截短:

  int truncate(*path,off_t length);

  int ftruncate(int fd,off_t length);

  这两个函数将原函数截短为length长度,截短后的文件内容将不能再被读取,文件的大小改变,但是文件的指针并没有发生偏移,依然在原来的文件尾。  如果length的长度比原来长,则在原文件尾端和新文件尾端被读为0,(文件空洞)

8.权限

  mode_t   mode;

  sscanf(argv[1],"%o",&mode);//数字字符串转换为8进制

  chomd(argv[2],mode)//改变文件argv[2]的权限。

9.删除函数

  unlink(*pathname)//如果该文件没有进程使用,且链接数为0,则删除该文件

  rmdir()//用于删除目录

  remove()//遇见文件则电泳unlink(),遇见目录则调用rmdir();

10.stat(pathname,struct stat *restrict buf)//返回与此命名文件有关的信息结构

      fstat(int filedes,struct stat *buf)//返回已经打开文件的信息结构

   lstat(const char *restrict pathname,struct stat *restrict buf)//不跟随函数,如果是一个链接文件名,返回该链接文件的信息;

 struct stat {
               dev_t     st_dev;     /* ID of device containing file */
               ino_t     st_ino;     /* inode number */
               mode_t    st_mode;    /* protection */
               nlink_t   st_nlink;   /* number of hard links */
               uid_t     st_uid;     /* user ID of owner */
               gid_t     st_gid;     /* group ID of owner */
               dev_t     st_rdev;    /* device ID (if special file) */
               off_t     st_size;    /* total size, in bytes */
               blksize_t st_blksize; /* blocksize for file system I/O */
               blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
               time_t    st_atime;   /* time of last access */
               time_t    st_mtime;   /* time of last modification */
               time_t    st_ctime;   /* time of last status change */
           };

原文地址:https://www.cnblogs.com/edan/p/8868083.html