Linux | 系统调用

embedded/2025/2/11 10:13:48/

文章目录

  • Linux | 系统调用
      • `open` 系统调用
        • 功能
        • 头文件和函数原型
        • 参数解释
        • 返回值
        • 示例代码
      • 其他常用系统调用
        • `read` 系统调用
        • `write` 系统调用
        • `close` 系统调用
        • `lseek` 系统调用
        • `stat` 系统调用

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\n", 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

http://www.ppmy.cn/embedded/161301.html

相关文章

【DeepSeek】从文本摘要到对话生成:DeepSeek 在 NLP 任务中的实战指南

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

【自动化测试】使用Python selenium类库模拟手人工操作网页

使用Python selenium类库模拟手人工操作网页 背景准备工作安装Python版本安装selenium类库下载selenium驱动配置本地环境变量 自动化脚本输出页面表单自动化填充相关代码 背景 待操作网页必须使用IE浏览器登录访问用户本地只有edge浏览器&#xff0c;通过edge浏览器IE模式访问…

解决 Excel 打开 UTF-8 编码 CSV 文件乱码的问题

前言&#xff1a;解决Excel打开UTF-8编码CSV文件乱码的BUG问题 在日常数据处理工作中&#xff0c;我们经常会使用CSV文件进行数据的导入和导出。然而&#xff0c;当CSV文件采用UTF-8编码时&#xff0c;有时候在使用Excel打开这些文件时会遇到乱码的问题&#xff0c;这可能会影…

2025我的第二次社招,写在春招之季

先说一个好消息&#xff0c;C那些事 4w star了&#xff01; 前面断更了一个月&#xff0c;本篇文章就可以看到原因&#xff0c;哈哈。 大家好&#xff0c;我叫光城&#xff0c;腾讯实习转正做后端开发&#xff0c;后去小公司做数据库内核&#xff0c;经过这几年的成长与积累&am…

IEEE期刊Word导出PDF注意事项

在系统上提交论文时候一般要求PDF文档&#xff0c;但是word直接转PDF可能存在一些问题&#xff1a; 部分图片不清晰。字体未嵌入PDF。间距发生了变化。字体发生了变化。一张图片显示不完全。 下面介绍word转PDF最稳妥的技巧以及如何实现全部字体的嵌入。 1. 操作流程 ① 另…

一款开源笔记工具:Rnote

一款开源笔记工具&#xff1a;Rnote 在日常学习和工作中&#xff0c;记笔记与绘制图表是必不可少的环节。然而&#xff0c;纸质笔记存在难以修改的弊端&#xff0c;而电子笔记又常常因缺乏手写的灵活性而让人感到不便。传统的笔记软件往往因功能单一或操作复杂而影响记录效率。…

51单片机独立按键的扩展应用

提示&#xff1a; 按键S7和S6为选择键&#xff0c;确定控制键控制那组LED指示灯。按键S5和S4为控制键&#xff0c;按键该键点亮指定的LED指示灯&#xff0c;松开后熄灭。按下S7点亮L1指示灯&#xff0c;L1点亮后&#xff0c;S6不响应操作&#xff0c;S5控制L3&#xff0c;S4控…

从零开始人工智能Matlab案例-粒子群优化

目标&#xff1a;求解Rastrigin函数最小值&#xff08;多峰测试函数&#xff09; 粒子群优化算法是一种基于群体智能的优化算法&#xff0c;模拟了鸟群或鱼群等群体的行为&#xff0c;通过粒子在搜索空间中的移动来寻找最优解。 % PSO参数 nParticles 30; % 粒子数量 max…