linux文件与目录操作,linux目录文件编程库

作者: 操作系统  发布:2019-09-06

 UNIX的目录本质上是文本,低端文件编制程序可以成功对目录文件的读写。但目录文件有特定的格式:它由目录项构成,各样目录项的结构固定。
1、工作目录
   在unix下对专门的学业目录的操作可分为读取事业目录和改动工作目录两种。
1)读取工作目录
   函数getcwd和getwd再次来到经过的干活目录,其原型如下:
  #include<unistd.h>
  char *getcwd(char *buf,size_t size);
  char *getwd(char *pathname);
  函数getcwd获取当前专门的学业目录的相对路径。要是字符指针buf值不为空,则将次相对路线存入buf指向的内部存款和储蓄器空间中,参数size记载了字符串buf 的最大存款和储蓄空间;否则函数将自行分配内部存款和储蓄器空间存款和储蓄该路径,参数size无效。调用成功后,函数再次回到指向存款和储蓄路线的指针,调用战败时回来NULL。
  函数getwd拷贝当前职业目录的绝对路线到字符串pathname中,况兼需要工作目录的最大尺寸小于PATH_MAX。调用成功时,函数重临四个对准字符串的指针,不然重返NULL。
  2)改造职业目录
  函数chdir和fchdir重新制订文件的职业目录,其原型如下:
  #include<unistd.h>
  int chdir(const char *path);
  int fchdir(int fildes);
/*-----dir1.c-----*/
#include<unistd.h>
#include<stdio.h>
void main()
{
  char buf[255];
  fprintf(stderr,"pwd=[%s]/n",getcwd(buf,sizeof(buf)));
  chdir("../");
  fprintf(stderr,"pwd=[%s]/n",getcwd(buf,sizeof(buf));
}
2.索引的创设与删除
   #include<sys/stat.h>
   int mkdir(const char *path,mode_t mode);
   int rmdir(char *path);
3.索引的读取
#include<dirent.h>
DIR *opendir(const char *dirname);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);

 

二个简易的读取目录程序,它列举了目录下的满贯文件以及对应的i节点编号
#include<stdio.h>
#include<dirent.h>
void main()
{
  DIR *pdir;
  struct dirent *pent;
  if(arg !=2) return ;
  if((pdir =opendir(argv[1]))==NULL)
  {
    fprintf(stderr,"open dir failed./n");
    return ;
  }
  while(1)
  {
    pent=readdri(pdir);
    if(pent==NULL) break;
    fprintf(stderr,"%5d %s",pent->d_ino,pent->d_name);
  }
  closedir(pdir);
}

1.stat  收获文件属性

作者“pstary”

       #include <sys/types.h>

