C语言与Linux系统文件操作函数大全

目录

一、C语言——fopen函数

二、C语言——fwrite函数

三、C语言——fread函数

四、C语言——fseek函数

1、Linux系统——open接口

2、Linux系统——write接口

3、Linux系统——read接口

4、Linux系统——lseek接口


一、C语言——fopen函数

fopen函数是C标准库提供的打开文件的函数。

有2个参数

第一个是要打开的文件(包含路径)

第二个是打开方式。关于打开方式主要有以下这些::

r:  只读方式打开文件,该文件必须存在。

r+:读/写方式打开文件,该文件必须存在。

rb:只读方式打开一个二进制文件,该文件必须存在。

rb+:读/写方式打开一个二进制文件,该文件必须存在。

rt:   只读方式打开一个文本文件,该文件必须存在。

rt+: 读/写方式打开一个文本文件,该文件必须存在。

w:  只写方式打开文件,若文件存在,则覆盖原内容;若文件不存在,创建该文件。

w+:读/写方式打开文件,若文件存在,则覆盖原内容;若文件不存在,创建该文件。

wb:只写方式打开一个二进制文件,若文件存在,则覆盖原内容;若文件不存在,创建该文件。

wb+:读/写方式打开一个二进制文件,若文件存在,则覆盖原内容;若文件不存在,创建该文件。

wt:只写方式打开一个文本文件,若文件存在,则覆盖原内容;若文件不存在,创建该文件。

wt+:只写方式打开一个文本文件,若文件存在,则覆盖原内容;若文件不存在,创建该文件。

a:  以追加的方式打开只写文件,文件存在时写入数据到文件结尾;文件不存在创建该文件(EOF符保留)

a+:以追加的方式打开读/写文件,文件存在时写入数据到文件结尾;文件不存在创建该文件(EOF符不保留)

ab+:以追加的方式打开读/写二进制文件...

at+: 以追加的方式打开读/写文本文件...

返回值

成功返回一个FILE pointer(文件指针),失败返回NULL。

例子:

     FILE* fp = fopen("bite.txt","wb+");
     if(fp == NULL){
         perror("open");
        return -1;
     }

二、C语言——fwrite函数

size_t fwrite(const void* ptr,size_t size,size_t nmemb,FILE* stream);

fwrite 和 fread函数既可操作文本文件,也可操作二进制文件。

fwrite是将ptr指针指向的数据写到文件流中。

参数:

有4个参数,第一个是ptr指针,指向要写出的数据的内存首地址;第二个是要写出的数据的基本单元大小以字节为单位(如:sizeof(char);第三个是基本单元个数;第四个是打开的文件指针。

返回值:

写入成功返回写入的基本单元个数,写入失败返回0,基本单元个数 != nmemb。

例子:

 23    const  char* data = "Linux so easy!";
 24     size_t ret = fwrite(data,sizeof(char),strlen(data),fp);
 25     if(ret != 1){
 26         printf("fwrite error\n");
 27         return -1;
 28     }

三、C语言——fread函数

size_t fread(const void* ptr,size_t size,size_t nmemb,FILE* stream);

fwrite 和 fread函数既可操作文本文件,也可操作二进制文件。

fread是将文件流中的数据读取到缓冲区ptr。

参数:

第一个是指针ptr,指向缓冲区,第二个是要读取的数据的基本单元大小;第三个是基本单元个数;第四个是打开的文件指针。

返回值:

读取成功返回读取到的基本单元个数,若失败或者读到文件末尾返回0,个数

fread不区分文件结尾和读取错误,可以调用ferror判断错误以及用feof判断文件结尾。

例子:

 32     char buf[1024];
 33     size_t _ret = fread(buf,sizeof(char),sizeof(buf)-1,fp);
 34     if(_ret == 1){
 35         printf("%s\n",buf);
 36     }
 37     else{
 38         if(ferror(fp)){
 39             printf("fread error\n");
 40         }
 41         else if(feof(fp)){
 42             printf("end of file\n");
 43         }
 44         return -1;
 45     }

四、C语言——fseek函数

 fseek函数是用来重新定位流上的文件指针的。

参数:

第一个参数是文件流;第二个参数是偏移量,以第三个参数为基准偏移offset个字节位置。

whence为基准有3个:

SEEK_SET(0):文件开头

SEEK_CUR(1):文件当前位置

SEEK_END(2):文件结尾

offset是偏移量,正整数表示正向偏移,负整数表示负向偏移。

例子:fseek(fp,-1L ,SEEK_CUR) 调整文件指针,距文件当前位置-1个偏移量。

           fseek(fp,100L,SEEK_END) 调整文件指针,距文件结尾100个偏移量。

返回值:

成功调整文件指针返回0,失败返回其他值,并且失败不改变文件指针指向。

1、Linux系统——open接口

C语言与Linux系统文件操作函数大全_第1张图片

 open接口有2个,拿第二个来说。

参数:

第一个参数是文件名(包含路径),第二个参数是flags,是打开文件的方式,有一下几种:

O_WRONLY:只写                        O_RDONLY:只读

O_RDWR:读写                            O_CREAT:创建文件

O_TRUNC:已经存在文件清空内容        O_APPEND:追加写入

可以组合使用,用 | 组合。

例子:

 19     int fd = open("./bite.txt",O_RDWR | O_CREAT,0664);                                                                           
 20     if(fd < 0){                                                                                                                  
 21         perror("open");                                                                                                          
 22         return -1;                                                                                                               
 23     }  

返回值:

返回一个整数文件描述符fd,>0 打开成功;<0 打开失败。

2、Linux系统——write接口

write接口向打开的文件中写入数据。

参数:

第一个参数fd:文件描述符,代表要写入的文件;第二个参数buf,要写入的数据缓冲区,注意void*,按字节写入;第三个参数count,要写入的字节数。

 返回值:

写入成功,返回写入的字节数;失败,返回-1.

例子:

 5     const char* data = "i like Linux!";
 26     ssize_t ret = write(fd,data,strlen(data));
 27     if(ret == -1){
 28         printf("write error\n");
 29         return -1;
 30     }

3、Linux系统——read接口

read接口读取文件中的数据放到缓冲区。

参数:

第一个参数fd:文件描述符,代表要读取的文件;第二个参数buf,要放入数据的缓冲区,注意void*;第三个参数count,字节数。

 返回值:

读取成功,返回读到的字节数;失败,返回-1;到达文件结尾返回0

例子:

 34     char buf[1024];
 35     ssize_t _ret = read(fd,buf,strlen(buf)-1);
 36     if(_ret == 0){
 37         printf("end of file\n");
 38         return -1;
 39     }
 40     else if(_ret < 0){
 41         perror("read error\n");
 42         return -1;
 43     }
 44     fprintf(stdout,"%s\n",buf);

4、Linux系统——lseek接口

 重新定位流上的文件指针。

参数与上文fseek几乎一致,不再赘述。

返回值:

off_t :指示文件偏移量,32位下为long类型,默认为32位整数,64位下为long long,64位整数。

成功返回从头部开始计算的位置偏移量(以字节为单位);错误返回-1 。

例子:

  lseek(fd,0,SEEK_SET);

你可能感兴趣的:(C语言,Linux,文件操作,open,fopen)