UNIXシステムコール ファイルから読んで標準出力に表示する

#include <sys/types.h>  /* open, read, write */
#include <stdio.h>      /* perror */
#include <stdlib.h>     /* exit */
#include <sys/stat.h>   /* open */
#include <fcntl.h>      /* open */
#include <sys/uio.h>    /* read, write */
#include <unistd.h>     /* close, read, write */

int main(void) {
  int ifd;
  ssize_t cc;
  char buf[1];

  if ((ifd = open("input.file", O_RDONLY)) == -1) {
    perror("open");
    exit(1);
  }

  while ((cc = read(ifd, buf, sizeof(buf))) > 0) {
    if (write(STDOUT_FILENO, buf, cc) < cc) {
      perror("write");
      exit(1);
    }
  }

  if (cc == -1) {
    perror("read");
    exit(1);
  }

  if (close(ifd) == -1) {
    perror("close");
    exit(1);
  }

  return 0;
}

GDBデバッグする

(gdb) b main
(gdb) r
14        if ((ifd = open("input.file", O_RDONLY)) == -1) {
(gdb) n
19        while ((cc = read(ifd, buf, sizeof(buf))) > 0) {
(gdb) 
20          if (write(STDOUT_FILENO, buf, cc) < cc) {
(gdb) p cc
$1 = 1
(gdb) p buf
$2 = "a"
(gdb) n
a19       while ((cc = read(ifd, buf, sizeof(buf))) > 0) {
(gdb) 
20          if (write(STDOUT_FILENO, buf, cc) < cc) {
(gdb) p buf
$3 = "b"
(gdb) n
b19       while ((cc = read(ifd, buf, sizeof(buf))) > 0) {
(gdb) 
20          if (write(STDOUT_FILENO, buf, cc) < cc) {
(gdb) 
c19       while ((cc = read(ifd, buf, sizeof(buf))) > 0) {
(gdb) 
20          if (write(STDOUT_FILENO, buf, cc) < cc) {
(gdb) p buf
$4 = "\n"
(gdb) n

19        while ((cc = read(ifd, buf, sizeof(buf))) > 0) {
(gdb) 
26        if (cc == -1) {
(gdb) p cc
$5 = 0
(gdb) n
31        if (close(ifd) == -1) {
(gdb) 
36        return 0;
(gdb) 
37      }
(gdb) 
[Inferior 1 (process 3971) exited normally]
(gdb) q