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

linux-系统函数

Linux 系统函数详解

Linux 系统函数是用户程序与内核交互的底层接口,通过系统调用(syscall)实现。以下是核心分类及典型函数:

1.文件操作函数
#include<fcntl.h>intopen(constchar*pathname,intflags,mode_tmode);// 打开文件ssize_tread(intfd,void*buf,size_tcount);// 读取文件ssize_twrite(intfd,constvoid*buf,size_tcount);// 写入文件intclose(intfd);// 关闭文件
  • 示例:复制文件内容
    intsrc=open("a.txt",O_RDONLY);intdst=open("b.txt",O_WRONLY|O_CREAT,0644);charbuf[1024];ssize_tbytes=read(src,buf,sizeof(buf));write(dst,buf,bytes);close(src);close(dst);
2.进程控制函数
#include<unistd.h>pid_tfork(void);// 创建子进程intexecve(constchar*pathname,char*constargv[],char*constenvp[]);// 执行程序pid_twaitpid(pid_tpid,int*status,intoptions);// 等待进程结束
  • 进程创建流程
    pid_tpid=fork();if(pid==0){execl("/bin/ls","ls","-l",NULL);// 子进程执行命令}else{waitpid(pid,NULL,0);// 父进程等待}
3.进程间通信(IPC)
  • 管道
    intpipe(intpipefd[2]);// 创建管道// pipefd[0]读端, pipefd[1]写端
  • 共享内存
    void*mmap(void*addr,size_tlength,intprot,intflags,intfd,off_toffset);
4.内存管理函数
void*malloc(size_tsize);// 动态内存分配voidfree(void*ptr);// 释放内存intbrk(void*addr);// 调整堆内存边界void*sbrk(intptr_tincrement);
5.信号处理函数
#include<signal.h>intkill(pid_tpid,intsig);// 发送信号sighandler_tsignal(intsignum,sighandler_thandler);// 注册信号处理器
  • 常用信号
    • SIGINT(Ctrl+C)
    • SIGKILL(强制终止)
    • SIGSEGV(段错误)
6.网络通信函数
#include<sys/socket.h>intsocket(intdomain,inttype,intprotocol);// 创建套接字intbind(intsockfd,conststructsockaddr*addr,socklen_taddrlen);// 绑定地址intlisten(intsockfd,intbacklog);// 监听连接intaccept(intsockfd,structsockaddr*addr,socklen_t*addrlen);// 接受连接
7.系统信息函数
#include<unistd.h>longsysconf(intname);// 获取系统配置值// 示例:获取页大小longpage_size=sysconf(_SC_PAGESIZE);

关键特性

  1. 直接内核交互
    系统调用通过软中断(如int 0x80syscall指令)触发内核模式切换。

  2. 错误处理
    失败时返回-1并设置errno

    if(open("file",O_RDONLY)==-1){perror("open failed");// 输出"open failed: No such file or directory"}
  3. 性能影响
    上下文切换开销较高,需避免频繁调用(如批量读写替代单字节操作)。

开发建议

  1. 使用man 2 <函数名>查看手册(如man 2 open
  2. 优先使用标准库封装(如fopen替代open)以提升可移植性
  3. 多线程环境下需注意函数可重入性(如用_r后缀的线程安全版本)

通过strace命令可追踪进程的系统调用:

strace-etrace=open,read ./my_program

完整函数列表详见 Linux 内核文档或syscalls(2)手册页。

http://www.jsqmd.com/news/562621/

相关文章:

  • 当BFD不可用时:用华为NQA+静态路由实现低成本链路监测(含ICMP测试例详解)
  • CRC-16校验原理与Modbus应用实践
  • 2026离心式固液分离靠谱厂家推荐:餐厨垃圾固液分离/餐厨垃圾离心机/高速卧螺离心机/三相分离离心机/选择指南 - 优质品牌商家
  • 深信服SIP-1000 Y2100升级3.0.3Y全流程避坑指南(附前置补丁包下载)
  • Qt5使用QNetworkAccessManager实现FTP文件传输
  • vislib_vex5:面向VEX V5的嵌入式视觉处理库
  • 计算机毕业设计springboot智能汽车租赁系统 基于SpringBoot的智慧出行车辆共享服务平台设计与实现 SpringBoot框架下城市智能租车与车辆调度管理系统开发
  • YOLOv5从安装到实战:手把手教你用COCO预训练模型检测日常物品
  • 2026年贵阳装修指南:五家实力派本地公司深度解析与联系之道 - 2026年企业推荐榜
  • 解锁3D打印新境界:Blender 3MF插件全面指南 [特殊字符]
  • 浙江酱香白酒选购全攻略:2026年3月信誉厂家深度解析与推荐 - 2026年企业推荐榜
  • 避坑!uniapp的midButton在微信小程序不生效?这里有解决方案
  • 单片机电源电路设计:从3.3V到5V系统详解
  • Sentinel-1 SAR数据预处理后,如何在QGIS里做地表变化监测?一个完整案例
  • 2026医用中心供氧系统优质厂家推荐:弥散供氧系统/手术室净化工程施工/手术室净化系统/手术室净化装修工程厂家/选择指南 - 优质品牌商家
  • xshell连接VMware虚拟机
  • 5大场景解锁:用ImageGlass重构你的图像浏览体验
  • 3种实用方法帮你找到机器学习模型的最佳阈值(附Python代码示例)
  • Totem Library:面向教育机器人的轻量级BLE/串口通信中间件
  • USV运动控制基础(一):无人艇运动学与动力学模型如何建立
  • CW32单片机多功能测试笔设计与实现
  • Cursor试用限制突破方案:go-cursor-help工具解锁无限AI编程体验
  • ESP8266轻量级按钮状态MQTT同步库
  • 2026武汉漏水维修服务商五强榜:专业团队如何选择? - 2026年企业推荐榜
  • 嵌入式系统元器件选型7大原则与实战指南
  • League Akari:英雄联盟终极智能助手完整使用指南
  • Bluepad32:NINA-W10板载ESP32的游戏手柄HID固件库
  • 5个环保主题HTML网页设计实战:从零到一构建绿色网站
  • 程序员效率升级:明基RD系列编程显示器型号解析
  • SMT贴片价格构成与成本优化实战解析