linux-系统函数

Linux 系统函数详解

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

1. 文件操作函数
c 复制代码
#include <fcntl.h>
int open(const char *pathname, int flags, mode_t mode); // 打开文件
ssize_t read(int fd, void *buf, size_t count);          // 读取文件
ssize_t write(int fd, const void *buf, size_t count);  // 写入文件
int close(int fd);                                     // 关闭文件
  • 示例 :复制文件内容

    c 复制代码
    int src = open("a.txt", O_RDONLY);
    int dst = open("b.txt", O_WRONLY | O_CREAT, 0644);
    char buf[1024];
    ssize_t bytes = read(src, buf, sizeof(buf));
    write(dst, buf, bytes);
    close(src); close(dst);
2. 进程控制函数
c 复制代码
#include <unistd.h>
pid_t fork(void);                   // 创建子进程
int execve(const char *pathname, char *const argv[], char *const envp[]); // 执行程序
pid_t waitpid(pid_t pid, int *status, int options); // 等待进程结束
  • 进程创建流程

    c 复制代码
    pid_t pid = fork();
    if (pid == 0) { 
        execl("/bin/ls", "ls", "-l", NULL);  // 子进程执行命令
    } else {
        waitpid(pid, NULL, 0);  // 父进程等待
    }
3. 进程间通信(IPC)
  • 管道

    c 复制代码
    int pipe(int pipefd[2]);  // 创建管道
    // pipefd[0]读端, pipefd[1]写端
  • 共享内存

    c 复制代码
    void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
4. 内存管理函数
c 复制代码
void *malloc(size_t size);     // 动态内存分配
void free(void *ptr);          // 释放内存
int brk(void *addr);           // 调整堆内存边界
void *sbrk(intptr_t increment);
5. 信号处理函数
c 复制代码
#include <signal.h>
int kill(pid_t pid, int sig);          // 发送信号
sighandler_t signal(int signum, sighandler_t handler); // 注册信号处理器
  • 常用信号
    • SIGINT (Ctrl+C)
    • SIGKILL (强制终止)
    • SIGSEGV (段错误)
6. 网络通信函数
c 复制代码
#include <sys/socket.h>
int socket(int domain, int type, int protocol);  // 创建套接字
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); // 绑定地址
int listen(int sockfd, int backlog);             // 监听连接
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); // 接受连接
7. 系统信息函数
c 复制代码
#include <unistd.h>
long sysconf(int name);  // 获取系统配置值
// 示例:获取页大小
long page_size = sysconf(_SC_PAGESIZE);

关键特性

  1. 直接内核交互

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

  2. 错误处理

    失败时返回 -1 并设置 errno

    c 复制代码
    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 命令可追踪进程的系统调用:

bash 复制代码
strace -e trace=open,read ./my_program

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

相关推荐
AI行业学习13 分钟前
CC-Switch 下载、安装windows\macOS \Linux 安装
linux·运维·macos
江南风月16 分钟前
WGCLOUD监控系统的Restful Http接口一览
运维·zabbix·运维开发·prometheus
一拳一个娘娘腔25 分钟前
【SRC漏洞挖掘系列】第15期:自动化与AI赋能 —— 打造你的专属“漏洞挖掘机”
运维·人工智能·自动化
mosaic_born25 分钟前
systemctl restart reload enable 重启服务时的区别
linux
文青小兵43 分钟前
Linux云计算——docker compose haibor elfk (四)
linux·服务器·docker·云计算
思麟呀1 小时前
C++11并发编程:互斥锁
linux·开发语言·c++·windows
顺风尿一寸1 小时前
深度解析 Linux touch 命令:从用户输入到磁盘 Inode 的完整旅程
linux
老毛肚1 小时前
Docker Desktop 介绍
运维·docker·容器
j_xxx404_1 小时前
Linux 线程日志系统设计:从策略模式、RAII 到 pthread 线程安全与内核写入路径|附源码
linux·运维·服务器·开发语言·c++·人工智能·策略模式
明天…ling1 小时前
CentOS 7 安装 Docker 踩坑全记录(含 sudo 权限、yum 源失效、命令报错解决方案)
linux·docker·centos