Input/Output with Files in C

Input/Output with Files in C

File I/O in C A file is a sequence of ASCII characters stored on some device. Allows us to process large amounts of data without having to type it in each time or read it all on the screen as it scrolls by. We use “FILE” structure to do file I/O Input/Output FILE structure has information such as: with Files in C Location of the file Whether the file is being read or written CIT 593 Current character position in the file Whether errors or end of file has occurred Diana Palsetia Hence we declare file handler or pointer to do any operations FILE *infile; Note: The FILE struct is defined in <stdio.h>. CIT593 1/16 CIT593 2 fopen Example of fopen The fopen() function opens the file in a particular mode FILE *fopen(const char* name,const char* mode); Opening file in.txt to read First argument: name FILE * inputfile = fopen(“in.txt”,"r"); The name of the physical file, or how to locate it on the stdiThibddtthdlitittorage device. This may be dependent on the underlying operating system Second argument: mode Opening file out.txt to write How the file will be used: FILE * outputfile = fopen(“out.txt”,"w"); "r" -- read from the file "w" -- write, starting at the beginning of the file "a" -- write, starting at the end of the file (append) "rb" -- to open an existing binary file for reading Returns a pointer of type FILE ¾ If pointer is NULL (0) then error has occurred in reading the file ¾ Else a non-zero value is returned CIT593 3 CIT593 4 1 Reading and Writing a file fgetc Once a file is opened, it can be read or written using fscanf(), fprintf(), fgetc() respectively int fgetc (FILE * stream); Get the next character from file stream These are just like scanf(),printf(), getc() except an additional argument specifies a file pointer Returns the next character of the file stream and increases the file pointer to point to the following int fscanf(FILE *stream, const char *format, ...); one int fprintf(FILE *stream, const char *format, ...); ¾ The character read is returned as an int value. int fgetc(FILE *stream); If the End Of File has been reached or there has been an error reading, the function returns EOF FILE *infile; ¾ EOF is a macro , usually -1, as ASCII range is 0 FILE *outfile; to 127 ... fprintf(outfile,"The answer is %d\n", x); fscanf(infile, “%d”,&number); CIT593 5 CIT593 6 fclose Main with parameters/arguments Main supports command line parameters int fclose(FILE *stream) In Java The function closes the file associated with the stream . public static void main(String[] args) It returns zero if successful; otherwise, it returns EOF. In C: All internal buffers associated with the stream are int main(int argc, char *argv[]) flushed Or ¾ The content of any unwritten buffer is written int main(int argc, char ** argv) and the content of any unread buffer is discarded By convention argv[0] is name by which program is invoked so argc is Even if the call fails, the stream passed as atleast 1. parameter will no longer be associated with the file CIT593 7 CIT593 8 2 Main with args example Example of File I/O: fileio2.c #include <stdio.h> int main(int argc, char **argv) { /* Open/ create files. */ FILE* f; gcc prog.c int main(int argc, char * argv[ ]) inputfile = fopen(inputname,"r"); /* mode "Read" */ { outputfile = fopen(outputname,"w"); /* mode "Write" */ a.out data.txt char * inputname; if (argc != 2) { if (inputfile == NULL || outputfile == NULL) /* files did not char * outputname; open */ return 1; { } argv: FILE * inputfile; printf("Files could not be opened\n"); argv: FILE * outputfile; return 1; /* quit now */ a.out\0 } f = fopen(argv[1], "r"); int charread = 0; while ((charread = fgetc(inputfile)) != EOF) if (argc != 3) if (f == NULL) { { data.txt\0 { Reads file & gets a printf("Error opening file %s\n", printf("%c", charread); printf("Usage: textcopy inputfile fprintf(outputfile, "%c", charread); character from file till argv[1]); outputfile.\n"); } EOF is encountered return 1; return 1; } /* close the file */ } inputname = argv[1]; if (fclose(inputfile) != 0 || fclose(outputfile) != 0) ……//rest of the code outputname = argv[2]; { What is: printf("Close file error."); } } argv[0][0] = ? return 0; }//end if main argv[1][2] = ? CIT593 9 CIT593 10 Standard Error (stderr) exit(), EXIT_SUCCESS, EXIT_FAILURE Standard error void exit(int status) Terminates a program/process Is another output stream typically used by programs Flushes all output streams, closes all open streams to output error messages or diagnostics status value is 0 to 255 ¾ There are conventions for what sorts of status values certain It is a stream independent of standard output and can programs should return be redirected separately ¾ The most common convention is simply 0 for success and 1 for failure The usual destination is the text terminal EXIT_FAILURE ¾ Note: Redirecting standard output does not Unsuccessful termination for exit() redirect standard error Non-zero value EXIT_SUCCESS Successful termination for exit() Example: Zero value fprintf(stderr, "Can't open input file!\n"); Include stdlib.h to use the above CIT593 11 CIT593 12 3 Carriage Return (CR) control character Line Feed (LF) control character In a mechanical typewriter In mechanical typewriters with levers A dial/knob advances the paper one line without The lever allows the printing head to return to the moving the print head left side of the paper after a line of text had been typed IltitIn electronic typerwr itkbditer or keyboards Adopted in electronic typewriters and keyboards It is the LF control character that moves the position of the cursor to the next line as CR character. Keys generating carriage return are keys with the following symbol/words: ASCII value for LF is 10 (in dec) or 0A(in hex) ¾ Enter ¾ Return CR+LF = used as line termination sequence ASCII code for CR is 13 in decimal or 0D in hex Window OS uses CR+LF to indicate line termination in the text files CIT593 13 CIT593 14 Newline (“\n”) About Files Ultimately every thing in the computer is stored as 0’s & 1’s In Unix/Linux OS, line feed is used as line Types of files: termination sequence 1. Text files can be displayed, edited by regular file editors Implic it C R be fo re LF i s a unix inv en ti on , pr obabl y Contain only ASCII characters as an economy, since it saves one byte per line. Divided into lines; end of line marked by a control character e.g. CR, LF, or CR+LF a C source file is an example of a text file C language uses LF to terminate lines and called it the newline “\n” for convenience or 2. Non-text files readability. Hence ascii value for \n is same Do not print or display with regular text editor as LF i.e. x0A or 10 ASCII + other information (pics,diagrams etc) ¾ 1.Formatted files such as pdf, doc, ppt ¾ 2. Binary & executable files e.g. a.out Contain arbitrary bit patterns CIT593 15 CIT593 16 4 Line Termination in Text Files Line Termination Solution UNIX text files Use editors that can handle files End of line marked by LF With whatever line endings you have or want Win dows tex t files E.g. Notepad ++ End of line marked by CR followed by LF Write your own tools Macintosh text files Dave Matuszek’s fixline.jar End of line marked by CR ¾ Fixes line ending based on the system Note: Variation in line termination can be problematic when exchanging data between systems of different types. CIT593 17 CIT593 18 5.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    5 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us