Copy
Program:
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <fcntl.h>
4 #include <sys/types.h>
5 #include <sys/stat.h>
6
7 #define BUFSIZE 1024
8
9 void printex(char *str) {
10 fprintf(stderr, "%s\n", str);
11 exit(EXIT_FAILURE);
12 }
13
14 void printerr(char *str) {
15 perror(str);
16 exit(EXIT_FAILURE);
17 }
18
19 int main(int argc, char *argv[]) {
20 int rdfd, wrfd, nread, nwrite;
21 char buf[BUFSIZE];
22
23 if (argc != 3) {
24 printex("Usage: mycopy <file1> <file2>");
25 }
26
27 rdfd = open(argv[1], O_RDONLY);
28 if (-1 == rdfd){
29 printerr("source file open");
30 }
31
32 wrfd = open(argv[2], O_WRONLY | O_CREAT,
33 S_IRWXU | S_IRGRP | S_IROTH);
34
35 if (-1 == wrfd) {
36 printerr("dest file open");
37 }
38
39 while ((nread = read(rdfd, buf, sizeof(buf))) > 0) {
40 if ((nwrite = write(wrfd, buf, nread)) != nread) {
41 printerr("dest file write");
42 }
43 }
44 if (-1 == nread) {
45 printerr("src file read");
46 }
47
48 if (close(rdfd) == -1) {
49 printerr("close src file");
50 }
51 if (close(wrfd) == -1) {
52 printerr("close dest file");
53 }
54
55 return EXIT_SUCCESS;
56 }
57
Strace Log
==========
reemuskumar ~/prog/cprog/linsys $ strace ./mycopy data2 data3
execve("./mycopy", ["./mycopy", "data2", "data3"], [/* 21 vars */]) = 0
.....
open("data2", O_RDONLY) = 3
open("data3", O_WRONLY|O_CREAT, 0744) = 4
read(3, "abcdefghijklmnopqrstuvwxyz\nabcde"..., 1024) = 270
write(4, "abcdefghijklmnopqrstuvwxyz\nabcde"..., 270) = 270
read(3, "", 1024) = 0
close(3) = 0
close(4) = 0
exit_group(0) = ?
+++ exited with 0 +++