您现在的位置是:首页 >技术教程 >Linux | 系统调用网站首页技术教程
Linux | 系统调用
                简介Linux | 系统调用            
            文章目录
Linux | 系统调用
前言:在Linux系统中,系统调用是用户空间程序与内核进行交互的桥梁,用户程序通过系统调用请求内核提供的服务。下面将详细介绍
open系统调用以及其他常用的系统调用。
以下是 Linux 中几类核心系统调用:
| 类别 | 系统调用示例 | 功能描述 | 
|---|---|---|
| 文件操作 | open, read, write, close | 打开/读/写/关闭文件 | 
| 进程控制 | fork, execve, waitpid, exit | 创建进程、加载程序、等待子进程退出 | 
| 内存管理 | brk, mmap, munmap | 调整堆内存、内存映射 | 
| 网络通信 | socket, bind, connect, send | 创建套接字、绑定端口、连接远程主机、发送数据 | 
| 设备控制 | ioctl | 控制硬件设备(如调整终端参数) | 
| 权限管理 | chmod, setuid | 修改文件权限、切换用户身份 | 
下面主要讲解open系统调用和一些常用的系统调用
open 系统调用
 
功能
open 系统调用用于打开或创建一个文件、设备等,返回一个文件描述符(非负整数),后续对该文件的操作都可以通过这个文件描述符来进行。
头文件和函数原型
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
 
参数解释
pathname:要打开或创建的文件的路径名,可以是绝对路径或相对路径。flags:用于指定文件的打开方式和行为,常用的标志有:O_RDONLY:以只读方式打开文件。O_WRONLY:以只写方式打开文件。O_RDWR:以读写方式打开文件。O_CREAT:如果文件不存在,则创建该文件。使用此标志时,需要第三个参数mode来指定新文件的权限。O_TRUNC:如果文件已经存在且以写方式打开,则将文件长度截断为0。O_APPEND:以追加方式打开文件,每次写操作都将数据追加到文件末尾。
mode:当使用O_CREAT标志创建新文件时,mode参数指定新文件的权限。权限值通常使用八进制表示,例如0644表示文件所有者有读写权限,其他用户有读权限。
返回值
- 成功时返回一个新的文件描述符(通常是当前可用的最小非负整数)。
 - 失败时返回 -1,并设置 
errno变量来指示具体的错误原因。 
示例代码
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
    int fd = open("test.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (fd == -1) {
        perror("open");
        return 1;
    }
    printf("File opened successfully. File descriptor: %d
", fd);
    close(fd);
    return 0;
}
 
其他常用系统调用
read 系统调用
 
- 功能:从文件描述符指定的文件中读取数据到缓冲区。
 - 头文件和函数原型:
 
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
 
- 参数解释: 
  
fd:要读取数据的文件描述符。buf:用于存储读取数据的缓冲区。count:要读取的最大字节数。
 - 返回值: 
  
- 成功时返回实际读取的字节数,可能小于 
count。 - 到达文件末尾时返回 0。
 - 失败时返回 -1,并设置 
errno。 
 - 成功时返回实际读取的字节数,可能小于 
 
write 系统调用
 
- 功能:将缓冲区中的数据写入到文件描述符指定的文件中。
 - 头文件和函数原型:
 
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
 
- 参数解释: 
  
fd:要写入数据的文件描述符。buf:包含要写入数据的缓冲区。count:要写入的字节数。
 - 返回值: 
  
- 成功时返回实际写入的字节数,可能小于 
count。 - 失败时返回 -1,并设置 
errno。 
 - 成功时返回实际写入的字节数,可能小于 
 
close 系统调用
 
- 功能:关闭指定的文件描述符,释放相关资源。
 - 头文件和函数原型:
 
#include <unistd.h>
int close(int fd);
 
- 参数解释: 
  
fd:要关闭的文件描述符。
 - 返回值: 
  
- 成功时返回 0。
 - 失败时返回 -1,并设置 
errno。 
 
lseek 系统调用
 
- 功能:用于改变文件的当前读写位置。
 - 头文件和函数原型:
 
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
 
- 参数解释: 
  
fd:要操作的文件描述符。offset:偏移量,可正可负。whence:指定偏移量的起始位置,常用的值有:SEEK_SET:从文件开头开始计算偏移量。SEEK_CUR:从文件当前位置开始计算偏移量。SEEK_END:从文件末尾开始计算偏移量。
 - 返回值: 
  
- 成功时返回新的文件偏移量。
 - 失败时返回 -1,并设置 
errno。 
 
stat 系统调用
 
- 功能:获取文件的状态信息,如文件大小、权限、创建时间等。
 - 头文件和函数原型:
 
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *pathname, struct stat *statbuf);
 
-  
参数解释:
pathname:要获取状态信息的文件路径名。statbuf:指向struct stat结构体的指针,用于存储文件的状态信息。
 -  
返回值:
- 成功时返回 0。
 - 失败时返回 -1,并设置 
errno。 
 
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。
        
    
        
    
            




U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结