当前位置: 首页 > article >正文

Linux系统编程-系统调用

目录一. 系统调用1.1 什么是系统调用二. open/close函数2.1 open函数2.2 close函数2.3 open函数常见的三种错误三. read/write函数3.1 read函数3.2 write函数3.3 使用read与write实现命令cp四.系统调用与库函数的比较4.1 使用fputc与fgetc实现cp命令4.2 预读入缓输出机制一. 系统调用1.1 什么是系统调用是由操作系统实现并提供外部应用程序的编程接口(Application Programming InterfaceAPI)。是应用程序同系统之间数据交互的桥梁。系统调用(内核提供的函数)操作系统的本质的程序代码而操作系统的核心程序叫内核只有系统调用才能进入内核空间例如“hello”如何打印在屏幕上实际上其实write函数并不是真正的系统调用而只是sys_write做了一层浅封装sys_write才是真正的系统调用write可以称其为系统函数。二. open/close函数2.1 open函数函数原型描述函数会打开由路径名指定的文件若文件不存在在某些情况下会创建文件。返回值成功返回一个文件描述符失败返回-1并且设置errno参数flags这些宏在头文件fcntl.h中O_RDONLY只读O_WRONLY只写O_RDWR读写O_APPEND追加O_CREAT不存在则创建O_EXCL是否存在O_TRUNC截断(有数据则清空)O_NONBLOCK非阻塞参数mode(是一个八进制数)创建文件时指定文件的访问权限。权限受umask的影响。结论是文件权限mode ~umaskumask是0002(一个八进制数)eg可得mode取0644文件权限是rw- r-- r--取0664文件权限是rw- rw- ---2.2 close函数函数原型描述关闭打开的一个文件描述符返回值成功返回0 失败返回-1并且设置error2.3 open函数常见的三种错误1、打开的文件不存在2、以写的方式打开只读文件3、以只写的方式打开目录三. read/write函数3.1 read函数函数原型描述从文件描述符fd中读取count字节的数据到缓冲区buf中。返回值成功返回读取的字节数 0表示读到结尾失败返回-1并且设置error。(注意还有另一种情况返回-1且error是EAGAIN或EWOULDBLOCK说明不是read失败而是以非阻塞的方式读一个设备/网络文件且文件里面无数据这个需要另行判断)3.2 write函数函数原型描述从缓冲区buf中最多读取count字节的数据并且写入文件描述符fd中返回值成功返回写入的字节数 0表示没东西可写失败返回-1并且设置error。3.3 使用read与write实现命令cp四.系统调用与库函数的比较4.1 使用fputc与fgetc实现cp命令这里使用命令strace来跟踪一个程序执行时所使用的系统调用这里可以看到虽然fgetc与fputc函数是一字节进行操作但是所使用的系统调用确实以4096字节为单位进行操作。再看看read与write这两个系统调用(为了与fgetc和fputc一致将BUFSIZE设置为1)这里可以看到read与write这两个系统调用是1字节进行操作的。4.2 预读入缓输出机制1、read与write只有系统调用才能进入到内核空间。从用户空间进入内核空间的时间消耗很大。当在程序中将buf的大小设置为1时read与write频繁的在用户区与内核区切换故很慢。故read、write这两个函数常被称为Unbuffered IO无用户级缓冲区。预读入与缓输出机制从内核到磁盘之间的数据交互是一个物理操作速度很慢频繁操作会导致速度下降图中红色的缓冲区是一个系统级缓存(大小一般是4096字节)当满时一次性的写入磁盘或者一次性从磁盘读出避免了频繁的物理操作。fputc与fgetc函数fputc与fgetc这两个库函数有一个自己的缓冲区(图中蓝色默认4096大小)当使用这两个函数进行读写时先读写到这个默认的缓冲区满了之后一次性刷新写入内核区避免了在用户区与内核去之间频繁的切换节省了时间。

相关文章:

Linux系统编程-系统调用

目录 一. 系统调用 1.1 什么是系统调用 二. open/close函数 2.1 open函数 2.2 close函数 2.3 open函数常见的三种错误 三. read/write函数 3.1 read函数 3.2 write函数 3.3 使用read与write实现命令cp 四.系统调用与库函数的比较 4.1 使用fputc与fgetc实现cp命令 …...

终极网盘下载加速指南:8大平台直链解析工具完全攻略

终极网盘下载加速指南:8大平台直链解析工具完全攻略 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...

GPT越狱与提示词注入攻防:一份超级资源地图解析

1. 项目概述:一份关于GPT“越狱”与安全攻防的超级资源地图如果你正在研究大语言模型(LLM),特别是像GPT这样的模型,并且对如何“解锁”其潜在能力、探究其系统边界,或是如何保护它免受恶意利用感兴趣&#…...

游戏手柄映射终极解决方案:AntiMicroX深度实战指南

