Linux C编程——基于流的I/O操作

1、基于字符的I/O

基于字符的I/O通常是用来处理单个字符的。

 

(1)字符的输入

以下三个函数用于一次读入一个字符:

#include <stdio.h>

Int getc(FILE *fp);

Int fgetc(FILE *fp);

Int getchar(void);

3个函数的返回:若成功则返回读入字符的值,若已处文件尾端或出错则为EOF

 

(2)字符的输出

#include<stdio.h>

Int putc(int c  ,FILE *fp);

Int fputc(int c ,FILE *fp);

Int putchar(int c);

 

三个函数返回:若成功则为c,若出错则为EOF

 

2、基于行的I/O

当输入中的内容遇到‘\n’换行符的时候,则将流中'\n'之前的内容送到缓冲区中的I/O方式称为基于行的I/O,即每次一行的I/O。

 

(1)行的输入

Fgets 和gets函数实现输入一行字符串

#include<stdio.h>

Char *fgets(char *buf,int n,FILE *fp);

Char *gets(char *buf);

两个函数的返回:若成功则返回缓冲区中的首地址,若已处文件尾或出错则为NULL;

 

(2)行的输出

fputs和puts函数实现输出一行字符串

#include<stdio.h>

Int fputs(const char *buf,FILE *restrict fp);

Int puts(const char *str);

 

3、直接I/O

二进制I/O操作

#include<stdio.h>

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

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

两个函数的返回:读或写的对象数

     fread函数用于执行直接输出操作。参数ptr是指向读取数据的缓冲区的指针,size是读取对象的大小,nmemb表示欲读取的对象的个数,fp是指向要读取的流的FILE结构指针。

   

     fwrite函数用于执行直接输入操作。参数ptr是指向存放将要输入数据的缓冲区的指针,size是写入对象的大小,nmemb表示欲写入的对象的个数,fp是指向要写入的流的FILE结构指针。

 

这些函数有两种常见的用法:

1)读或写一个二进制数组。例如:将一个浮点型数组的第2~5个元素写到一个文件上。:

Float data[10];

if(fwrite(&data[2],sizeof(float),4,fp)!=4)

  printf(“fwrite error !\n”);

 

2)读或写一个结构

struct{

  short count;

 long total;

Char name[NAME_SIZE];

}item;

  if(fwrite(&item,sizeof(item),1,fp)!=1)

     printf(“fwrite error !\n”);

 

 

3、格式化I/O

基于流的I/O操作的一个最大的特点就是它可以实现格式化的输入输出(基于字符和行的I/O,以及直接I/O统称为非格式化I/O)。格式化I/O是最常见的I/O方式,比如我们常见的printf和scanf。

(1)格式化输出

执行格式化输出处理的是4个printf函数

#include<stdio.h>

Int printf(const char *format,……);

Int fprintf(FILE *fp,const char * format,……);

两个函数的返回:若成功则为实际输出的字符数,若输出出错则为负值;

 

Int sprintf(char *str,const char*format,……);

Int snprintf(char *str,size_t size,const char *format,……);

两个函数的返回:若成功则为实际存入缓存的字符数,若出错则为负值

 

(2)格式化输入

执行格式化输入处理的是3个scanf函数

#include<stdio.h>

 

Int scanf(const char *format);

Int fscanf(FILE *fp,const char *format,……);

Int sscanf(char *str,const char *format,……);

3个函数的返回:若成功则返回指定的输入项数,若输入出错,或在任意变换前已至文件尾端则为EOF

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/mafang9601/article/details/82532165
今日推荐