用于文件系统的C库函数

 9/20/2017 学<LINUX C编程实战》中


 

1.打开

File *fopen(const char *path , const char * mode);

  fopen实现打开指定的文件FileName,mode指打开的形式,C语言中打开的形式种类如下:

  

  

  b用于打开二进制文件而非文本文件,这是DOS、Windows下的情况。在Linux中不区分二进制文件和文本文件。

  同时注意,标志都是const char * 类型,即都是字符串字面值,需要用到双引号,写成fopen(”1.txt" , r); 是错误的。

  由于fopen();的返回值是FILE *类型,所以利用一个相同类型的对象如fp去标识fopen();,即fp标识目标文件。之后对fp的操作即是对目标文件的操作。  

 

2.读写

  支持字符串、字符等单位进行读写文件。

int fgetc(FILE *stream);
int fputc(int c, FILE *stream);
char *fgets(char *s, int n, FILE *stream);
int fputs(const char *s, FILE *stream);
int fprintf(FILE *stream, const char *format, ...);
int fscanf (FILE *stream, const char *format, ...);
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
size_t fwrite (const void *ptr, size_t size, size_t n, FILE *stream);

  fread();:实现从流stream中读出n个字段,每个字段长size个字节,并将n个字段放入名为ptr的字符数组中,返回实际读取的字段数。

  fwrite();:实现从缓冲区ptr所指的数组中把n个字段写入流stream,每个字段长size个字节,返回实际写入的字段数。

  fputs();:实现了把字符串写入流stream中。参数s是一个数组,包含了以'\0'为结尾的字符序列。参数stream是指向FILE对象的指针,该对象标识了要被写入的流。返回值:成功的话返回一个非负值,失败的话返回一个EOF。

  注意如果要实现output功能,需要用一个字符串数组存储内容并输出,fputs();是向文件中”ouput“,即写入文件,并非输出文件。

3.定位

int fgetpos(FILE *stream, fpos_t *pos);
int fsetpos(FILE *stream, const fpos_t *pos);
int fseek(FILE *stream, long offset, int whence);

  返回值:成功返回0,否则返回非0。

  用法如下:

#include <stdio.h>

int main ()
{
   FILE *fp;
   fpos_t position;

   fp = fopen("file.txt","w+");
   fgetpos(fp, &position);
   fputs("Hello, World!", fp);
  
   fsetpos(fp, &position);
   fputs("这将覆盖之前的内容", fp);
   fclose(fp);
   
   return(0);
}

  创建一个文件file.txt,并以读写的方式打开,首先使用fgetpos();获取文件的初始位置,写入“Hello, World!",然后使用fsetpos();重置为文件头的位置。再写入”这将覆盖之前的内容“,实现内容的覆盖。最终输出”浙江覆盖之前的内容“。

  

4.关闭

int fclose(FILE *stream);

  关闭流stream,刷新缓冲区。参数stream是FILE对象的指针,该对象指定了要被关闭的流。

  返回值:成功关闭返回0,失败返回EOF。

 

例程:

  编写一个程序,在当前目录下创建用户可读写文件“hello.txt”,在其中写入“Hello, software weekly”,关闭该文件。再次打开该文件,读取其中的内容并输出在屏幕上。

  

 1 #include <stdio.h>
 2 #define LENGTH 100
 3 
 4 int main()
 5 {
 6     FILE *fp;
 7     char str[LENGTH];
 8     fp = fopen("hello2.txt" , "w+");
 9     if(fp)
10     {
11         fputs("Hello,software weekly" , fp);
12         fclose(fp);
13     }    
14     fp = fopen("hello2.txt" , "r");  
15     fgets(str , LENGTH , fp);
16     printf("%s\n" , str); 
17     return 0;
18 }

  output:bw98@ubuntu:~/Practice/project3$ ./2
     Hello,software weekly

posted @ 2017-09-20 00:44  bw98  阅读(442)  评论(0编辑  收藏  举报