标准I/O操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了标准I/O操作相关的知识,希望对你有一定的参考价值。

标准I/O操作:


1、FILE* fopen(const char* path, const char* mode)

      FILE :文件打开的各种状态信息的指针;

      path: 文件路径;注意,目录文件只能以只读形式打开,不能进行写;

      mode:  文件打开的模式: “r”(只读,且文件必须存在),“w”(只写,如果文件不存在,则创建,如果已经存在,则将其长度截断为0,从头写),“a”(表示追加数据到末尾,如果文件不存在,则创建),“r+”,“w+”,“a+”;

      

2、int fgetc(FILE *stream)  从文件或终端中读取一个字节返回,本来应该返回uchar类型,但是函数原型的返回值是int型,所以要转化为扩展为int型的;这个函数既可以从终端读,也可以从文件中读;


3、int getchar(void) 从终端(只能从终端)中读取一个字节,返回时扩展为int型,原因同上;


4、int fputc(int c,FILE* stream);int putchar(int c); 为写入函数,写入是文件必须是可写的;


5、int fseek(FILE* stream, long offset ,int whence)  用于设置读写指针偏移,返回相对于文件起始位置的偏移量大小;


6、int ftell(FILE *stream) 用于返回当前读写指针的位置;


7、void rewind(FILE *stream) 用于读写指针移动到文件的起始位置;


8、char* gets(char *s)从标准输入一行保存在缓冲区,但是永远不要用这个函数;因为未指定缓存区的大小,所以很容易产生缓冲区溢出,造成错误;


9、char* fgets(char *s, int size, FILE* stream) 表示从指定的文件中读取一行,到用户指定的缓冲区;返回的指针是指针s移动后的位置;

      注意: fgets()只适用于读不含‘\0’的文本文件,因为fgets()会自动在末尾加‘\0’,但是,如果用户在输入中也输入‘\0’,那么就无法识别是fgets自己加的,还是用户加的;另外,由于’\0‘的ASIIC 是0x00,所以在不能读二进制文件;


10、int fputs(const char *s, FILE* stream); 将字符串写入到文件中,不含末尾的’\0‘;

        int puts(const char* s); 将字符串写入到标准输入中;


11、对文件进行的任何操作,都要先明白读写指针在什么地方,这个决定了你读写的位置;


12、fread(void *str, size_t size, size_t nmemb, FILE* stream) 从文件stream 中读取nmemb 个大小为size字节大小的数据到 str;

       fwrite(void *str, size_t size, size_t nmemb, FILE* stream) 同上,是写入文件;


13、全缓冲:等待缓冲区写满以后,才写入内核;常规文件用此方式;

        行缓冲:等待有换行符的时候,就写入内核;标准输入输出用这种方式;

        不带缓冲:用户每次写操作都要调用系统调用,写入内核;

        int fflush(FILE* stream) 用于将缓冲区的数据立即写入内核;成功返回0;


14、标准文件流:FILE:         stdin ,stdout, stderr;


本文出自 “10891086” 博客,请务必保留此出处http://10901086.blog.51cto.com/10891086/1917529

以上是关于标准I/O操作的主要内容,如果未能解决你的问题,请参考以下文章

Unix环境高级编程标准I/O库

C++标准I/O库:iostream, fstream, sstringstream

linux 标准I/O函数详解

第五章 标准I/O

标准I/O与管道

文件I/O与标准I/