游戏手柄映射终极解决方案:AntiMicroX深度实战指南 【免费下载链接】antimicrox Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. 项目地址: https://gitcode.com/GitHub_T…...

LLM对话系统错误检测与恢复机制实践

1. 项目背景与核心挑战在大型语言模型(LLM)对话系统的实际应用中,错误检测与恢复机制是保障交互质量的关键环节。去年我在开发一个客服对话系统时,曾遇到用户连续三次纠正同一问题但系统仍无法正确理解的情况——这直接促使我深入…...

从‘失真’到‘清晰’:一个三极管放大电路调试失败的真实故事与复盘

从‘失真’到‘清晰’:一个三极管放大电路调试失败的真实故事与复盘 那是一个闷热的夏夜,我的工作台上散落着各种电阻、电容和三极管。作为一名电子爱好者,我正尝试搭建一个简单的音频放大电路,希望能将手机输出的微弱信号放大到足…...

AI情报聚合系统:基于Python与LLM的自动化市场监测工具

1. 项目概述:一个为AI战略家打造的智能市场情报系统 如果你和我一样,每天被arXiv、GitHub、Hugging Face上涌出的海量AI信息淹没,试图从中筛选出真正有战略价值的信号,那你一定明白这有多痛苦。手动追踪不仅耗时,还容…...

3步快速上手:免费地形生成工具实战指南

3步快速上手:免费地形生成工具实战指南 【免费下载链接】heightmapper interactive heightmaps from terrain data 项目地址: https://gitcode.com/gh_mirrors/he/heightmapper Heightmapper是一款革命性的免费开源工具,专门为3D建模爱好者和游戏…...

如何快速掌握Dell Fans Controller:告别服务器噪音的完整指南

如何快速掌握Dell Fans Controller:告别服务器噪音的完整指南 【免费下载链接】dell_fans_controller A tool for control the Dell server fans speed, it sends the control instruction by ipmitool over LAN for Windows, it is a GUI application which is bui…...

不只是点“输出”:用Allegro 16.6为4层板生成Gerber文件的完整配置流程详解

不只是点“输出”:用Allegro 16.6为4层板生成Gerber文件的完整配置流程详解 在PCB设计领域,Gerber文件是设计与生产之间的桥梁,而Allegro作为行业领先的EDA工具,其Gerber文件生成功能既强大又复杂。对于许多工程师来说&#xff0c…...

【Java中间件适配测试黄金法则】:20年资深架构师亲授5大避坑指南与3套可落地验证框架

更多请点击: https://intelliparadigm.com 第一章:Java中间件适配测试的核心挑战与认知重构 Java中间件(如Dubbo、RocketMQ、ShardingSphere、Nacos)在云原生迁移与国产化替代进程中,其适配测试已远超传统“功能通”范…...

Windows HEIC缩略图终极指南:3分钟让iPhone照片在电脑上完美预览

Windows HEIC缩略图终极指南:3分钟让iPhone照片在电脑上完美预览 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 你是…...

Clawstash:为OpenClaw打造开箱即用的加密增量备份方案

1. 项目概述:为你的AI工作流打造“数字保险箱”如果你和我一样,把OpenClaw当作日常工作的核心生产力工具,那你一定知道~/.openclaw/这个目录里藏着多少宝贝。从精心调教的智能体配置、积累数月的工作空间文件,到那些包含关键上下文…...

企业级AI Agent集中管控平台:OpenClaw longbot-system架构与实战

1. 项目概述:企业级AI自动化Agent的“中枢神经”最近几年,AI Agent的概念火得一塌糊涂,从写代码的Devin到能上网冲浪的GPTs,大家都在畅想一个由AI自主完成复杂任务的未来。但说实话,对于企业,尤其是对安全、…...

别再浪费手机GPU了!手把手教你用Termux编译NCNN,解锁安卓Vulkan硬件加速

解锁安卓设备GPU潜能:Termux环境下NCNN与Vulkan加速实战指南 在移动端AI应用开发领域,一个长期存在的误解是:智能手机的GPU性能不足以支撑高效的神经网络推理。这种观点尤其针对老旧安卓设备更为普遍。然而实际情况是,大多数开发者…...

保姆级教程:用Metasploit的socks5模块给内网渗透开条‘隧道’(附Proxychains配置)

内网渗透实战:Metasploit与Proxychains构建Socks5代理全指南 当你通过Metasploit获得初始立足点后,如何将这个"入口"转化为探索整个内网的"通道"?本文将手把手带你构建完整的代理链路,从路由配置到代理验证&a…...

别再傻傻分不清了!一张图搞懂FMEA、FTA、FMECA和FRACAS到底怎么用

