Linux文件操作函数接口

Posted tgww88

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux文件操作函数接口相关的知识,希望对你有一定的参考价值。

一、系统调用和设备驱动程序

       只需用很少的函数就可以对文件和设备进行访问和控制,这些函数称为系统调用,由UNIX和Linux直接提供,它们也是通向操作系统本身的接口。

       操作系统的核心部分,即内核,是一组设备驱动程序。它们是一组对系统硬件进行控制的底层接口。

二、系统调用函数接口

1、size_t   write(int   fildes,const  void *buf,size_t nbytes);

函数说明:将缓冲区buf的前nbytes个字节写入与文件描述符fildes关联的文件中。返回实际写入的字节数,如果出错返回-1。

头文件:#include   <unistd.h>

 

2、size_t    read(int    fildes,void  *buf,size_t   nbytes);

函数说明:从与文件描述符fildes相关联的文件里读入nbytes个字节的数据,并把他们放到数据区buf中。返回实际读入的字节数,如果出错返回-1。

头文件:#include   <unistd.h>

 

3、int   open(const  char  *path,int  oflags);

     int    open(const  char  *path,int  oflags,mode_t  mode);

 函数说明:建立了一条到文件或设备的访问路径。返回与文件相关联的文件描述符。

头文件:#include   <fcntl.h>

 

4、int   close(int   fildes)

函数说明:终止文件描述符fildes与其相对应文件之间的关联。文件描述符被释放并能够被重新使用。调用成功返回0,失败返回-1。

头文件:#include    <unistd.h>

 

5、int   ioctl(int   fildes,int   cmd,....)

函数说明:提供了一个用于控制设备及其描述符行为和配置底层服务的接口。

头文件:#include   <unistd.h>

 

6、off_t   lseek(int   fildes,off_t   offset,int    whence)

函数说明:对文件描述符fildes的读写位置进行设置。读写指针既可设置为文件中的某个绝对位置,也可以设置为相对于当前位置或文件尾的某个相对位置。返回从文件头道文件指针位置的字节偏移值,失败时返回-1。

头文件:#include   <unistd.h> 

              #include   <sys/types.h>

 

7、int   fstat(int   fildes,struct  stat   *buf)

      int   stat(const  char  *path,strcut  stat  *buf)

      int   lstat(const  char  *path,struct  stat  *buf) 

函数说明:返回与文件描述符相关的文件的状态信息,该信息将会写到一个buf结构中。stat和lstat返回相同的结果,但当文件时一个符号链接时,lstat返回的是该符号链接本身的信息,而stat返回的是该链接指向的文件的信息。

头文件:#include   <unistd.h>

              #include    <sys/stat.h>

              #include    <sys/types.h>

 

8、int   dup(int   fildes)

      int   dup2(int   fildes,int   fildes2)

函数说明:提供了一种复制文件描述符的方法,使我们能够通过两个或者更多个不同的描述符来访问同一个文件

头文件:#include    <unistd.h>

 

三、标准IO库

1、 FILE   *fopen(const   char  *filename,  const  char  *mode)

函数说明:打开由filename参数指定的文件,并把它与一个文件流关联起来。失败时返回NULL值

头文件:#include   <stdio.h>

 

2、size_t   fread(void  *ptr,size_t   size,size_t   nitems,FILE  *stream)

函数说明:用于从一个文件流里读取数据。size参数指定每条数据记录的长度,计数器nitems给出要传输的记录个数。它的返回值是成功读到数据缓冲区里的记录个数。

头文件:#include   <stdio.h>

 

3、size_t   fwrite(const  void  *ptr,size_t  size,size_t  nitems,FILE  *stream)

函数说明:从指定的数据缓冲区里取出数据记录,并把它们写到输出流中,返回值是成功写入的记录个数。

头文件#include   <stdio.h>

 

4、int  fclose(FILE  *stream)

函数说明:关闭指定的文件流stream,使所有尚未写出的数据都写出(因为stdio库会对数据进行缓冲,所以fclose很重要)。

头文件:#include   <stdio.h>

 

5、int  fflush(FILE  *stream)

函数说明:把文件流里所有未写出的数据立刻写出。fclose函数隐含执行了一次flush操作。

头文件#include   <stdio.h>

 

6、int  fseek(FILE  *stream,long  int  offset,int  whence)

函数说明:fseek函数是与lseek系统调用对应的文件流函数。与lseek不同的是,fseek返回的是一个整数,0代表成功,-1表示失败。

头文件#include   <stdio.h>

 

7、int   fgetc(FILE  *stream)

      int  getc(FILE  *stream)

      int  getchar()

