1 / 21

C I/O

C I/O. Stream. A logical model to simplify and unify the complicated I/O behaviors Analogy: unify various device and resource with the same interface – files Stream Stream is a sequence of lines A line is a sequence of characters ending with newline. I/O Levels.

mkenny
Download Presentation

C I/O

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C I/O

  2. Stream • A logical model to simplify and unify the complicated I/O behaviors • Analogy: unify various device and resource with the same interface – files • Stream • Stream is a sequence of lines • A line is a sequence of characters ending with newline

  3. I/O Levels C stdio Library (Formatted) FILE * wrapper, printf(), fprintf(), scan(), … C stdio Library (Standard) FILE * wrapper, fopen(), fread(), fwrite(), …Buffered I/O UNIX System Call C API File descriptor, open(), read(), write(), …Unbuffered I/O UNIX System Service Routines

  4. C Standard I/O • From the standard IO ( stdin/ stdout ) --- • int getchar(void); • int putchar(int c); • Working with strings …. • char *gets(char *str); • int puts(const char *str);

  5. Working with files • The access to the file (I.e. specifying to/from which file we want to write/read) is done via pointers • These pointers are of type FILE • FILE *f1 ; • Every file has to be open before first access, and close • FILE *f1 =fopen( Which file, for what….) • Example: FILE fin = fopen("data.in", "r"); • Read from f1 • fclose(f1)

  6. Special ``files'' • fprintf("Hello world\n") is-the-same-as • fprintf( stdout, "Hellow world\n"); • fcanf("%d", &k ) is-the-same-as • fscanf(stdin, "%d", &k); • fprintf( stderr, "Error message number 17\n") • prints to the standard output, unless redirected

  7. File I/O • FILE *fopen(const char *filename, const char *mode); • Binary stream • Text stream • newline  carriage return (CR) + linefeed (LF) • int fclose(FILE *stream); • int feof (FILE *stream); (did we reach EOF ?) • Int ferror (FILE *stream) (Is there a problem with the file ) • int fflush(FILE *stream); (flush all buffers) • remove(filename) ; rename(filename);

  8. File I/O • FILE *fopen("file1.dat", "code"); • Code is - • "r" -read • "w" write (create new file if not exist) • "a" append • "r+" update (format - later ) • "w+ creare text file for for update, discard previous context if exists • "a+" append

  9. Lets make some order • For many applications, it is enough to access filesequentially, thus writing at the end of the file, and reading sequentially from the beginning (fscanf, fprintf are usually enough) • In other applications, a random access is needed. In this case we need to re-position the ``disk-head'' for future read/write. • In either case the disk-head moves while reading/writting

  10. File I/O (cont.) • int fread(void *ptr, int size, int nmemb, FILE *stream); E.G. num = fread(inp_array, sizeof(student_struct), 25, inp_file ); Returns the number of iterms read. • int fwrite(const void *ptr, int size, int nmemb, FILE *stream); • int fseek(FILE *stream, long int offset, int WRT); • Locate the ``disk head'' in certain offset (get it ready for the next read/write) • fseek( file1, 30, SEEK_SET ) Places the header 30 chars after the beginning of the file

  11. File I/O (cont.) • int getc(FILE *stream); • int putc(int c, FILE *stream); • char *fgets(char *str, int n, FILE *stream); Reads at mostn-1 chars from stream, and locates them at str (note - no check that enough room). Reads until the newline. • int fputs(const char *str, FILE *stream);

  12. Formatted I/O • int fprintf(FILE *stream, const char *format, ...); • int printf(const char *format, ...); • int sprintf(char *str, const char *format, ...);prints into a string • int fscanf(FILE *stream, const char *format, ...); • int scanf(const char *format, ...); • int sscanf(const char *str, const char *format, ...); Reads from a string (formatted)

  13. Format String for printf() • Normal characters: “abc” • Special characters: “abc\n” • \n -- newline • \t -- tab • \r -- carriage return • \\ -- backslash character • \” - double-quote • \’ - single-quote • Conversion specification: “abc %d\n”

  14. Conversion Specification • %[flags][width][.precision][modifier][type] • Flags: -, +, space, 0, # • Width: minimum field width • Precision • Integer: minimum digits to printed (padded with 0 when necessary) • Float: number of digits after the decimal point • Float (g, G): number of significant digits to print • String: max number of characters to display • Modifier • h: short (for integer) • l: long (for integer) • L: long double (for float)

  15. Conversion Specification (cont.) • Conversion Type • %d -- signed decimal integer • %u -- unsigned decimal integer • %x -- hexadecimal integer (characters in lower-case) • %X -- hexadecimal integer (characters in upper-case) • %s -- null-terminated string • %f -- floating-point number • %p -- pointer • %% -- percent sign (doesn’t consume parameter)

  16. Varying Width or Precision • *: value is specified by the next argument • printf() returns the number of characters printed. • printf(“%.*s”, 3, “hello world”); • Output: hel • Return: 4 • printf(“%*.*f”, 20, 2, 1234.56789); • Output: 1234.57 • Return: 21

  17. Format String for scanf() • Conversion Specifier: input field, stored in the corresponding argument • Other characters: must be matched from the input, but are not stored in arguments • If the input does not match then the function stops scanning and returns. • Whitespace matches any amount of whitespaces in the input, including none. • [ ] matches a sequence of characters from those between the brackets.

  18. scanf() Return Value • Successful: number of successfully matched and assigned input items • Input ends before the 1st match: EOF • Read error: EOF (errno set)

  19. strtok() • char *strtok(char *s, char *delim) • Break a string into tokens by multiple calls to strtok(). • Original string s is modified (‘\0’ is inserted) • Return pointers pointing to the next token

  20. strtok char *p, s1[]="HelloWorldWhatAnNiceDayIsToday", s2[]="HWANDNDIT" ; • p=strtok(s1,s2) ; • do { printf("Next Token: %s\n", p); • }while( (p=strtok(NULL,s2) ) != NULL ) ; • Next Token: ello • Next Token: orld • Next Token: hat • Next Token: n • Next Token: ice • Next Token: ay • Next Token: s • Next Token: oday

  21. Acknowledgement • John H. Hartman, Classnotes for Csc352-Spring03, CS Dept., University of Arizona, 2003 • Brian W. Kernighan, Dennis M. Ritchie, The C Programming Language (2nd Ed.), Prentice Hall, 1988

More Related