SlideShare a Scribd company logo
1 of 8
File Operations
These function prototypes are in <stdio.h>: the program must #include <stdio.h>.

The value EOF (indicates end-of-file) is defined in <stdio.h>. Its value is usually -1, but this
should not be relied upon.

The data type FILE is a struct type defined in <stdio.h>. A stream is a pointer-to-FILE, and
comprises a buffer plus a file. The streams stdin, stdout and stderr are automatically opened
when a program including <stdio.h> is run. Unless redirected, stdin is connected to the
keyboard, stdout and stderr to the screen. When program execution ends, all open streams are
automatically closed.



FILE *fopen(const char *filename, const char *mode);

       This opens the file filename. The mode mode can be "r" for reading, "w" for writing, or
       "a" for appending. It returns a stream, or NULL if the file cannot be opened.

int fflush(FILE *stream);

       Flushing an output stream causes any unwritten data in the buffer to be written. On an
       input stream, the effect is undefined (but usually clears the buffer). The return value is
       normally zero, or EOF for a write error.

int fclose(FILE *stream);

       This closes stream. For an output stream, any buffered data is first written. For an input
       stream, any unread data is discarded. It normally returns zero, or EOF for an error.

int remove(const char *filename);

       This deletes the file filename. It normally returns zero, or non-zero for an error.

int rename(const char *oldname, const char *newname);

       This renames the file oldname to newname. It normally returns zero, or non-zero for an
       error.

int fprintf(FILE *stream, const char *format, ...);

       This acts exactly like printf except that the data is written to stream, rather than
       stdout. It normally returns the number of characters written, or a negative value for an
       error.
int fscanf(FILE *stream, const char *format, ...);

      This acts exactly like scanf except that the data is read from stream, rather than stdin.
      It normally returns the number of input items converted and assigned, or EOF for an error.

int fgetc(FILE *stream);

      This normally returns the next character read from stream (as an int), or EOF for an
      error. (The char is converted to an int because EOF is usually -1, while unsigned char
      is usually from 0 to 255 so could not be used to return EOF.)

char *fgets(char *s, int n, FILE *stream);

      This reads a maximum of n - 1 characters into the array s. It stops if a newline ('n') is
      found. The newline is included in the array. The array is terminated by the null character
      '0'. It returns s (a pointer-to-char), or NULL for an error.

int fputc(int c, FILE *stream);

      This writes the character c (converted to unsigned char) to stream. It normally returns
      c, or EOF for an error.

int fputs(const char *s, FILE *stream);

      This writes string s to stream. (Note: unlike puts, fputs does not add a newline 'n' to
      the end of s.) It normally returns a non-negative value, or EOF for an error.

void rewind(FILE *stream);

      This "rewinds" stream back to the start of the file. It does not return a value.

int feof(FILE *stream);

      This normally returns zero, or non-zero if the end-of-file marker for stream has been
      reached.
Creating a file and output some data

In order to create files we have to learn about File I/O i.e. how to write data into a file and how to
read data from a file. We will start this section with an example of writing data to a file. We
begin as before with the include statement for stdio.h, then define some variables for use in the
example including a rather strange looking new type.

/* Program to create a file and write some data the file */
#include <stdio.h>
#include <stdio.h>
main( )
{
     FILE *fp;
     char stuff[25];
     int index;
     fp = fopen("TENLINES.TXT","w"); /* open for writing */
     strcpy(stuff,"This is an example line.");
     for (index = 1; index <= 10; index++)
        fprintf(fp,"%s Line number %dn", stuff, index);
     fclose(fp); /* close the file before ending program */
}

The type FILE is used for a file variable and is defined in the stdio.h file. It is used to define a
file pointer for use in file operations. Before we can write to a file, we must open it. What this
really means is that we must tell the system that we want to write to a file and what the file name
is. We do this with the fopen() function illustrated in the first line of the program. The file
pointer, fp in our case, points to the file and two arguments are required in the parentheses, the
file name first, followed by the file type.

The file name is any valid DOS file name, and can be expressed in upper or lower case letters, or
even mixed if you so desire. It is enclosed in double quotes. For this example we have chosen the
name TENLINES.TXT. This file should not exist on your disk at this time. If you have a file
with this name, you should change its name or move it because when we execute this program,
its contents will be erased. If you don’t have a file by this name, that is good because we will
create one and put some data into it. You are permitted to include a directory with the file
name.The directory must, of course, be a valid directory otherwise an error will occur. Also,
because of the way C handles literal strings, the directory separation character ‘’ must be
written twice. For example, if the file is to be stored in the PROJECTS sub directory then the
file name should be entered as “PROJECTSTENLINES.TXT”. The second parameter is the
file attribute and can be any of three letters, r, w, or a, and must be lower case.

