Operating systems provide a wide range of system calls (functions) that applications can use to interact with the kernel and perform various tasks. These system calls cover essential operations such as process management, file management, memory management, inter-process communication, and more. Here are some common categories of system calls and examples of functions within each category:
Process Management
fork()
: Create a new process.exec()
: Replace the current process with a new process.wait()
: Wait for a child process to terminate.exit()
: Terminate the current process.
File Management
open()
: Open a file or device.read()
andwrite()
: Read from or write to a file descriptor.close()
: Close a file descriptor.lseek()
: Move the read/write file offset.
Device Management
ioctl()
: Perform I/O control operations on devices.read()
andwrite()
: Read from or write to device files.
Memory Management
brk()
andsbrk()
: Change the data segment size.mmap()
andmunmap()
: Map or unmap files or devices into memory.
Inter-Process Communication (IPC)
pipe()
: Create an inter-process communication channel.shmget()
,shmat()
,shmdt()
: Create, attach, and detach shared memory segments.msgget()
,msgsnd()
,msgrcv()
: Create, send, and receive messages to/from message queues.
Network Communication
socket()
: Create a new communication endpoint (socket).bind()
,listen()
,accept()
: Bind a name to a socket, listen for connections, and accept connections.connect()
: Initiate a connection to a remote socket.
Miscellaneous
getpid()
,getuid()
,getgid()
: Get process ID, user ID, and group ID.time()
,gettimeofday()
: Get current time or system time.kill()
: Send a signal to a process.
Example Usage
Here's an example of using some common system calls in C to create a child process and communicate between parent and child:
c
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid = fork(); // Create a new process
if (pid < 0) {
perror("Fork failed");
return 1;
} else if (pid == 0) {
// Child process
printf("Child process: Hello from Child! (PID: %d)\n", getpid());
} else {
// Parent process
printf("Parent process: Hello from Parent! (PID: %d)\n", getpid());
wait(NULL); // Wait for child process to terminate
}
return 0;
}
Summary
- Operating systems provide a variety of system calls that applications can use to perform low-level operations.
- System calls are essential for process management, file handling, memory management, inter-process communication, and more.
- Each system call serves a specific purpose and provides an interface between user-level applications and the kernel.
Understanding and utilizing system calls in coding is fundamental for system-level programming and developing efficient and responsive applications in operating system environments.