...

       #include <sys/stat.h>

       #include <unistd.h>

       int stat(const char *filename,struct stat *buf);

       int fstat(fd, struct stat *buf);

       int lstat(const char *filename, struct stat *buf);

      

       fstat与stat的分歧是fstat通过文件汇报符钦命文件;lstat与stat的分别在于,对于符号连接文件,lstat重临的是符号链接文件本人的情景音讯,而stat再次回到的是标记链接指向的文书状态信心。

       成功重返0,错误范围-1

   www.2cto.com  

  1.  chown 设置文件属性

       #include <sys/types.h>

       #include <unistd.h>

       int chown(const char *path,uid_t owner, gid_t group);

       int fchown(int fd, uid_t owner, gid_t group)’

       int lchown(const char *path, uid_t owner,gid_t group);

   

   fchown与chown的分别是fchown通过文件叙述符钦赐文件;lchown与chown的界别在于,对于符号连接文件,lchown再次来到的是符号链接文件本身的意况音讯,而chown再次回到的是标记链接指向的文本状态信心。

       成功重返0,错误范围-1

       文件的主人只好更动文件的组id为其所属组中的三个,一级顾客才具改改文件的持有者id,何况拔尖客商能够专断修改文件的客商组id。假若参数owner或group钦赐为-1,那么文件的客商id和组id不会被改动。

 

  1. truncate 退换文件大小

       #include <sys/types.h>

       #include <unistd.h>

       int truncate(const char *path, off_t length);

       int ftruncate(int fd, off_t length);

      

       将钦定文件大小改为参数length内定的大小,如若原来的文本比参数length大,则当先的一些会被删去;如果原先的文件大小比参数length小,则文件将被扩充,扩张部分用0填充。

       成功再次来到0,错误范围-1

   www.2cto.com  

  1. utime 改变文件的st_mtime域和st_ctime域,即存取时间和修改时间。

       #include <sys/types.h>

       #include <utime.h>

       int utime(const char *filename,struct utimbuf *buf);

      

       #include <sys/time.h>

       int utime(char *filename,struct timeval *tvp);

 

       struct utimbuf

       {

              time_t actime;

              time_t modtime;

       }

       固然buf是一个空指针,则存取时间和修改时间都为这段时间时间。

       成功重回0,错误范围-1

 

  1. umake 设置文件成立时的屏蔽字,并重返以前的值

       #include <sys/types.h>

       #include <sys/stat.h>

       mode_t umask(mode_t mask);

 

  1. rename 文件的移动和修改文件名

       #include <stdio.h>

       int rename(const char *oldpath, const char *newpath);

       若newpath钦命的公文已存在,则原版的书文件会删除

 

  1. remove 文件的删减

       #include <unistd.h>

       int unlink(const char *pathname);

       int remove(const char *pathname);

  

       文件的删减能够行使unlink系统调用,目录的删除须要使用rmdir系统调用,而通用的不只能删除文件又能去除目录的体系调用是remove,remove内部封装了unlink和rmdir。

       成功返回0,错位再次回到-1。

   www.2cto.com  

  1. mkdir 目录的开创

       #include <sys/types.h>

       #include <sys/stat.h>

       int mkdir(const char *pathname, mode_t mode);

       成功重返0,错位重临-1。

 

  1. rmdir 目录的删减

       #include <unistd.h>

       int rmdir(const char *pathname);

      rmdir只可以删除空目录,成功重回0,错位再次来到-1。

 

  1. getcwd 获取当前目录

       #include <unistd.h>

       char *gercwd(char *buf, size_t size);

       char *get_current_dir_name(void);

       char *getwd(char *buf);

      

       getcwd会将近期的劳作目录相对路线复制到参数buf所指的内部存款和储蓄器空间,参数size为buf的半空中尺寸。在调用此函数时,buf所指的内部存款和储蓄器空间要丰硕大,若专门的职业目录相对路线的字符串长度超越参数size大小,则再次来到值为NULL,errno的值为ERANGE。倘使参数buf为NULL,getcwd()会依据参数size的深浅活动分配内部存款和储蓄器(使用malloc),假如size也为0,则getcwd()会基于办事目录相对路线的字符串长度来支配安顿的内部存款和储蓄器大小。进度能够在行使完此字符串后采纳free()来刑满释放解除劳教空间。

       推行成功则将结果复制到参数buff所指向的内部存款和储蓄器空间,或是再次来到机关分配的字符串指针,退步重返NULL.

   www.2cto.com  

  1. chdir 设置工作目录

       #include <unistd.h>

       int chdir(const char *path);

       int fchdir(int fd);

       chdir将工作目录改为由path钦赐的目录,fchdir将职业目录改为由文件陈诉符fd钦命的目录。

       实践成功再次回到0,错误重返-1

 

  1. 赢得目录音讯

1)  opendir

       #include <sys/types.h>

       #include <dirent.h>

       DIR *opendir(const char *name);

       opendir展开参数name钦点的目录,并重临DIEnclave*形象的目录刘,类似于文件陈述符。成功重回目录流,失利重回NULL

2)  readdir

       #include <sys/types.h>

       #include <dirent.h>

       struct dirent *readdir(DIR *dir);

       readdir用来从dir所指向的目录读收取目录的新闻,重回二个struct dirent结构的指针。

       struct dirent

       {

              long d_ino;//此目录i节点编号

              off_t d_off;//目录文件开端至此目录步向点的运动

              unsigned short d_reclen;//d_name的长度

              char d_name[NAME_MAX+1];//以NULL结尾的文本名

       }  www.2cto.com  

       函数施行成功范围该目录下贰个文书的消息。假如用opendir展开有些目录,第一次调用该函数,则赶回的是该目录下的首先个文件的音讯。借使产生错误可能读到目录文件尾,重回NULL。

3)  closedir

       #include <sys/types.h>

       #include <dirent.h>

       int *closedir(DIR *dir);

       关闭目录,成功重回0,失利再次回到-1

 

  1. symlink创立符号链接

       #include <unistd.h>

       Int symlink(const char *actualpath, const char *sympath);

 

 

作者 好坏

获取文件属性 #include sys/types.h #include sys/stat.h #include unistd.h int stat(const char *filename,struct stat *buf); int fstat(fd, struct stat *buf); int lstat(con...

本文由今晚开什么码发布于操作系统,转载请注明出处:linux文件与目录操作,linux目录文件编程库

关键词:

上一篇:没有了
下一篇:没有了