Reading (r)

When an r is used, the file is opened for reading, a w is used to indicate a file to be used for
writing, and an a indicates that you desire to append additional data to the data already in an
existing file. Most C compilers have other file attributes available; check your Reference Manual
for details. Using the r indicates that the file is assumed to be a text file. Opening a file for
reading requires that the file already exist. If it does not exist, the file pointer will be set to
NULL and can be checked by the program.
Here is a small program that reads a file and display its contents on screen.

/* Program to display the contents of a file on screen */
#include <stdio.h>
void main()
{
   FILE *fopen(), *fp;
   int c;
   fp = fopen("prog.c","r");
   c = getc(fp) ;
   while (c!= EOF)
   {
               putchar(c);
               c = getc(fp);
   }
   fclose(fp);
}

Writing (w)

When a file is opened for writing, it will be created if it does not already exist and it will be reset
if it does, resulting in the deletion of any data already there. Using the w indicates that the file is
assumed to be a text file.

Here is the program to create a file and write some data into the file.

#include <stdio.h>
int main()
{
  FILE *fp;
  file = fopen("file.txt","w");
  /*Create a file and add text*/
  fprintf(fp,"%s","This is just an example :)"); /*writes data to the file*/
  fclose(fp); /*done!*/
  return 0;
}

Appending (a)

When a file is opened for appending, it will be created if it does not already exist and it will be
initially empty. If it does exist, the data input point will be positioned at the end of the present
data so that any new data will be added to any data that already exists in the file. Using the a
indicates that the file is assumed to be a text file.

Here is a program that will add text to a file which already exists and there is some text in the
file.

#include <stdio.h>
int main()
{
    FILE *fp
    file = fopen("file.txt","a");
fprintf(fp,"%s","This is just an example :)"); /*append some text*/
     fclose(fp);
     return 0;
}

Outputting to the file

The job of actually outputting to the file is nearly identical to the outputting we have already
done to the standard output device. The only real differences are the new function names and the
addition of the file pointer as one of the function arguments. In the example program, fprintf
replaces our familiar printf function name, and the file pointer defined earlier is the first
argument within the parentheses. The remainder of the statement looks like, and in fact is
identical to, the printf statement.

Closing a file

To close a file you simply use the function fclose with the file pointer in the parentheses.
Actually, in this simple program, it is not necessary to close the file because the system will
close all open files before returning to DOS, but it is good programming practice for you to close
all files in spite of the fact that they will be closed automatically, because that would act as a
reminder to you of what files are open at the end of each program.

You can open a file for writing, close it, and reopen it for reading, then close it, and open it again
for appending, etc. Each time you open it, you could use the same file pointer, or you could use a
different one. The file pointer is simply a tool that you use to point to a file and you decide what
file it will point to. Compile and run this program. When you run it, you will not get any output
to the monitor because it doesn’t generate any. After running it, look at your directory for a
file named TENLINES.TXT and type it; that is where your output will be. Compare the output
with that specified in the program; they should agree! Do not erase the file named
TENLINES.TXT yet; we will use it in
some of the other examples in this section.

Reading from a text file

Now for our first program that reads from a file. This program begins with the familiar include,
some data definitions, and the file opening statement which should require no explanation except
for the fact that an r is used here because we want to read it.

#include <stdio.h>
   main( )
   {
     FILE *fp;
     char c;
     funny = fopen("TENLINES.TXT", "r");
     if (fp == NULL)
               printf("File doesn't existn");
     else {
      do {
       c = getc(fp); /* get one character from the file
*/
             putchar(c); /* display it on the monitor
          */
          } while (c != EOF); /* repeat until EOF (end of file)
        */
        }
       fclose(fp);
   }