可靠性工程四大工具:FMEA、FTA、FMECA与FRACAS实战指南 在可靠性工程领域,FMEA、FTA、FMECA和FRACAS这四个专业术语常常让初入行的工程师感到困惑。它们看似相似却又各具特色,如同工具箱中不同功能的扳手——用对了事半功倍,用错…...

从MRI数据到GNN模型:手把手教你用BrainGB复现脑网络分类实验(附代码避坑指南)

从MRI数据到GNN模型:手把手教你用BrainGB复现脑网络分类实验(附代码避坑指南) 在医学影像分析与图神经网络(GNN)的交叉领域,脑网络研究正成为探索神经系统疾病与认知功能的新前沿。BrainGB作为首个专为脑网…...

在Node.js后端服务中集成Taotoken调用GPT模型

在Node.js后端服务中集成Taotoken调用GPT模型 1. 环境准备与配置 在开始集成Taotoken之前,确保你的Node.js开发环境满足以下条件: Node.js版本16或更高(建议18)已初始化npm或yarn项目安装openai官方npm包(当前示例使…...

本地AI助手安全沙箱:清单驱动架构与四层容器隔离实践

1. 项目概述:一个运行在本地安全沙箱中的个人AI助手 如果你和我一样,对AI助手的能力感到兴奋,但又对让它直接访问你的电脑文件、浏览器历史或SSH密钥感到不安,那么Lobster-TrApp这个项目,可能就是你在寻找的答案。简单…...

GitHub自动化操作技能包:仓库创建与推送安全检查实践

1. 项目概述:GitHub自动化操作技能包的设计与实现如果你和我一样,长期在多个项目间切换,频繁地与GitHub打交道,那么你肯定也经历过这样的场景:每次新建一个仓库,都要手动设置.gitignore、README.md、许可证…...

在多轮对话应用中观察Taotoken路由对响应连贯性的影响

在多轮对话应用中观察Taotoken路由对响应连贯性的影响 1. 多轮对话的技术挑战 在构建需要长时间上下文对话的应用时,开发者面临的核心挑战是如何确保对话记忆的连贯性。这类应用通常需要维护包含数十轮甚至上百轮对话的上下文,任何中间环节的响应断裂都…...

当solidworks遇见快马ai:探索自然语言生成草图与智能优化设计的新可能

当SolidWorks遇见快马AI:探索自然语言生成草图与智能优化设计的新可能 最近在做一个机械设计项目时,突然想到:如果能用自然语言描述设计需求,AI就能自动生成初步草图该多好。没想到在InsCode(快马)平台上尝试后,真的实…...

借助 Taotoken 模型广场为不同任务选择合适的大模型

借助 Taotoken 模型广场为不同任务选择合适的大模型 1. 理解模型选型的基本维度 在实际开发中,文本生成、代码编写和逻辑推理等任务对模型能力的需求各不相同。Taotoken 模型广场提供了多维度的筛选能力,帮助开发者快速定位适合特定任务的模型。选型时…...

开发者在海外如何通过Taotoken稳定调用国内优化的大模型

开发者在海外如何通过Taotoken稳定调用国内优化的大模型 1. 跨地域调用的核心挑战 对于身处海外但需要服务国内用户或处理中文内容的开发者而言,直接调用国内大模型API常面临网络延迟高、连接不稳定等问题。这不仅影响开发效率,也可能导致终端用户体验…...

Sunshine游戏串流主机:打破设备界限,打造你的个人云游戏平台

Sunshine游戏串流主机:打破设备界限,打造你的个人云游戏平台 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否曾梦想过在客厅大屏电视上畅玩书房里的P…...

终极AMD Ryzen处理器深度调试指南:全面掌握SMUDebugTool硬件调优技巧

终极AMD Ryzen处理器深度调试指南:全面掌握SMUDebugTool硬件调优技巧 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地…...

别再只会画基础火山图了!用ggplot2给你的差异基因分析结果加点‘颜值’(附完整代码)

用ggplot2打造高颜值差异基因火山图:从基础到进阶的视觉升级指南 在生物信息学分析中,差异基因表达研究是揭示生物学机制的关键步骤。而火山图作为差异分析结果可视化的标准工具,其质量直接影响研究成果的呈现效果。许多研究者虽然掌握了基础…...

3分钟极速上手:DS4Windows让PS4手柄在Windows上完美工作

3分钟极速上手:DS4Windows让PS4手柄在Windows上完美工作 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows 还在为PS4手柄在Windows电脑上无法直接使用而烦恼吗?DS4Wi…...

Redis分布式锁进阶第十四篇

Redis分布式锁进阶第十四篇:全链路高频线上死锁深度汇总 终极避坑手册 架构师统一落地标准 一、本篇前置衔接 前面十三篇,我们从手写锁、Redisson落地、集群容错、联锁治理、监控巡检再到混沌压测,把分布式锁全链路实操全部落地。本篇第十…...