File I/O
I have seen the light so here we go;
In this article, I will be discussing the system calls(functions) relating to file descriptors and the parameters they take.
File descriptor
File descriptor (fd) - It is a non-negative integer that is returned by the operating system when a file or device is opened by an application. It's used to read data from a file, write data to a file, or perform other I/O operations on the file.
Standard I/O streams and their file descriptors
- Standard input (
stdin
)/STDIN_FILENO
it is used to read input from the user (keyboard). Its fd is 0
- Standard output (
stdout
)/STDOUT_FILENO
It is used to write output to the user (screen). Its fd is 1
- Standard error (
stderr
)/STDERR_FILENO
it is used to write error messages or diagnostic output to the user (terminal/screen). Its file descriptor is 2
Open or Create a File
The open() function opens a file and returns the file descriptor that can be used for subsequent I/O operations and returns -1
on error.
prototype;
int open(const char* pathname, int flags); // Open an existing file
int open(const char* pathname, int flags, [mode_t mode]); // Open or create a file if it does not exist
pathname - A pointer to a null-terminated string which is the path to the file you want to open.
flags - An int that specifies the mode in which the file should be opened. O_RDONLY
(open for reading), O_WRONLY
(open for writing), O_RDWR
(open for both reading and writing).
other flags;
O_CREAT
opens and creates the file if it does not exist.
O_CREAT | O_EXCL
Create the file and fail if the file already exists.
O_APPEND
specifies that all write operations should append data to the end of the file instead of overwriting existing data.
mode- An argument that specifies the file permissions to use if the file is being created with the 0_CREATE
flag to set the file's initial permissions. These modes S_IRUSR
S_IWUSR
S_IRGRP
S_IWGRP
allow the current user and group to read or write the file respectively. It is optional so if you are not creating a file you can ignore it.
Read from a file descriptor
The read() function is used to read bytes from a file or file descriptor into a buffer and returns the number of bytes read, if any. Returns 0
at end of the file and -1
on error.
prototype;
ssize_t read(int fd, void *buffer, size_t size);
fd - integer file descriptor representing the file to read from.
buffer - A pointer to a memory area where the read data will be stored.
size - An integer that specifies the maximum number of bytes to be read. Size corresponds to the size of the memory area indicated in the buffer
Write to a file descriptor
The write() function is used to write data to a file or file descriptor. It returns the number of bytes written or -1 if an error occurs.
prototype;
ssize_t write(int fd, const void *buffer, size_t size);
fd - An integer file descriptor representing the file to write to.
buffer - A pointer to a memory area that contains the data to write.
size - An integer that specifies the number of bytes to write.
Close a file decriptor
Close(), as it sounds, closes the file descriptor.
Parameter;
int close(int fd);
Further reading
I know want to go towards the light, This is the path.
Good luck.
Subscribe to my newsletter
Read articles from manga directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
manga
manga
I am anything that involves data and tech.