This refer to buffering in user space performed by application or standard library.  The C language does not provide any advanced I/O function.  In turn, the standard C library (stdio) provides a platform independently user buffering solution.  As buffering is maintained in user space rather than kernel space, there is a performance improvement. Standard I/O calls are not system calls.
The standard I/O routines use file pointer instead of file descriptor.  Inside C library, file pointer is mapped to file descriptor.  File pointer points to FILE typedef.
e.g. FILE * fopen(const char *path, const char *mode)
Mode includes
r = read
w = write
a = append
r+ = read and write, position at the start of file
w+ = read and write, truncate the file to size 0, positon at start of file
a+ = read and write, create file if does not exist, position at end of file
Other stdio routines include
fdopen - open using fd
fgetc/fputc - read/write a character from stream
ungetc - put a read character back to stream.  If multiple characters are unget, they are read in reverse order.  In other words, the last ungetc char will be returned first.  POSIX allows only 1 push back.  If a seek is performed before read, all pushed back characters will be lost.
fgets/fputs - read/write a string.  For read, a \0 character will be place at the end of the buffer.  Reading stop at EOF or a newline character is reached.  Newline \n is stored in the provided buffer
fread/fwrite - read/write specified number of elements (structures) from file.  This is reading the file as binary data.
fseek - seek to a particular position in the file
fsetpos - similar to seek.  This function is provided mainly for non-UNIX platform with have complex type representating stream positon.
rewind - reset the sream position to start of file
ftell - return the current stream position
fgetpos - pair with fsetpos above
fflush - write data from buffer to kernel space.  No gurarantee that the data are flushed to disk.  Issue fsync() after the flush to ensure data are written to disk.
fileno - obtain fd of a stream
 
No comments:
Post a Comment