mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 12:17:35 +00:00
Userland: Make a simple /bin/cp for copying files.
This commit is contained in:
parent
a34bb07abb
commit
15fad649ea
4 changed files with 49 additions and 0 deletions
42
Userland/cp.cpp
Normal file
42
Userland/cp.cpp
Normal file
|
@ -0,0 +1,42 @@
|
|||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
if (argc != 3) {
|
||||
printf("usage: cp <source> <destination>\n");
|
||||
return 0;
|
||||
}
|
||||
int src_fd = open(argv[1], O_RDONLY);
|
||||
if (src_fd < 0) {
|
||||
perror("open src");
|
||||
return 1;
|
||||
}
|
||||
int dst_fd = open(argv[2], O_WRONLY | O_CREAT);
|
||||
if (dst_fd < 0) {
|
||||
perror("open dst");
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
char buffer[BUFSIZ];
|
||||
ssize_t nread = read(src_fd, buffer, sizeof(buffer));
|
||||
if (nread < 0) {
|
||||
perror("read src");
|
||||
return 1;
|
||||
}
|
||||
if (nread == 0)
|
||||
break;
|
||||
ssize_t nwritten = write(dst_fd, buffer, nread);
|
||||
if (nwritten < 0) {
|
||||
perror("write dst");
|
||||
return 1;
|
||||
}
|
||||
assert(nwritten != 0);
|
||||
}
|
||||
close(src_fd);
|
||||
close(dst_fd);
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue