VMS Help  —  CRTL  read
    Reads bytes from a file and places them in a buffer.

    Format

      #include  <unistd.h>

      ssize_t read  (int file_desc, void *buffer, size_t nbytes);
                    (ISO POSIX-1)

      int read  (int file_desc, void *buffer, int nbytes);
                (Compatibility)

1  –  Arguments

 file_desc

    A file descriptor. The specified file descriptor must refer to a
    file currently opened for reading.

 buffer

    The address of contiguous storage in which the input data is
    placed.

 nbytes

    The maximum number of bytes involved in the read operation.

2  –  Description

    The read function returns the number of bytes read. The return
    value does not necessarily equal nbytes. For example, if the
    input is from a terminal, at most one line of characters is read.

                                   NOTE

       The read function does not span record boundaries in a
       record file and, therefore, reads at most one record. A
       separate read must be done for each record.

3  –  Return Values

    n                  The number of bytes read.
    -1                 Indicates a read error, including physical
                       input errors, illegal buffer addresses,
                       protection violations, undefined file
                       descriptors, and so forth.

4  –  Example

        #include <unistd.h>
        #include <stdlib.h>
        #include <stdio.h>
        #include <fcntl.h>

        main()
        {
            int fd,
                i;
            char buf[10];
            FILE *fp ;          /* Temporary STDIO file */

            /* Create a dummy data file  */

            if ((fp = fopen("test.txt", "w+")) == NULL) {
                perror("open");
                exit(1);
            }
            fputs("XYZ\n",fp) ;
            fclose(fp) ;

            /* And now practice "read" */

            if ((fd = open("test.txt", O_RDWR, 0, "shr=upd")) <= 0) {
                perror("open");
                exit(0);
            }

            /* Read 2 characters into buf.  */

            if ((i = read(fd, buf, 2)) < 0) {
                perror("read");
                exit(0);
            }

            /* Print out what was read.  */

            if (i > 0)
                printf("buf='%c%c'\n", buf[0], buf[1]);

            close(fd);
        }
Close Help