In this program we check to see that the file exists, and if it does, we execute the main body of
the program. If it doesn’t, we print a message and quit. If the file does not exist, the system will
set the pointer equal to NULL which we can test. The main body of the program is one do while
loop in which a single character is read from the file and output to the monitor until an EOF (end
of file) is detected from the input file. The file is then closed and the program is terminated. At
this point, we have the potential for one of the most common and most perplexing problems of
programming in C. The variable returned from the getc function is a character, so we can use a
char variable for this purpose. There is a problem that could develop here if we happened to use
an unsigned char however, because C usually returns a minus one for an EOF – which an
unsigned char type variable is not
capable of containing. An unsigned char type variable can only have the values of zero to 255, so
it will return a 255 for a minus one in C. This is a very frustrating problem to try to find. The
program can never find the EOF and will therefore never terminate the loop. This is easy to
prevent: always have a char or int type variable for use in returning an EOF. There is another
problem with this program but we will worry about it when we get to the next program and solve
it with the one following that.

After you compile and run this program and are satisfied with the results, it would be a good
exercise to change the name of TENLINES.TXT and run the program again to see that the
NULL test actually works as stated. Be sure to change the name back because we are still not
finished with TENLINES.TXT.
Byte           Wide
                           Description
 character      character
                        fopen            opens a file
                      freopen            opens a different file with an existing stream
                       fflush            synchronizes an output stream with the actual file
                       fclose            closes a file
 File access
                       setbuf            sets the buffer for a file stream
                      setvbuf            sets the buffer and its size for a file stream
                                         switches a file stream between wide character I/O and narrow
                       fwide
                                         character I/O
   Direct              fread             reads from a file
input/output          fwrite             writes to a file
             fgetc        fgetwc
                                         reads a byte/wchar_t from a file stream
             getc         getwc
             fgets        fgetws         reads a byte/wchar_t line from a file stream
             fputc        fputwc
                                         writes a byte/wchar_t to a file stream
             putc         putwc
Unformatted fputs         fputws         writes a byte/wchar_t string to a file stream
input/output getchar      getwchar reads a byte/wchar_t from stdin
               gets          N/A   reads a byte string from stdin (deprecated in C99, obsoleted in C11)
             putchar      putwchar writes a byte/wchar_t to stdout
             puts           N/A          writes a byte string to stdout
             ungetc      ungetwc         puts a byte/wchar_t back into a file stream
             scanf       wscanf
                                         reads formatted byte/wchar_t input from stdin,
             fscanf      fwscanf
             sscanf      swscanf         a file stream or a buffer
             vscanf      vwscanf
                                         reads formatted input byte/wchar_t from stdin,
             vfscanf     vfwscanf
             vsscanf     vswscanf        a file stream or a buffer using variable argument list
             printf
 Formatted               wprintf
             fprintf                     prints formatted byte/wchar_t output to stdout,
input/output sprintf     fwprintf
                         swprintf        a file stream or a buffer
             snprintf
             vprintf
                         vwprintf
             vfprintf                    prints formatted byte/wchar_t output to stdout,
                         vfwprintf
             vsprintf                    a file stream, or a buffer using variable argument list
                         vswprintf
             vsnprintf
             perror         N/A          writes a description of the current error to stderr
                      ftell              returns the current file position indicator
                    fgetpos              gets the file position indicator
    File
                      fseek              moves the file position indicator to a specific location in a file
 positioning
                    fsetpos              moves the file position indicator to a specific location in a file
                     rewind              moves the file position indicator to the beginning in a file
                   clearerr              clears errors
   Error
                       feof              checks for the end-of-file
  handling
                     ferror              checks for a file error
 Operations          remove              erases a file
on files    rename   renames a file
           tmpfile   returns a pointer to a temporary file
            tmpnam   returns a unique filename

More Related Content

What's hot (19)

Data Structure Using C - FILES
Data Structure Using C - FILESData Structure Using C - FILES
Data Structure Using C - FILES
 
File Management in C
File Management in CFile Management in C
File Management in C
 
File handling-c
File handling-cFile handling-c
File handling-c
 
File in C language
File in C languageFile in C language
File in C language
 
File management
File managementFile management
File management
 
Unit 8
Unit 8Unit 8
Unit 8
 
File handling in c
File handling in cFile handling in c
File handling in c
 
14. fiile io
14. fiile io14. fiile io
14. fiile io
 
File handling in 'C'
File handling in 'C'File handling in 'C'
File handling in 'C'
 
Module 5 file cp
Module 5 file cpModule 5 file cp
Module 5 file cp
 
File handling in C
File handling in CFile handling in C
File handling in C
 
File operations in c
File operations in cFile operations in c
File operations in c
 
C Programming Unit-5
C Programming Unit-5C Programming Unit-5
C Programming Unit-5
 
File handling in c
File handling in cFile handling in c
File handling in c
 
