Linux | 系统调用

文章目录

  • 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.mzph.cn/news/895232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

郭羽冲IOI2024参赛总结

非常荣幸能代表中国参加第 36 36 36 届国际信息学奥林匹克竞赛&#xff08; I O I 2024 IOI2024 IOI2024&#xff09;。感谢 C C F CCF CCF 为我们提供竞赛的平台&#xff0c;感谢随行的老师们一路上为我们提供的帮助与支持。 在每场比赛的前一个晚上&#xff0c;领队、副领…

基于Java的自助多张图片合成拼接实战

目录 前言 一、图片合成需求描述 二、图片合成设计与实现 1、编程语言 2、基础数据准备 3、图片合成流程 4、图片合成实现 三、总结 前言 在当今数字化时代&#xff0c;图像处理技术在各个领域都发挥着至关重要的作用。从社交媒体到电子商务&#xff0c;从在线教育到虚拟…

计算机网络结课设计:通过思科Cisco进行中小型校园网搭建

上学期计算机网络课程的结课设计是使用思科模拟器搭建一个中小型校园网&#xff0c;当时花了几天时间查阅相关博客总算是做出来了&#xff0c;在验收后一直没管&#xff0c;在寒假想起来了简单分享一下&#xff0c;希望可以给有需求的小伙伴一些帮助 目录 一、设计要求 二、…

在npm上传属于自己的包

最近在整理代码&#xff0c;上传到npm方便使用&#xff0c;所以学习了如何在npm发布一个包&#xff0c;整理写成一篇文章和大家一起交流。 1、注册npm账号 npm | Home 2、确保是登录状态 &#xff08;在包目录下&#xff0c;终端执行 npm login) 按enter键自动打开页面&…

物联网(IoT)详解

物联网&#xff08;IoT&#xff09;详解 1. IoT定义简介2. IoT工作原理3. IoT关键技术4. 物联网与互联网区别5. IoT使用场景6. 开源物联网平台7. 参考资料 1. IoT定义简介 首先第一个问题&#xff0c;什么是物联网&#xff08;IoT&#xff09;? 物联网&#xff08;英文&#…

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

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

idea项目列表不出现,展示loading

2025年02月08 11:23:36 星期六 发生在webstorm中&#xff0c;跟其他idea类似 原因是将 ignore 插件升级到 4.5.5 版本 https://github.com/JetBrains/idea-gitignore/pull/933 解决方案&#xff1a;将ignore版本将为 4.5.4 我是将 4.5.5 降低为 4.5.4 正常显示文件夹了。

DeepSeek本地部署详细指南

DeepSeek本地部署详细指南 随着人工智能技术的飞速发展&#xff0c;本地部署大模型的需求也日益增加。DeepSeek作为一款开源且性能强大的大语言模型&#xff0c;提供了灵活的本地部署方案&#xff0c;让用户能够在本地环境中高效运行模型&#xff0c;同时保护数据隐私。以下是…

算法随笔_46: 最长公共前缀

上一篇:算法随笔_45: 车队-CSDN博客 题目描述如下: 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 示例 1&#xff1a; 输入&#xff1a;strs ["flower","flow","flight"] 输…

learn torch 01

pytorch学习 在安装完conda时&#xff0c;需要在windows上修改pip配置路径具体操作如下 文件管理器文件路径地址栏敲:%APPDATA%回车&#xff0c;快速进入C:\Users\电脑用户\AppData\Roaming文件夹中 新建pip文件夹并在文件夹中新建pip.ini配置文件 需要在pip.ini配置文件内容&a…

【Vue】在Vue3中使用Echarts的示例 两种方法

文章目录 方法一template渲染部分js部分方法一实现效果 方法二template部分js or ts部分方法二实现效果 贴个地址~ Apache ECharts官网地址 Apache ECharts示例地址 官网有的时候示例显示不出来&#xff0c;属于正常现象&#xff0c;多进几次就行 开始使用前&#xff0c;记得先…

分布式锁的实现 和 底层原理 以及都有什么问题?

目录 分布式锁的实现方式及底层原理 1. 基于数据库实现分布式锁 实现方式 底层原理 存在的问题 2. 基于 Redis 实现分布式锁 实现方式 底层原理 存在的问题 3. 基于 ZooKeeper 实现分布式锁 实现方式 底层原理 存在的问题 总结 分布式锁的实现方式及底层原理 1.…

13.10 统一配置管理中心:TranslationChain 架构的简洁配置管理方案

统一配置管理中心:TranslationChain 架构的简洁配置管理方案 1. 集中式配置文件设计 config/settings.yaml: # 多环境配置开关 env: production # development|test|production# 模型管理中心 models:openai:class: langchain_openai.ChatOpenAIparams

Ollama 简单 好用 好玩

简介 Ollama https://github.com/ollama/ollama/ 是一个基于 Go 语言 的 本地大语言模型运行框架&#xff0c;专注于本地化运行大型语言模型&#xff08;LLM&#xff09;的开源工具。 类 Docker 产品&#xff08;支持 list,pull,push,run 等命令&#xff09;&#xff0c;更好玩…

储能系统-系统架构

已更新系列文章包括104、61850、modbus 、单片机等&#xff0c;欢迎关注 IEC61850实现方案和测试-1-CSDN博客 快速了解104协议-CSDN博客 104调试工具2_104协议调试工具-CSDN博客 1 电池储能系统&#xff08;BESS&#xff09; 架构 电池储能系统主要包括、电池、pcs、本地控制…

Day88:加载游戏图片

在游戏开发中,加载和显示图片是非常常见的需求,尤其是在 2D 游戏 中,角色、背景、道具、敌人等都需要用图片来表示。今天,我们将学习如何在 Python 游戏开发中使用 Pygame 加载并显示图片。 1. 加载游戏图片的基本步骤 在 Pygame 中加载图片通常需要以下几个步骤: 导入 P…

解决 keep-alive 缓存组件中定时器干扰问题

当使用 keep-alive 缓存组件时&#xff0c;组件中的定时器可能会在组件被缓存后继续运行&#xff0c;从而干扰其他组件的逻辑。为了避免这种情况&#xff0c;可以通过以下方法解决&#xff1a; 1. 在组件的 deactivated 钩子中清理定时器 keep-alive 为缓存的组件提供了 acti…

百度高德地图坐标转换

百度地图和高德地图的侧重点不太一样。同样一个地名&#xff0c;在百度地图网站上搜索到的地点可能是商业网点&#xff0c;在高德地图网站上搜索到的地点可能是自然行政地点。 高德地图api 在高德地图中&#xff0c;搜索地名&#xff0c;如“乱石头川”&#xff0c;该地名会出…

网络安全溯源 思路 网络安全原理

网络安全背景 网络就是实现不同主机之间的通讯。网络出现之初利用TCP/IP协议簇的相关协议概念&#xff0c;已经满足了互连两台主机之间可以进行通讯的目的&#xff0c;虽然看似简简单单几句话&#xff0c;就描述了网络概念与网络出现的目的&#xff0c;但是为了真正实现两台主机…

QTreeView和QTableView单元格添加超链接

QTreeView和QTableView单元格添加超链接的方法类似,本文仅以QTreeView为例。 在QTableView仿Excel表头排序和筛选中已经实现了超链接的添加,但是需要借助delegate,这里介绍一种更简单的方式,无需借助delegate。 一.效果 二.实现 QHTreeView.h #ifndef QHTREEVIEW_H #def…