18int write_all(
int fd,
const void* buffer,
size_t size)
20 size_t total_written = 0;
21 ssize_t bytes_written;
23 while (total_written < size) {
24 bytes_written = write(fd, buffer + total_written, size - total_written);
25 if (bytes_written == -1) {
26 if (errno == EINTR)
continue;
29 total_written += bytes_written;
34ssize_t
read_all(
int fd,
void *buffer,
size_t size) {
35 size_t total_read = 0;
37 char *buf = (
char *)buffer;
39 while (total_read < size) {
40 bytes_read = read(fd, buf + total_read, size - total_read);
41 if (bytes_read == -1) {
42 if (errno == EINTR)
continue;
47 total_read += bytes_read;
52ssize_t
transfer_data(
int fd_src,
int fd_dst,
char *buffer, ssize_t buffer_size)
55 ssize_t total_transfered = 0;
57 while((bytes_read = read(fd_src, buffer, buffer_size)) > 0) {
58 if (
write_all(fd_dst, buffer, bytes_read) == -1)
60 total_transfered += bytes_read;
62 return (bytes_read == -1 ) ? -1 : total_transfered;
71ssize_t
copy_file(
const char *src_path,
const char *dst_path)
76 fd_src = open(src_path, O_RDONLY);
77 if (fd_src == -1)
return -1;
79 fd_dst = open(dst_path, O_WRONLY | O_CREAT | O_TRUNC | 0644);
Librería de utilidades para operaciones de E/S con descriptores de fichero.
ssize_t copy_file(const char *src_path, const char *dst_path)
Copia un archivo completo a otra ubicación.
#define DEFAULT_BUFFER_SIZE
Tamaño del buffer interno usado por transfer_all() (4KB).
int write_all(int fd, const void *buffer, size_t size)
Escribe todos los bytes del buffer al descriptor de fichero.
ssize_t read_all(int fd, void *buffer, size_t size)
Lee hasta size bytes de un descriptor a un buffer.
ssize_t transfer_all(int fd_src, int fd_dst)
Transfiere todo el contenido de un descriptor a otro.
ssize_t transfer_data(int fd_src, int fd_dst, char *buffer, ssize_t buffer_size)
Transfiere datos de un descriptor de origen a uno de destino.