Files in C
Files in CFiles in C
Files in C
 
File Management
File ManagementFile Management
File Management
 
file
filefile
file
 
4 text file
4 text file4 text file
4 text file
 
File handling in C
File handling in CFile handling in C
File handling in C
 

Viewers also liked

A guide to prayer
A guide to prayerA guide to prayer
A guide to prayerHelmon Chan
 
BSidesNYC 2016 - An Adversarial View of SaaS Malware Sandboxes
BSidesNYC 2016 - An Adversarial View of SaaS Malware SandboxesBSidesNYC 2016 - An Adversarial View of SaaS Malware Sandboxes
BSidesNYC 2016 - An Adversarial View of SaaS Malware SandboxesJason Trost
 
Al Fazl International 21st October 2016 - Weekly
Al Fazl International 21st October  2016 - WeeklyAl Fazl International 21st October  2016 - Weekly
Al Fazl International 21st October 2016 - Weeklymuzaffertahir9
 
Khoa van-tay-kaba e10-fingerprint doorlock
Khoa van-tay-kaba e10-fingerprint doorlockKhoa van-tay-kaba e10-fingerprint doorlock
Khoa van-tay-kaba e10-fingerprint doorlockProtocol Corporation
 
So/such and double comparision
So/such and double comparisionSo/such and double comparision
So/such and double comparisionSao Layhour
 
Aceds 2011 E Discovery Conference Brochure Seth Row Voucher
Aceds 2011 E Discovery Conference Brochure Seth Row VoucherAceds 2011 E Discovery Conference Brochure Seth Row Voucher
Aceds 2011 E Discovery Conference Brochure Seth Row VoucherSeth Row
 
Data proyek pt cabaro tahun 2013 2014
Data proyek pt cabaro tahun 2013 2014Data proyek pt cabaro tahun 2013 2014
Data proyek pt cabaro tahun 2013 2014Rizki Akbar
 
Reward week 1 bus681
Reward week 1   bus681Reward week 1   bus681
Reward week 1 bus681E Alden
 
Notating pop music
Notating pop musicNotating pop music
Notating pop musicxjkoboe
 
Descobrindo a linguagem Perl
Descobrindo a linguagem PerlDescobrindo a linguagem Perl
Descobrindo a linguagem Perlgarux
 
How to make sure your money lasts as long as you do…
How to make sure your money lasts as long as you do…How to make sure your money lasts as long as you do…
How to make sure your money lasts as long as you do…sanlamuk
 
Yy (68)
Yy (68)Yy (68)
Yy (68)google
 
The Last Poets-JAZZOETRY & MADE IN AMERIKKKA
The Last Poets-JAZZOETRY & MADE IN AMERIKKKAThe Last Poets-JAZZOETRY & MADE IN AMERIKKKA
The Last Poets-JAZZOETRY & MADE IN AMERIKKKARBG Communiversity
 
Nair jure123456
Nair jure123456Nair jure123456
Nair jure123456nairjure
 

Viewers also liked (20)

A guide to prayer
A guide to prayerA guide to prayer
A guide to prayer
 
BSidesNYC 2016 - An Adversarial View of SaaS Malware Sandboxes
BSidesNYC 2016 - An Adversarial View of SaaS Malware SandboxesBSidesNYC 2016 - An Adversarial View of SaaS Malware Sandboxes
BSidesNYC 2016 - An Adversarial View of SaaS Malware Sandboxes
 
Al Fazl International 21st October 2016 - Weekly
Al Fazl International 21st October  2016 - WeeklyAl Fazl International 21st October  2016 - Weekly
Al Fazl International 21st October 2016 - Weekly
 
Khoa van-tay-kaba e10-fingerprint doorlock
Khoa van-tay-kaba e10-fingerprint doorlockKhoa van-tay-kaba e10-fingerprint doorlock
Khoa van-tay-kaba e10-fingerprint doorlock
 
Hgfhfh
HgfhfhHgfhfh
Hgfhfh
 
BDPA LA: Google Sites
BDPA LA: Google SitesBDPA LA: Google Sites
BDPA LA: Google Sites
 
G3a1 wang2q
G3a1 wang2qG3a1 wang2q
G3a1 wang2q
 
So/such and double comparision
So/such and double comparisionSo/such and double comparision
So/such and double comparision
 
Jalan terindah
Jalan terindahJalan terindah
Jalan terindah
 
