您的位置:首页 > 其它

标准I/O库

2016-04-24 18:17 225 查看
标准I/O库及其头文件stdio.h为底层I/O系统调用提供了一个通用的接口。标准I/O库中,与底层文件描述符对应的是流,它被实现为指向结构FILE的指针。

在启动程序时,有3个文件流是自动打开的,它们时stdin,stdout和stdout。

1。fopen函数

fopen函数类似于底层的open系统调用。如果你需要对设备进行明确的控制,那最好使用底层系统调用,因为这可以避免用库函数带来的一些潜在问题,如输入输出缓冲。

#include<stdio.h>

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

mode 指定文件的打开方式:

“r”或“rb”:以只读方式打开

“w”或“wb”:以写方式打开,并把文件长度截断为零。

“a”或“ab”:以写方式打开,新内容追加 在文件尾。

“r+”或“rb+”或“r+b”:以更新方式打开(读写)

“w+”或“wb+”或“w+b”:以更新方式打开,并把文件长度截断为零。

“a+”或“ab+”或“ab+”:以更新方式打开,新内容追加到文件尾。

字母“b”表示文件是一个二进制文件而不是文本文件。LINUX并不想MS-DOS那样区分文本文件和二进制文件,

所有文件都是二进制文件。

mode参数必须是一个字符串,而不是一个字符,所以总是应该使用双引号,而不是单引号

fopen在成功时返回一个非空FILE *指针,失败时返回NULL值,NULL在头文件stdio.h中定义。

2。fread函数

#include<stdio.h>

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

数据从文件流stream读到有ptr指向的数据缓冲区里。size参数指定每个数据记录的长度,计数器nitems,给出要传输的记录的个数。

它返回成功读到数据缓冲区的记录个数,而不是字节数。

3。fwrite函数

#include<stdio.h>

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

4。 fclose函数

#include<stdio.h>

int fclose( FILE *stream)

fclose库函数关闭指定的文件stream,使所有尚未写出的数据都写出。

5。fflush函数

fflush库函数的作用是把文件流里的所有未写出的数据立刻写出。

#include< stdio.h >

int fflush ( FILE *stream );

6。fseek函数

#include<stdio.h>

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

fseek 返回的是一个整数,0表示成功,-1表示失败并设置errno指出错误。

lseek返回的时一个off_t数值。

7。fgetc,getc,getchar函数

#include<stdio.h>

int fget( FILE *stream);

int getc( FILE *stream);

int getchar() ;

fgetc函数从文件流里取出下一个字节并把它作为一个字符返回。当它到达文件尾或出现错误时,它返回EOF。

你必须通过ferror或feof来区分这两种情况。

getc和fgetc一样

getchar函数的作用是从标准输入里读取下一个字符。

#include<stdio.h>

int fputc( int c , FILE *stream );

int putc(int c , FILE *steam);

int putchar( int c );

8。fgets和gets函数

#include <stdio.h>

char *fgets( char *s , int n,FILE *stream )

char *gets( char *s)

fget把读到的字符写到s指向的字符串里,直到遇到下面某种情况:遇到换行符,已经传输了n-1个字符,或者到达文件尾。

它会把遇到的换行符也传递到接收字符串里,再加上一个表示结尾的空字节\0。一次调用最多只能传输n-1个字符,因为它

必须把空字节加上以结束字符串。

gets函数类似fgets,只不过它从标准输入读取数据,并丢弃遇到的换行符。它在接收字符串的尾部加上一个null字节。

gets函数对传输字符的个数并没有限制, 可能会溢出自己的传输缓冲区。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: