Linux/Unix C 编程 标准I/O函数(2):输入输出函数

#include <stdio.h>
输入函数:int getc(FILE *fp), int fgetc(FILE *fp), int getchar(void), char *fgets(char * buf, FILE *fp), char *gets(char *buf),size_t fread(void *ptr, size_t szie, size_t nobj, FILE *fp)。
输出函数:int putc(int c, FILE *fp), int fputc(int c, FILE *fp), int putchar(int c),     int fputs(const char *str, FILE *fp), int puts(const char *str),size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *fp)。

其中:
getc,fgetc,getchar,putc,fputc,putchar 函数用于一次一个字符输入输出。

fgets,gets,fputs,puts 用于一次一行输入输出。

fread, fwrite 用于读写一个二进制数组或者一个结构。

函数 getchar==getc(stdin),putchar==putc(c, stdout)。
getc,putc 两个函数可实现为宏,fgetc 和 fputc 不能实现为宏。

gets 是不安全的,原因如果读到的字符数如果大于缓冲区长度,因为不能设置缓冲区长度,因此可能会溢出,故不推荐使用。

puts 是安全的,将一个以null结尾的字符串写到标准输出后再将一个换行符写到标准输出。

fgets 必须指定缓冲区长度,读取(指定长度-1)个的字符串,以null字符结尾。函数将读到下一个换行符为止,但不会读取超过(指定长度-1)个字符,如果一次无法读完一行,则返回的不是一行,而是(指定长度-1)个字符,再次调用fgets将会从未读字符位置读取。

fputs 将一个以null结尾的字符串写到指定流,null不写出。通常 null 前面是一个换行符,但并不要求一定是。

fread,fwrite 读写二进制数组或者结构体,如:

将一数组中的第2-5个元素写入文件:
float data[10];

fwrite(&data[2], sizeof(float), 4, fp); // &data[2]开始写入的位置, sizeof(float)要写入每个数据长度,4为要写入的数量。。。

读取一个结构体:
struct{
int count;
char szmsg[1024];
}item;

fread(&item, sizeof(item), 1, fp ); // &item 结构体指针,长度,数量。。。

使用标准I/O库的输入输出函数由于数据量的大小,可能效率不高,如 fgets和fputs 要在内核和标准I/O之间复制一次数据,然后再在标准I/O和用户程序之间再复制一次。因此可考虑使用其它快速I/O库版本。

你可能感兴趣的:(编程,C++,c,unix,C#)