Aceds 2011 E Discovery Conference Brochure Seth Row Voucher
Aceds 2011 E Discovery Conference Brochure Seth Row VoucherAceds 2011 E Discovery Conference Brochure Seth Row Voucher
Aceds 2011 E Discovery Conference Brochure Seth Row Voucher
 
A turukott 100tk
A turukott 100tkA turukott 100tk
A turukott 100tk
 
Data proyek pt cabaro tahun 2013 2014
Data proyek pt cabaro tahun 2013 2014Data proyek pt cabaro tahun 2013 2014
Data proyek pt cabaro tahun 2013 2014
 
Reward week 1 bus681
Reward week 1   bus681Reward week 1   bus681
Reward week 1 bus681
 
The silent way
The silent wayThe silent way
The silent way
 
Notating pop music
Notating pop musicNotating pop music
Notating pop music
 
Descobrindo a linguagem Perl
Descobrindo a linguagem PerlDescobrindo a linguagem Perl
Descobrindo a linguagem Perl
 
How to make sure your money lasts as long as you do…
How to make sure your money lasts as long as you do…How to make sure your money lasts as long as you do…
How to make sure your money lasts as long as you do…
 
Yy (68)
Yy (68)Yy (68)
Yy (68)
 
The Last Poets-JAZZOETRY & MADE IN AMERIKKKA
The Last Poets-JAZZOETRY & MADE IN AMERIKKKAThe Last Poets-JAZZOETRY & MADE IN AMERIKKKA
The Last Poets-JAZZOETRY & MADE IN AMERIKKKA
 
Nair jure123456
Nair jure123456Nair jure123456
Nair jure123456
 

Similar to Satz1

file_handling_in_c.ppt
file_handling_in_c.pptfile_handling_in_c.ppt
file_handling_in_c.pptyuvrajkeshri
 
Chapter 13.1.10
Chapter 13.1.10Chapter 13.1.10
Chapter 13.1.10patcha535
 
EASY UNDERSTANDING OF FILES IN C LANGUAGE.pdf
EASY UNDERSTANDING OF FILES IN C LANGUAGE.pdfEASY UNDERSTANDING OF FILES IN C LANGUAGE.pdf
EASY UNDERSTANDING OF FILES IN C LANGUAGE.pdfsudhakargeruganti
 
Mesics lecture files in 'c'
Mesics lecture   files in 'c'Mesics lecture   files in 'c'
Mesics lecture files in 'c'eShikshak
 
Advance C Programming UNIT 4-FILE HANDLING IN C.pdf
Advance C Programming UNIT 4-FILE HANDLING IN C.pdfAdvance C Programming UNIT 4-FILE HANDLING IN C.pdf
Advance C Programming UNIT 4-FILE HANDLING IN C.pdfsangeeta borde
 
VIT351 Software Development VI Unit5
VIT351 Software Development VI Unit5VIT351 Software Development VI Unit5
VIT351 Software Development VI Unit5YOGESH SINGH
 
Files let you store data on secondary storage such as a hard disk so that you...
Files let you store data on secondary storage such as a hard disk so that you...Files let you store data on secondary storage such as a hard disk so that you...
Files let you store data on secondary storage such as a hard disk so that you...Bern Jamie
 
UNIT 10. Files and file handling in C
UNIT 10. Files and file handling in CUNIT 10. Files and file handling in C
UNIT 10. Files and file handling in CAshim Lamichhane
 
File Handling in c.ppt
File Handling in c.pptFile Handling in c.ppt
File Handling in c.pptBhumaNagaPavan
 
File handling
File handlingFile handling
File handlingAns Ali
 
Introduction to Data Structure : Pointer
Introduction to Data Structure : PointerIntroduction to Data Structure : Pointer
Introduction to Data Structure : PointerS P Sajjan
 
Read write program
Read write programRead write program
Read write programAMI AMITO
 

Similar to Satz1 (20)

file_handling_in_c.ppt
file_handling_in_c.pptfile_handling_in_c.ppt
file_handling_in_c.ppt
 
Chapter 13.1.10
Chapter 13.1.10Chapter 13.1.10
Chapter 13.1.10
 
PPS PPT 2.pptx
PPS PPT 2.pptxPPS PPT 2.pptx
PPS PPT 2.pptx
 
Unit5 C
Unit5 C Unit5 C
Unit5 C
 
Unit-VI.pptx
Unit-VI.pptxUnit-VI.pptx
Unit-VI.pptx
 
