File descriptors - writing to a file
Similarly,
we use integer file descriptors and arrays of characters
to write data to a file.
We require a different file descriptor for each file -
the descriptor identifies the file to use and the operating system
(internally) remembers the requested (permitted)
form of access.
Copying a file using file descriptors
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#define MYSIZE 10000
int copy_file(char destination[], char source[])
{
// ATTEMPT TO OPEN source FOR READ-ONLY ACCESS
int fd0 = open(source, O_RDONLY);
// ENSURE THE FILE COULD BE OPENED
if(fd0 == -1) {
return -1;
}
// ATTEMPT TO OPEN destination FOR WRITE-ONLY ACCESS
int fd1 = open(destination, O_WRONLY);
// ENSURE THE FILE COULD BE OPENED
if(fd1 == -1) {
close(fd0);
return -1;
}
// DEFINE A CHARACTER ARRAY TO HOLD THE FILE'S CONTENTS
char buffer[MYSIZE];
size_t got;
// PERFORM MULTIPLE READs OF FILE UNTIL END-OF-FILE REACHED
while((got = read(fd0, buffer, sizeof buffer)) > 0) {
if(write(fd1, buffer, got)) != got) {
close(fd0); close(fd1);
return -1;
}
}
close(fd0); close(fd1);
return 0;
}
|
CITS2002 Systems Programming, Lecture 7, p2, 12th August 2024.
|