Answer: ANSI C standard provides specific family or set of functions to perform I/O on different types of data. For Character I/O, getchar and putchar family of functions, for text data I/O we have gets and puts family of functions while for binary I/O, library provides fread and fwrite functions.
Members in each family of functions differ in where they obtain input from and where they write output to. For ex. getchar() and putchar() functions deal with individual characters and read from and write to stdin and stdout respectively. While pairs fgetc() and fputc(), getc() and putc() functions read from and write to files. These are prototyped below,
int fgetc(FILE *stream); int getc(FILE *stream); int getchar(void); int fputc(int character, FILE *stream); int putc(int character, FILE *stream); int putchar(int character);
Similarly, functions that perform I/O on text data, read from stdin or some other file and/or write to stdout or some other file. I/O on text data may be formatted line I/O or unformatted line I/O. gets() and puts() family of functions deal with unformatted line I/O i.e. these functions deal with reading and writing strings. printf() and scanf() family of functions perform formatted line I/O. Functions
for unformatted line I/O are prototyped below
char *fgets(char *buffer, int buffer_size, FILE *stream); char *gets(char *buffer); int fputs(char const *buffer, FILE *stream); int puts(char const *buffer);
Prototype of functions for formatted line I/O, firstly input functions
int fscanf(FILE *stream, char const *format, ...); int scanf(char const *format, ...); int sscanf(char *buffer, char const *format, ...);
Notice the ellipsis in each function indicating a variable-length list of pointers. Values converted from input are stored one-by-one into locations pointed to by these arguments.
Functions for line output are prototyped below
int fprintf(FILE *stream, char const *format, ...); int printf(char const *format, ...); int sprintf(char *buffer, char const *format, ...);
Input/Output operations on binary data can be accomplished by a set of two functions prototypes of which are given below
size_t fread(void *buffer, size_t size, size_t count, FILE *stream); size_t fwrite(void *buffer, size_t size, size_t count, FILE *stream);
Notice that buffer is a pointer to area that holds data. size is size of element in the buffer array, count is no. of elements and stream, of course, is where to read from and write to.
We’ll discuss I/O of each type of data in detail in other posts related to I/O fuctions.
Sanfoundry Global Education & Learning Series – 1000 C Tutorials.