基础IO-文件IO操作

目录

1.C语言文件IO相关操作(库函数IO接口)

2. 系统调用IO接口


1.C语言文件IO相关操作(库函数IO接口)

 fopen--打开文件,返回一个文件的操作句柄,有了句柄才能对指定的文件进行操作。

        FILE *fopen(char *pathname, char *mode);

 参数说明:

        pathname:文件的路径

        mode:文件的打开方式

                r     只读打开(文件不存在会报错)

                w    只写打开(文件不存在则创建,存在则截断长度为0,丢弃原有内容)

                a     追加写打开(文件不存在则创建,存在则写入数据总是写入到文件末尾)

                r+    读写打开(文件不存在会报错)

                w+   读写打开(文件不存在则创建,存在则截断长度为0,丢弃原有内容)

                a+   读写打开(文件不存在则创建,存在则写入数据总是写入到文件末尾)

                b      以二进制形式打开(默认不使用b,则使用的是文本方式打开,对一些特殊字符的处理有区别,例如:\n->\r\n)以文本形式打开文件,有可能会造成读到的数据与文件实际的数据有差别。

fwrite--向文件写入数据

        size_t fwrite(char *data,int bsize, int nmem,FILE  *fp);

参数说明:

        data:指向保存读写数据的内存的指针,可以指向数组,变量,结构体等

        bsize:表示每个数据块的字节数

        nmem:表示要读写的数据块的个数

        fp:表示文件指针

fread--从文件中读取数据

        size_t fread(char *buf,int bsize,int nmem,FILE *fp);

fclose--关闭文件

        int fclose(FILE *fp);

fseek--跳转当前的读写位置

        int fseek(FILE *fp, int offset, int whence)

参数说明:

        whence:文件读写位置的起始偏移位置

                SEEK_SET   文件的起始位置

                SEEK_CUR   当前的读写位置

                SEEK_END    文件的末尾位置

实例: 

#include <stdio.h>
#include <string.h>
 
 int main()
 {
   FILE *fp=fopen("./bite.txt","w+");//以读写的方式打开一个文件
   if(fp==NULL){
     perror("fopen errror");
     return -1;
   }
   char *data="linux so easy!";
   size_t ret=fwrite(data,1,strlen(data),fp);//向文件中写入数据
   if(ret!=strlen(data))
   {
     perror("fwrite error");
     fclose(fp);
     return -1;
   }
   fseek(fp,0,SEEK_SET);//由于前边w+打开文件写入数据读写位置变到文尾,因此将当前的读写位置跳 
                        //   转到文首
   char buf[1024]={0};
   ret=fread(buf,1,1023,fp);//从文件中读取数据
   if(ret==0)                                                                           
   {
     if(feof(fp))
     {
      printf("end of file");
     }
     if(ferror(fp))
     {
       perror("fread error");
       fclose(fp);
       return -1;
     }
   }
   printf("%s\n",buf);//在标准输出中打印读到的数据
   fclose(fp);//关闭文件
   return 0;
 }

 结果:

 

2. 系统调用IO接口

 接口:open        write       read         Iseek       close

 int open(char *pathname, int flag, int mode);--打开文件

参数说明:

        pathname:要打开的文件路径名

        flag:文件的打开方式,打开方式决定了能够对文件进行什么样的操作

                必选项:O_RDONLY(只读)       O_WRONLY(只写)       O_RDWR(读写),只能选择其一,不能同时使用

                可选项:O_CREAT  -文件不存在则创建    O_TRUNC -截断文件,丢弃原有数据

                                O_APPEND -追加写

                例"w+" -- O_RDWR|O_CREAT|O_TRUNC

        mode:当O_CREAT被使用时,就一定要设置第三个参数mode--用于设定被创建文件的访问权限0664

        0664 --需要特别注意,前边的0不能省略,会涉及到特殊权限位的设置

        给定的权限不一定是实际得到的权限,实际的文件权限会受到umask的影响

        实际得到的权限:给定的权限&(~umask)

        返回值:成功返回文件描述符fd,失败返回-1

ssize_t write(int fd, char *buf,size_t len);--向文件中写入数据

参数说明:

        fd:open打开文件时返回的操作句柄--文件描述符

        buf:要写入文件的数据的所在空间首地址

        len:要写入的数据长度(以字节为单位)

        返回值:成功返回实际读取到的数据长度;失败返回-1

 ssize_t read(int fd, char *buf,size_t len);--从文件中读取数据

 参数说明:

        fd:open打开文件时返回的文件描述符

        buf:一开空间的首地址,用于存放读取到的数据

        len:要读取的数据长度(这个长度不能大于buf空间的大小,避免越界)

        返回值:成功返回实际读取到的数据长度;0表示读到了文件末尾;失败返回-1 

 off_t Iseek(int fd, off_t offset, int whence);--跳转当前读写位置   

 参数说明: 

        fd:文件描述符

        offset:偏移量

        whence:偏移起始位置   SEEK_SET; SEEK_CUR; SEEK_END;

        返回值:当跳转后,读写位置相对于文件起始位置的偏移量

 int close(int fd);--关闭文件

 参数说明:

        fd:文件描述符

实例:

#include <stdio.h>
 #include <fcntl.h>
 #include <string.h>
 #include <unistd.h>

 int main()
 {
   int fd=open("./bite.txt",O_CREAT|O_RDWR|O_TRUNC,0664);
   if(fd<0)
   {
     perror("open error");
     return -1;
   }
   char *data="i like linux!";
   ssize_t ret=write(fd,data,strlen(data));
   if(ret<0)
   {
      perror("write error");
      close(fd);
      return -1;
   }
   lseek(fd,0,SEEK_SET);
   char buf[1024]={0};
   ret=read(fd,buf,1023);
   if(ret<0)
   {
     perror("read error");
     close(fd);
     return -1;
   }
   printf("%s\n",buf);                                                                
   close(fd);
   return 0;
 }

结果:

 

 

        

 

 

 

        

      

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值