Linux | 系统调用

devtools/2025/2/12 22:26:42/

文章目录

  • 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/devtools/158323.html

相关文章

rpx和px混用方案

&#xff08;1&#xff09;创建一个全局的样式配置文件&#xff1a; // styles/variables.scss :root {// 基础字体大小--font-size-xs: 12px;--font-size-sm: 14px;--font-size-md: 16px;--font-size-lg: 18px;// 响应式间距--spacing-xs: 5px;--spacing-sm: 10px;--spacing-…

测试用例作用

测试用例在软件开发过程中扮演着非常重要的角色&#xff0c;指导测试人员如何去测&#xff0c;测试用例的好坏直接关乎到软件本身的质量。主要体现在以下几个方面&#xff1a; 1. 明确测试目标&#xff1a;测试用例详细描述了需要测试的功能点和预期结果&#xff0c;确保每个功…

React 高级教程

使用 React 高级组件(HOC)实现的完整项目示例,包含权限控制、数据加载状态处理、性能优化等常见高级功能。创建一个简单的博客系统: // 项目结构: src/ |-- components/ | |-- ArticleList.jsx | |-- Article.jsx | |-- Header.jsx | |-- LoginForm.jsx | |-- U…

【人工智能】解码语言之谜:使用Python构建神经机器翻译系统

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 神经机器翻译(NMT)是近年来机器翻译领域的一项重大突破。它利用深度学习模型,特别是循环神经网络(RNN)和Transformer网络,以端到端的…

KOA优化LSBooST回归预测matlab

开普勒优化算法&#xff08;简称 KOA&#xff0c;即 Kepler Optimization Algorithm&#xff09;&#xff0c;是一种从开普勒行星运动规律中汲取灵感的元启发式算法。此算法模拟行星在不同时刻的位置与速度&#xff0c;每个行星象征着一个候选解&#xff0c;在优化进程中&#…

c/c++蓝桥杯经典编程题100道(9)数组排序

数组排序 ->返回c/c蓝桥杯经典编程题100道-目录 目录 数组排序 一、题型解释 二、例题问题描述 三、C语言实现 解法1&#xff1a;冒泡排序&#xff08;难度★&#xff09; 解法2&#xff1a;选择排序&#xff08;难度★&#xff09; 解法3&#xff1a;快速排序&#…

基于生成式语言模型的就业指导

一、引言 在当今竞争激烈的就业市场中&#xff0c;求职者面临着诸多挑战&#xff0c;如职业规划迷茫、简历撰写困难、面试准备不足等。生成式语言模型&#xff0c;如ChatGPT等&#xff0c;凭借其强大的语言理解和生成能力&#xff0c;为求职者提供了全新的就业指导途径。本指导…

dbeaver 安装之后出现mysql连接异常问题

1.手动下载mysql驱动程序 参考文档DBeaver连接mysql驱动下载失败怎么办&#xff1f;-CSDN博客 2.添加对应的下载程序到dbeaver 【DBeaver】缺少mysql驱动_dbeaver连接mysql缺少驱动-CSDN博客 配置mysql 地址端口账户等即可使用