EASY UNDERSTANDING OF FILES IN C LANGUAGE.pdf
EASY UNDERSTANDING OF FILES IN C LANGUAGE.pdfEASY UNDERSTANDING OF FILES IN C LANGUAGE.pdf
EASY UNDERSTANDING OF FILES IN C LANGUAGE.pdf
 
Mesics lecture files in 'c'
Mesics lecture   files in 'c'Mesics lecture   files in 'c'
Mesics lecture files in 'c'
 
Advance C Programming UNIT 4-FILE HANDLING IN C.pdf
Advance C Programming UNIT 4-FILE HANDLING IN C.pdfAdvance C Programming UNIT 4-FILE HANDLING IN C.pdf
Advance C Programming UNIT 4-FILE HANDLING IN C.pdf
 
VIT351 Software Development VI Unit5
VIT351 Software Development VI Unit5VIT351 Software Development VI Unit5
VIT351 Software Development VI Unit5
 
Files let you store data on secondary storage such as a hard disk so that you...
Files let you store data on secondary storage such as a hard disk so that you...Files let you store data on secondary storage such as a hard disk so that you...
Files let you store data on secondary storage such as a hard disk so that you...
 
file.ppt
file.pptfile.ppt
file.ppt
 
UNIT 10. Files and file handling in C
UNIT 10. Files and file handling in CUNIT 10. Files and file handling in C
UNIT 10. Files and file handling in C
 
Unit5
Unit5Unit5
Unit5
 
File Handling in c.ppt
File Handling in c.pptFile Handling in c.ppt
File Handling in c.ppt
 
file_handling_in_c.ppt
file_handling_in_c.pptfile_handling_in_c.ppt
file_handling_in_c.ppt
 
File handling
File handlingFile handling
File handling
 
Introduction to Data Structure : Pointer
Introduction to Data Structure : PointerIntroduction to Data Structure : Pointer
Introduction to Data Structure : Pointer
 
Handout#01
Handout#01Handout#01
Handout#01
 
Read write program
Read write programRead write program
Read write program
 
Unit 5 dwqb ans
Unit 5 dwqb ansUnit 5 dwqb ans
Unit 5 dwqb ans
 

