天天看点

apue标准IO和系统IO一、标准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

apue标准IO和系统IO一、标准IO二、系统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 若路径中的文件不存在则自动建立该文件
apue标准IO和系统IO一、标准IO二、系统IO

        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);

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