<P> In most operating systems predating Unix, programs had to explicitly connect to the appropriate input and output devices . OS - specific intricacies caused this to be a tedious programming task . On many systems it was necessary to obtain control of environment settings, access a local file table, determine the intended data set, and handle hardware correctly in the case of punch card reader, magnetic tape drive, disk drive, line printer, card punch, or interactive terminal . </P> <P> One of Unix's several groundbreaking advances was abstract devices, which removed the need for a program to know or care what kind of devices it was communicating with . Older operating systems forced upon the programmer a record structure and frequently non-orthogonal data semantics and device control . Unix eliminated this complexity with the concept of a data stream: an ordered sequence of data bytes which can be read until the end of file . A program may also write bytes as desired and need not (and can't easily) declare how many there will be, or how they will be grouped . </P> <P> Another Unix breakthrough was to automatically associate input and output to terminal keyboard and terminal display, respectively, by default--the program (and programmer) did absolutely nothing to establish input and output for a typical input - process - output program (unless it chose a different paradigm). In contrast, previous operating systems usually required some--often complex--job control language to establish connections, or the equivalent burden had to be orchestrated by the program . </P> <P> Since Unix provided standard streams, the Unix C runtime environment was obliged to support it as well . As a result, most C runtime environments (and C's descendants), regardless of the operating system, provide equivalent functionality . </P>

What is standard input and standard output in linux