Introduction to POSIX
The Portable Operating System Interface (POSIX) is a family of standards specified by the IEEE for maintaining compatibility between operating systems. POSIX defines the application programming interface (API), along with command line shells and utility interfaces, for software compatibility with variants of Unix and other operating systems.
File Operations
POSIX offers a variety of APIs to handle file operations:
Opening a File: open
int fd = open("example.txt", O_RDONLY);
Reading from a File: read
char buffer[100]; ssize_t bytesRead = read(fd, buffer, sizeof(buffer));
Writing to a File: write
const char *data = "Hello, World!"; ssize_t bytesWritten = write(fd, data, strlen(data));
Closing a File: close
close(fd);
Directory Operations
POSIX compliant systems also provide APIs to handle directories:
Creating a Directory: mkdir
int status = mkdir("/new_directory", S_IRWXU);
Opening a Directory: opendir
DIR *dir = opendir("/some_directory");
Reading a Directory: readdir
struct dirent *entry; while ((entry = readdir(dir)) != NULL) { printf("%s\n", entry->d_name); }
Closing a Directory: closedir
closedir(dir);
Process Control
POSIX includes powerful APIs for process control:
Forking a Process: fork
pid_t pid = fork(); if (pid == 0) { // Child process } else { // Parent process }
Executing a Program: exec
execl("/bin/ls", "ls", NULL);
Waiting for a Process to Change State: wait
int status; wait(&status);
Terminating a Process: exit
exit(0);
Example Application
Combining several POSIX APIs, we can create a simple application to list files and their sizes in a directory:
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <dirent.h> int main() { DIR *dir; struct dirent *entry; struct stat fileStat; dir = opendir("."); if (!dir) { perror("opendir"); return EXIT_FAILURE; } while ((entry = readdir(dir)) != NULL) { if (stat(entry->d_name, &fileStat) == 0) { printf("%s: %ld bytes\n", entry->d_name, fileStat.st_size); } else { perror("stat"); } } closedir(dir); return EXIT_SUCCESS; }
This example lists all files in the current directory along with their sizes using POSIX file and directory APIs.
By understanding and utilizing POSIX APIs, developers can write more portable and robust system-level software.
Hash: 270dfabe9df986d649e48acd477c99c30245a25148b53f89b24ee34afcfdaa0f