#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/uio.h>
#include <unistd.h>
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