So far we have considered only terminal I/O. Many times programs read large sets of input data from data files, and write large amounts of output results to another files; these results can be subsequently used by other programs, which, for example, analyze them. File data are permanent, in the sense that they remain after the program who produced them finishes.