函数说明:从文件流取出下一个字节,并把它作为一个字符返回,当它到达文件尾或出现错误时,它返回EOF。

头文件:#include   <stdio.h>  

 

8、int  fputc(int  c,FILE  *stream)

      int  putc(int  c,FILE  *stream)

      int   putchar(int  c)

函数说明:把一个字符写到文件流中,返回写入的值,如果失败返回EOF。

头文件:#include   <stdio.h>  

 

9、char  *fgets(char *s,int  n,FILE  *stream)

      char  *gets(char  *s)

函数说明:从文件流stream里读取一个字符串  fgets把读到字符写到s指向的字符串里,直到出现下面某种情况:遇到换行符;已经传输了n-1个字符,或者到达文件尾。它会把遇到的换行符也传递到接收字符里,再加上一个表示结尾的空字符。返回值是指向字符串s的指针,如果文件尾已经到达文件尾或者出现读错误,fgets返回一个空指针。

头文件:#include   <stdio.h>  

 

10、int  printf(const   char  *format,.....)

        int  sprintf(char  *s,const  char  *format,......)

        int  fprintf(FILE  *stream,const  char  *format,......)

头文件:#include   <stdio.h>  

 

 

四、文件流错误

        许多stdio库函数会返回一个超出范围的值,错误由外部变量errno指出。

        #include   <errno.h>       extern   int   errno;

1、int   ferror(FILE  *stream)

函数说明:测试一个文件流的错误标识,若标识被设置就返回一个非零值,否则返回0

2、int   feof(FILE  *stream) 

函数说明:测试一个文件流的文件尾标识,如标识被设置就返回一个非零值,否则返回0

3、void   clearerr(FILE   *stream)

函数说明:清除由stream指向的文件流的文件尾标识和错误标识

 

 

五、文件和目录的维护

1、int   chmod(const   char  *path,mode_t    mode)

头文件:#include   <sys/stat.h>

 

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

头文件:#include   <sys/types.h>

              #include    <unistd.h>

 

3、int   unlink(const   char  *path)

函数说明:删除一个文件的目录项并减少它的链接数。成功返回0,失败返回-1。

头文件:#include   <unistd.h>

       如果一个文件的链接数减少到零,并且没有进程打开它,这个文件就会被删除。事实上,目录项总是立刻被删除,但是文件锁占用的空间要等到最后一个进程关闭它之后才会被删除。rm程序使用的就是这个调用。文件上其他的链接表示这个文件还有其他名字,这通常是由ln程序创建的。

4、int   link(const  char   *path1,const  char  *path2)

      int  symlink(const  char  *path1,const   char  *path2)

函数说明:link是指创建一个指向已有文件path1的新硬链接。symlink是指创建一个指向已有文件path2的符号链接。

头文件:#include   <unistd.h>

 

5、int  mkdir(const  char  *path,mode_t   mode)

头文件:#include   <sys/types.h>

              #include   <sys/stat.h>

 

6、int   rmdir(const  char  *path)

头文件:#include   <unistd.h>

 

7、int   chdir(const  char  *path)

      char  *getcwd(char  *buf,size_t  size)

头文件:#include   <unistd.h>

 

8、  DIR   *opendir(const   char  *name)

函数说明:打开一个目录,并建立一个目录流,如果成功返回一个指向DIR结构的指针

头文件:#include    <sys/types.h>

              #include     <dirent.h>

 

9、struct  dirent  *readdir(DIR  *dirp)

函数说明:返回一个指针,该指针指向的结构里保存着目录流dirp中下一个目录项的有关资料。后续的readdir调用将返回后续的目录项。如果发生错误或者到达目录尾,返回NULL。

头文件:#include   <sys/types.h>

              #include    <dirent.h>

 

六、错误处理

1、char   *strerror(int   errnum)

函数说明:把错误代码映射为一个字符串,该字符串对发生的错误类型进行说明。

头文件:#include    <string.h>

 

2、void  perror(const   char  *s)

函数说明:把error变量映射到一个字符串,并把它输出到标准错误输出流。该字符串的前面先加上字符串s(如果不为空)中给出的信息,再加上一个冒号和一个空格。

头文件:#include   <stdio.h>

 

以上是关于Linux文件操作函数接口的主要内容,如果未能解决你的问题,请参考以下文章

Linux文件操作函数接口

干货:5个文件目录操作相关Linux命令详解

Linux操作系统中系统调用接口

Linux操作系统中系统调用接口

linux操作系统利用find 命令如何查找某个目录的位置

4.lseek函数及共享文件