Satz1

  • 1. File Operations These function prototypes are in <stdio.h>: the program must #include <stdio.h>. The value EOF (indicates end-of-file) is defined in <stdio.h>. Its value is usually -1, but this should not be relied upon. The data type FILE is a struct type defined in <stdio.h>. A stream is a pointer-to-FILE, and comprises a buffer plus a file. The streams stdin, stdout and stderr are automatically opened when a program including <stdio.h> is run. Unless redirected, stdin is connected to the keyboard, stdout and stderr to the screen. When program execution ends, all open streams are automatically closed. FILE *fopen(const char *filename, const char *mode); This opens the file filename. The mode mode can be "r" for reading, "w" for writing, or "a" for appending. It returns a stream, or NULL if the file cannot be opened. int fflush(FILE *stream); Flushing an output stream causes any unwritten data in the buffer to be written. On an input stream, the effect is undefined (but usually clears the buffer). The return value is normally zero, or EOF for a write error. int fclose(FILE *stream); This closes stream. For an output stream, any buffered data is first written. For an input stream, any unread data is discarded. It normally returns zero, or EOF for an error. int remove(const char *filename); This deletes the file filename. It normally returns zero, or non-zero for an error. int rename(const char *oldname, const char *newname); This renames the file oldname to newname. It normally returns zero, or non-zero for an error. int fprintf(FILE *stream, const char *format, ...); This acts exactly like printf except that the data is written to stream, rather than stdout. It normally returns the number of characters written, or a negative value for an error.
  • 2. int fscanf(FILE *stream, const char *format, ...); This acts exactly like scanf except that the data is read from stream, rather than stdin. It normally returns the number of input items converted and assigned, or EOF for an error. int fgetc(FILE *stream); This normally returns the next character read from stream (as an int), or EOF for an error. (The char is converted to an int because EOF is usually -1, while unsigned char is usually from 0 to 255 so could not be used to return EOF.) char *fgets(char *s, int n, FILE *stream); This reads a maximum of n - 1 characters into the array s. It stops if a newline ('n') is found. The newline is included in the array. The array is terminated by the null character '0'. It returns s (a pointer-to-char), or NULL for an error. int fputc(int c, FILE *stream); This writes the character c (converted to unsigned char) to stream. It normally returns c, or EOF for an error. int fputs(const char *s, FILE *stream); This writes string s to stream. (Note: unlike puts, fputs does not add a newline 'n' to the end of s.) It normally returns a non-negative value, or EOF for an error. void rewind(FILE *stream); This "rewinds" stream back to the start of the file. It does not return a value. int feof(FILE *stream); This normally returns zero, or non-zero if the end-of-file marker for stream has been reached.
  • 3. Creating a file and output some data In order to create files we have to learn about File I/O i.e. how to write data into a file and how to read data from a file. We will start this section with an example of writing data to a file. We begin as before with the include statement for stdio.h, then define some variables for use in the example including a rather strange looking new type. /* Program to create a file and write some data the file */ #include <stdio.h> #include <stdio.h> main( ) { FILE *fp; char stuff[25]; int index; fp = fopen("TENLINES.TXT","w"); /* open for writing */ strcpy(stuff,"This is an example line."); for (index = 1; index <= 10; index++) fprintf(fp,"%s Line number %dn", stuff, index); fclose(fp); /* close the file before ending program */ } The type FILE is used for a file variable and is defined in the stdio.h file. It is used to define a file pointer for use in file operations. Before we can write to a file, we must open it. What this really means is that we must tell the system that we want to write to a file and what the file name is. We do this with the fopen() function illustrated in the first line of the program. The file pointer, fp in our case, points to the file and two arguments are required in the parentheses, the file name first, followed by the file type. The file name is any valid DOS file name, and can be expressed in upper or lower case letters, or even mixed if you so desire. It is enclosed in double quotes. For this example we have chosen the name TENLINES.TXT. This file should not exist on your disk at this time. If you have a file with this name, you should change its name or move it because when we execute this program, its contents will be erased. If you don’t have a file by this name, that is good because we will create one and put some data into it. You are permitted to include a directory with the file name.The directory must, of course, be a valid directory otherwise an error will occur. Also, because of the way C handles literal strings, the directory separation character ‘’ must be written twice. For example, if the file is to be stored in the PROJECTS sub directory then the file name should be entered as “PROJECTSTENLINES.TXT”. The second parameter is the file attribute and can be any of three letters, r, w, or a, and must be lower case. Reading (r) When an r is used, the file is opened for reading, a w is used to indicate a file to be used for writing, and an a indicates that you desire to append additional data to the data already in an existing file. Most C compilers have other file attributes available; check your Reference Manual for details. Using the r indicates that the file is assumed to be a text file. Opening a file for reading requires that the file already exist. If it does not exist, the file pointer will be set to NULL and can be checked by the program.
  • 4. Here is a small program that reads a file and display its contents on screen. /* Program to display the contents of a file on screen */ #include <stdio.h> void main() { FILE *fopen(), *fp; int c; fp = fopen("prog.c","r"); c = getc(fp) ; while (c!= EOF) { putchar(c); c = getc(fp); } fclose(fp); } Writing (w) When a file is opened for writing, it will be created if it does not already exist and it will be reset if it does, resulting in the deletion of any data already there. Using the w indicates that the file is assumed to be a text file. Here is the program to create a file and write some data into the file. #include <stdio.h> int main() { FILE *fp; file = fopen("file.txt","w"); /*Create a file and add text*/ fprintf(fp,"%s","This is just an example :)"); /*writes data to the file*/ fclose(fp); /*done!*/ return 0; } Appending (a) When a file is opened for appending, it will be created if it does not already exist and it will be initially empty. If it does exist, the data input point will be positioned at the end of the present data so that any new data will be added to any data that already exists in the file. Using the a indicates that the file is assumed to be a text file. Here is a program that will add text to a file which already exists and there is some text in the file. #include <stdio.h> int main() { FILE *fp file = fopen("file.txt","a");
  • 5. fprintf(fp,"%s","This is just an example :)"); /*append some text*/ fclose(fp); return 0; } Outputting to the file The job of actually outputting to the file is nearly identical to the outputting we have already done to the standard output device. The only real differences are the new function names and the addition of the file pointer as one of the function arguments. In the example program, fprintf replaces our familiar printf function name, and the file pointer defined earlier is the first argument within the parentheses. The remainder of the statement looks like, and in fact is identical to, the printf statement. Closing a file To close a file you simply use the function fclose with the file pointer in the parentheses. Actually, in this simple program, it is not necessary to close the file because the system will close all open files before returning to DOS, but it is good programming practice for you to close all files in spite of the fact that they will be closed automatically, because that would act as a reminder to you of what files are open at the end of each program. You can open a file for writing, close it, and reopen it for reading, then close it, and open it again for appending, etc. Each time you open it, you could use the same file pointer, or you could use a different one. The file pointer is simply a tool that you use to point to a file and you decide what file it will point to. Compile and run this program. When you run it, you will not get any output to the monitor because it doesn’t generate any. After running it, look at your directory for a file named TENLINES.TXT and type it; that is where your output will be. Compare the output with that specified in the program; they should agree! Do not erase the file named TENLINES.TXT yet; we will use it in some of the other examples in this section. Reading from a text file Now for our first program that reads from a file. This program begins with the familiar include, some data definitions, and the file opening statement which should require no explanation except for the fact that an r is used here because we want to read it. #include <stdio.h> main( ) { FILE *fp; char c; funny = fopen("TENLINES.TXT", "r"); if (fp == NULL) printf("File doesn't existn"); else { do { c = getc(fp); /* get one character from the file
  • 6. */ putchar(c); /* display it on the monitor */ } while (c != EOF); /* repeat until EOF (end of file) */ } fclose(fp); } In this program we check to see that the file exists, and if it does, we execute the main body of the program. If it doesn’t, we print a message and quit. If the file does not exist, the system will set the pointer equal to NULL which we can test. The main body of the program is one do while loop in which a single character is read from the file and output to the monitor until an EOF (end of file) is detected from the input file. The file is then closed and the program is terminated. At this point, we have the potential for one of the most common and most perplexing problems of programming in C. The variable returned from the getc function is a character, so we can use a char variable for this purpose. There is a problem that could develop here if we happened to use an unsigned char however, because C usually returns a minus one for an EOF – which an unsigned char type variable is not capable of containing. An unsigned char type variable can only have the values of zero to 255, so it will return a 255 for a minus one in C. This is a very frustrating problem to try to find. The program can never find the EOF and will therefore never terminate the loop. This is easy to prevent: always have a char or int type variable for use in returning an EOF. There is another problem with this program but we will worry about it when we get to the next program and solve it with the one following that. After you compile and run this program and are satisfied with the results, it would be a good exercise to change the name of TENLINES.TXT and run the program again to see that the NULL test actually works as stated. Be sure to change the name back because we are still not finished with TENLINES.TXT.
  • 7. Byte Wide Description character character fopen opens a file freopen opens a different file with an existing stream fflush synchronizes an output stream with the actual file fclose closes a file File access setbuf sets the buffer for a file stream setvbuf sets the buffer and its size for a file stream switches a file stream between wide character I/O and narrow fwide character I/O Direct fread reads from a file input/output fwrite writes to a file fgetc fgetwc reads a byte/wchar_t from a file stream getc getwc fgets fgetws reads a byte/wchar_t line from a file stream fputc fputwc writes a byte/wchar_t to a file stream putc putwc Unformatted fputs fputws writes a byte/wchar_t string to a file stream input/output getchar getwchar reads a byte/wchar_t from stdin gets N/A reads a byte string from stdin (deprecated in C99, obsoleted in C11) putchar putwchar writes a byte/wchar_t to stdout puts N/A writes a byte string to stdout ungetc ungetwc puts a byte/wchar_t back into a file stream scanf wscanf reads formatted byte/wchar_t input from stdin, fscanf fwscanf sscanf swscanf a file stream or a buffer vscanf vwscanf reads formatted input byte/wchar_t from stdin, vfscanf vfwscanf vsscanf vswscanf a file stream or a buffer using variable argument list printf Formatted wprintf fprintf prints formatted byte/wchar_t output to stdout, input/output sprintf fwprintf swprintf a file stream or a buffer snprintf vprintf vwprintf vfprintf prints formatted byte/wchar_t output to stdout, vfwprintf vsprintf a file stream, or a buffer using variable argument list vswprintf vsnprintf perror N/A writes a description of the current error to stderr ftell returns the current file position indicator fgetpos gets the file position indicator File fseek moves the file position indicator to a specific location in a file positioning fsetpos moves the file position indicator to a specific location in a file rewind moves the file position indicator to the beginning in a file clearerr clears errors Error feof checks for the end-of-file handling ferror checks for a file error Operations remove erases a file
  • 8. on files rename renames a file tmpfile returns a pointer to a temporary file tmpnam returns a unique filename