Example (_setmode -- Set File Translation Mode)

This example uses open to create the file setmode.dat and writes to it. The program then uses _setmode to change the translation mode of setmode.dat from binary to text.

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <io.h>
#include <sys\stat.h>
#define  FILENAME      "setmode.dat"
/* routine to validate return codes                                           */
void ckrc(int rc)
{
   if (-1 == rc) {
      printf("Unexpected return code = -1\n");
      remove(FILENAME);
      exit(EXIT_FAILURE);
   }
}
int main(void)
{
   int h;
   int xfer;
   int mode;
   char rbuf[256];
   char wbuf[] = "123\n456\n";
   ckrc(h = open(FILENAME, O_CREAT|O_RDWR|O_TRUNC|O_TEXT, S_IREAD|S_IWRITE));
   ckrc(write(h, wbuf, sizeof(wbuf)));     /* write the file (text)           */
   ckrc(lseek(h, 0, SEEK_SET));         /* seek back to the start of the file */
   ckrc(xfer = read(h, rbuf, 5));           /* read the file text             */
   printf("Read in %d characters (4 expected)\n", xfer);
   ckrc(mode = _setmode(h, O_BINARY));
   if (O_TEXT == mode)
      printf("Mode changed from binary to text\n");
   else
      printf("Previous mode was not text (unexpected)\n");
   ckrc(xfer = read(h, rbuf, 5));           /* read the file (binary)         */
   printf("Read in %d characters (5 expected)\n", xfer);
   ckrc(close(h));
   remove(FILENAME);
   return 0;
   /****************************************************************************
      The output should be:
      Read in 4 characters (4 expected)
      Mode changed from binary to text
      Read in 5 characters (5 expected)
   ****************************************************************************/
}