Skip to content

Commit a2eafe5

Browse files
committedFeb 10, 2023
file 3
1 parent 6dafc01 commit a2eafe5

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed
 

‎0x15-file_io/3-cp.c

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#include "main.h"
2+
/**
3+
* main - copies the content of a file to another
4+
* @argc: number of arguments passed to the program
5+
* @argv: array of arguments
6+
* Return: 0 On Success
7+
*/
8+
int main(int argc, char *argv[])
9+
{
10+
int fd_r, fd_w, r, i, j;
11+
char buf[BUFSIZ];
12+
13+
if (argc != 3)
14+
{
15+
dprintf(STDERR_FILENO, "Usage: cp file_from file_to\n");
16+
exit(97);
17+
}
18+
fd_r = open(argv[1], O_RDONLY);
19+
if (fd_r < 0)
20+
{
21+
dprintf(STDERR_FILENO, "Error: Can't read from file %s\n", argv[1]);
22+
exit(98);
23+
}
24+
fd_w = open(argv[2], O_CREAT | O_WRONLY | O_TRUNC, 0664);
25+
while ((r = read(fd_r, buf, BUFSIZ)) > 0)
26+
{
27+
if (fd_w < 0 || write(fd_w, buf, r) != r)
28+
{
29+
dprintf(STDERR_FILENO, "Error: Can't write to %s\n", argv[2]);
30+
close(fd_r);
31+
exit(99);
32+
}
33+
}
34+
if (r < 0)
35+
{
36+
dprintf(STDERR_FILENO, "Error: Can't read from file %s\n", argv[1]);
37+
exit(98);
38+
}
39+
i = close(fd_r);
40+
j = close(fd_w);
41+
if (i < 0 || j < 0)
42+
{
43+
if (i < 0)
44+
dprintf(STDERR_FILENO, "Error: Can't close fd %d\n", fd_r);
45+
if (j < 0)
46+
dprintf(STDERR_FILENO, "Error: Can't close fd %d\n", fd_w);
47+
exit(100);
48+
}
49+
return (0);
50+
}

0 commit comments

Comments
 (0)
Please sign in to comment.