-
Notifications
You must be signed in to change notification settings - Fork 39
/
data.esc
51 lines (51 loc) · 892 Bytes
/
data.esc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>$
#include <stdlib.h>$
#include <unistd.h>$
#include <sys/types.h>$
#include <sys/stat.h>$
#include <fcntl.h>$
$
static void do_cat(const char *path);$
static void die(const char *s);$
$
int$
main(int argc, char *argv[])$
{$
int i;$
$
if (argc < 2) {$
\tfprintf(stderr, "%s: file name not given\n", argv[0]);$
\texit(1);$
}$
for (i = 1; i < argc; i++) {$
\tdo_cat(argv[i]);$
}$
exit(0);$
}$
$
#define BUFFER_SIZE 2048$
$
static void$
do_cat(const char *path)$
{$
int fd;$
unsigned char buf[BUFFER_SIZE];$
int n;$
$
fd = open(path, O_RDONLY);$
if (fd < 0) die(path);$
for (;;) {$
\tn = read(fd, buf, sizeof buf);$
\tif (n < 0) die(path);$
\tif (n == 0) break;$
\tif (write(STDOUT_FILENO, buf, n) < 0) die(path);$
}$
if (close(fd) < 0) die(path);$
}$
$
static void$
die(const char *s)$
{$
perror(s);$
exit(1);$
}