apue标准IO和系统IO

目录

一、标准IO

1.fopen       

2.fclose       

3.fgetc        

4.fputc       

5.fgets        

6.fputs       

7.fread        

8.fwrite        

9.fseek        

10.ffulsh

二、系统IO

1.open

2.close

3.read

4.write


一、标准IO

1.fopen       

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

        以mode的形式打开pathname所指向的文件,将指向文件的指针返回。

        返回:成功返回文件,文件打开失败返回NULL。

例:FILE *fp;
fp = fopen("wenjianming",r);
if(fp==NULL)
{
    perror("fopen()");
}

        errno:错误类型的标号

        perror:最后一次的错误信息

        strerror:将错误类型标号转换成错误信息

mode的类型:

r以只读方式打开文件,文件必须存在。
r+以读写方式打开文件,文件必须存在。
打开只写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。
w+打开读写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。
a附加的方式打开只写文件。若文件不存在,则会创建该文件;如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留
a+附加方式打开可读/写的文件。若文件不存在,则会创建该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留

2.fclose       

         int fclose(FILE *stream);

        连续打开文件不关闭时,最多打开1024个文件

        返回:如果流成功关闭,fclose 返回 0,否则返回EOF。

例:fclose(fp);

3.fgetc        

        int fgetc(FILE *stream);

        从文件的第一个字符,一个字节向后读取,stream向后移动。

        返回:成功返回字符,如果到了文件的结尾或遇到读错误,将返回EOF。

例:fgetc(fp);

4.fputc       

         int fputc(int c, FILE *stream);

         将字符c写到文件指针fp所指向的文件的当前写指针的位置。

        返回:在正常调用情况下,函数返回写入文件的字符的ASCII码值,出错时,返回EOF

例:fputc(c,fp);

5.fgets        

char *fgets(char *s, int size, FILE *stream);

        从指定的流 stream 读取一行,并把它存储在s所指向的字符串内。当读取size-1个字符时,或者读取到换行符时,或者到达文件末尾时,停止。

        返回 :如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。如果发生错误,返回一个空指针。

例:char a[n];

fgets(a,n,fp);

6.fputs       

         int fputs(const char *s, FILE *stream);

        把字符串写入到指定的流

        返回:该函数返回一个非负值,如果发生错误则返回 EOF

例:fputs(a,fp);

7.fread        

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

        从stream流中读取nmemb个元素,每个元素大小为size个字节,保存到ptr数组中

        返回:返回成功读取的对象个数,若出现错误或到达文件末尾,则可能小于count。

ptr        ------ 这是指向要被写入的元素数组的指针。

size      ------ 这是要被写入的每个元素的大小,以字节为单位。

nmemb------ 这是元素的个数,每个元素的大小为 size 字节。

stream ------ 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流

例:fread(a,1,32,fp);

8.fwrite        

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

         将ptr数组中nmemb个元素,每个元素大小为size个字节,写入到stream中

        返回:如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。

例:fwrite(a,1,32,fp);

9.fseek        

        int fseek(FILE *stream, long offset, int whence);

        函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(SEEK_SET),(SEEK_CUR),(SEEK_END))为基准,偏移offset个字节的位置。

        返回值:成功,返回0,失败返回非0值,并设置error的值

例:fseek(fp,10,SEEK_END);

10.ffulsh

        int fflush(FILE *stream);
        功能是冲洗流中的信息。    

        缓冲区:暂存空间,大多数情况下,缓冲区的存在是件好事,作用合并系统调用

        行缓冲:stdout,换行时,满了时,强制刷新

        全缓冲:默认,(只要不是终端设备,全采用全缓冲模式)满了时,强制刷新

        无缓冲:stderr,需要立即输出

例:fflush(fp);

二、系统IO

1.open

        int open(const char *pathname, int flags);
        int open(const char *pathname, int flags, mode_t mode); 

        将pathname以flags形式打开

        pathname 字符串表达式,指定文件名

        flags

O_RDONLY只读方式
O_WRONLY只写方式
O_RDWR可读可写方式
O_APPEND

从文件尾部开始读写文件,所写入的数据追加到文件尾

O_TRUNC

若文件存在并且以可写的方式打开时,将文件长度清为0

O_CREAT若路径中的文件不存在则自动建立该文件

                               

        mode 文件的权限类型

例:open(fp,O_RDONLY);

open(fp,O_WRONLY | O_CREAT,0664);

2.close

         int close(int fd);

例:close(fp);

3.read

        ssize_t read(int fd, void *buf, size_t count);

        count是读取的字节数,数据保存在缓冲区buf中,同时文件的当前读写位置向后移

        成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0。

例:read(fp,a,5);

4.write

         ssize_t write(int fd, const void *buf, size_t count);
        将buf中count个字节数写入到fd中

        返回:如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1,存入errno中

例:write(fp,a,5);

注:本文是通过听李慧芹老师上课记的笔记,如有理解不到位请多多包涵,也请多多指教

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RLC214

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值