linux系统编程(一)概述
glibc库封装了linux系统调用,并提供c语言接口
所以学习linux系统编程,主要参考glibc库系统调用相关api
一、进程控制:
| fork | 创建一个新进程 |
| clone | 按指定条件创建子进程 |
| execve | 运行可执行文件 |
| exit | 中止进程 |
| _exit | 立即中止当前进程 |
| getdtablesize | 进程所能打开的最大文件数 |
| getpgid | 获取指定进程组标识号 |
| setpgid | 设置指定进程组标志号 |
| getpgrp | 获取当前进程组标识号 |
| setpgrp | 设置当前进程组标志号 |
| getpid | 获取进程标识号 |
| getppid | 获取父进程标识号 |
| getpriority | 获取调度优先级 |
| setpriority | 设置调度优先级 |
| modify_ldt | 读写进程的本地描述表 |
| nanosleep | 使进程睡眠指定的时间 |
| nice | 改变分时进程的优先级 |
| pause | 挂起进程,等待信号 |
| personality | 设置进程运行域 |
| prctl | 对进程进行特定操作 |
| ptrace | 进程跟踪 |
| sched_get_priority_max | 取得静态优先级的上限 |
| sched_get_priority_min | 取得静态优先级的下限 |
| sched_getparam | 取得进程的调度参数 |
| sched_getscheduler | 取得指定进程的调度策略 |
| sched_rr_get_interval | 取得按RR算法调度的实时进程的时间片长度 |
| sched_setparam | 设置进程的调度参数 |
| sched_setscheduler | 设置指定进程的调度策略和参数 |
| sched_yield | 进程主动让出处理器,并将自己等候调度队列队尾 |
| vfork | 创建一个子进程,以供执行新程序,常与execve等同时使用 |
| wait | 等待子进程终止 |
| wait3 | 参见wait |
| waitpid | 等待指定子进程终止 |
| wait4 | 参见waitpid |
| capget | 获取进程权限 |
| capset | 设置进程权限 |
| getsid | 获取会晤标识号 |
| setsid | 设置会晤标识号 |
二、文件系统控制
1、文件读写操作
| fcntl | 文件控制 |
| open | 打开文件 |
| creat | 创建新文件 |
| close | 关闭文件描述字 |
| read | 读文件 |
| write | 写文件 |
| readv | 从文件读入数据到缓冲数组中 |
| writev | 将缓冲数组里的数据写入文件 |
| pread | 对文件随机读 |
| pwrite | 对文件随机写 |
| lseek | 移动文件指针 |
| _llseek | 在64位地址空间里移动文件指针 |
| dup | 复制已打开的文件描述字 |
| dup2 | 按指定条件复制文件描述字 |
| flock | 文件加/解锁 |
| poll | I/O多路转换 |
| truncate | 截断文件 |
| ftruncate | 参见truncate |
| umask | 设置文件权限掩码 |
| fsync | 把文件在内存中的部分写回磁盘 |
2、文件系统操作
| access | 确定文件的可存取性 |
| chdir | 改变当前工作目录 |
| fchdir | 参见chdir |
| chmod | 改变文件方式 |
| fchmod | 参见chmod |
| chown | 改变文件的属主或用户组 |
| fchown | 参见chown |
| lchown | 参见chown |
| chroot | 改变根目录 |
| stat | 取文件状态信息 |
| lstat | 参见stat |
| fstat | 参见stat |
| statfs | 取文件系统信息 |
| fstatfs | 参见statfs |
| readdir | 读取目录项 |
| getdents | 读取目录项 |
| mkdir | 创建目录 |
| mknod | 创建索引节点 |
| rmdir | 删除目录 |
| rename | 文件改名 |
| link | 创建链接 |
| symlink | 创建符号链接 |
| unlink | 删除链接 |
| readlink | 读符号链接的值 |
| mount | 安装文件系统 |
| umount | 卸下文件系统 |
| ustat | 取文件系统信息 |
| utime | 改变文件的访问修改时间 |
| utimes | 参见utime |
| quotactl | 控制磁盘配额 |
三、系统控制
| ioctl | I/O总控制函数 |
| _sysctl | 读/写系统参数 |
| acct | 启用或禁止进程记账 |
| getrlimit | 获取系统资源上限 |
| setrlimit | 设置系统资源上限 |
| getrusage | 获取系统资源使用情况 |
| uselib | 选择要使用的二进制函数库 |
| ioperm | 设置端口I/O权限 |
| iopl | 改变进程I/O权限级别 |
| outb | 低级端口操作 |
| reboot | 重新启动 |
| swapon | 打开交换文件和设备 |
| swapoff | 关闭交换文件和设备 |
| bdflush | 控制bdflush守护进程 |
| sysfs | 取核心支持的文件系统类型 |
| sysinfo | 取得系统信息 |
| adjtimex | 调整系统时钟 |
| alarm | 设置进程的闹钟 |
| getitimer | 获取计时器值 |
| setitimer | 设置计时器值 |
| gettimeofday | 取时间和时区 |
| settimeofday | 设置时间和时区 |
| stime | 设置系统日期和时间 |
| time | 取得系统时间 |
| times | 取进程运行时间 |
| uname | 获取当前UNIX系统的名称、版本和主机等信息 |
| vhangup | 挂起当前终端 |
| nfsservctl | 对NFS守护进程进行控制 |
| vm86 | 进入模拟8086模式 |
| create_module | 创建可装载的模块项 |
| delete_module | 删除可装载的模块项 |
| init_module | 初始化模块 |
| query_module | 查询模块信息 |
| *get_kernel_syms | 取得核心符号,已被query_module代替 |
四、内存管理
| brk | 改变数据段空间的分配 |
| sbrk | 参见brk |
| mlock | 内存页面加锁 |
| munlock | 内存页面解锁 |
| mlockall | 调用进程所有内存页面加锁 |
| munlockall | 调用进程所有内存页面解锁 |
| mmap | 映射虚拟内存页 |
| munmap | 去除内存页映射 |
| mremap | 重新映射虚拟内存地址 |
| msync | 将映射内存中的数据写回磁盘 |
| mprotect | 设置内存映像保护 |
| getpagesize | 获取页面大小 |
| sync | 将内存缓冲区数据写回硬盘 |
| cacheflush | 将指定缓冲区中的内容写回磁盘 |
五、网络管理
| getdomainname | 取域名 |
| setdomainname | 设置域名 |
| gethostid | 获取主机标识号 |
| sethostid | 设置主机标识号 |
| gethostname | 获取本主机名称 |
| sethostname | 设置主机名称 |
六、socket控制
| socketcall | socket系统调用 |
| socket | 建立socket |
| bind | 绑定socket到端口 |
| connect | 连接远程主机 |
| accept | 响应socket连接请求 |
| send | 通过socket发送信息 |
| sendto | 发送UDP信息 |
| sendmsg | 参见send |
| recv | 通过socket接收信息 |
| recvfrom | 接收UDP信息 |
| recvmsg | 参见recv |
| listen | 监听socket端口 |
| select | 对多路同步I/O进行轮询 |
| shutdown | 关闭socket上的连接 |
| getsockname | 取得本地socket名字 |
| getpeername | 获取通信对方的socket名字 |
| getsockopt | 取端口设置 |
| setsockopt | 设置端口参数 |
| sendfile | 在文件或端口间传输数据 |
| socketpair | 创建一对已联接的无名socket |
七、用户管理
| getuid | 获取用户标识号 |
| setuid | 设置用户标志号 |
| getgid | 获取组标识号 |
| setgid | 设置组标志号 |
| getegid | 获取有效组标识号 |
| setegid | 设置有效组标识号 |
| geteuid | 获取有效用户标识号 |
| seteuid | 设置有效用户标识号 |
| setregid | 分别设置真实和有效的的组标识号 |
| setreuid | 分别设置真实和有效的用户标识号 |
| getresgid | 分别获取真实的,有效的和保存过的组标识号 |
| setresgid | 分别设置真实的,有效的和保存过的组标识号 |
| getresuid | 分别获取真实的,有效的和保存过的用户标识号 |
| setresuid | 分别设置真实的,有效的和保存过的用户标识号 |
| setfsgid | 设置文件系统检查时使用的组标识号 |
| setfsuid | 设置文件系统检查时使用的用户标识号 |
| getgroups | 获取后补组标志清单 |
| setgroups | 设置后补组标志清单 |
八、进程间通信
| ipc | 进程间通信总控制调用 |
1、信号
| sigaction | 设置对指定信号的处理方法 |
| sigprocmask | 根据参数对信号集中的信号执行阻塞/解除阻塞等操作 |
| sigpending | 为指定的被阻塞信号设置队列 |
| sigsuspend | 挂起进程等待特定信号 |
| signal | 参见signal |
| kill | 向进程或进程组发信号 |
| *sigblock | 向被阻塞信号掩码中添加信号,已被sigprocmask代替 |
| *siggetmask | 取得现有阻塞信号掩码,已被sigprocmask代替 |
| *sigsetmask | 用给定信号掩码替换现有阻塞信号掩码,已被sigprocmask代替 |
| *sigmask | 将给定的信号转化为掩码,已被sigprocmask代替 |
| *sigpause | 作用同sigsuspend,已被sigsuspend代替 |
| sigvec | 为兼容BSD而设的信号处理函数,作用类似sigaction |
| ssetmask | ANSI C的信号处理函数,作用类似sigaction |
2、消息
| msgctl | 消息控制操作 |
| msgget | 获取消息队列 |
| msgsnd | 发消息 |
| msgrcv | 取消息 |
3、管道
| pipe | 创建管道 |
4、信号量
| semctl | 信号量控制 |
| semget | 获取一组信号量 |
| semop | 信号量操作 |
5、共享内存
| shmctl | 控制共享内存 |
| shmget | 获取共享内存 |
| shmat | 连接共享内存 |
| shmdt | 拆卸共享内存 |
2. linux man page:第2节是系统调用,第3节是glibc库函数,地址:https://www.kernel.org/doc/man-pages/
3. 相关书籍:unix环境高级编程,The Linux Programming Interface(作者是linux kernel man page维护者)
引用备注:
以上分类来自于ibm社区:https://www.ibm.com/developerworks/cn/linux/kernel/syscall/part1/appendix.html
linux系统编程(一)概述的更多相关文章
- Linux系统编程@进程通信(一)
进程间通信概述 需要进程通信的原因: 数据传输 资源共享 通知事件 进程控制 Linux进程间通信(IPC)发展由来 Unix进程间通信 基于System V进程间通信(System V:UNIX系统 ...
- Linux 系统编程 学习:10-线程:线程的属性
Linux 系统编程 学习:10-线程:线程的属性 背景 上一讲我们介绍了线程的创建,回收与销毁:简单地提到了线程属性.这一讲我们就来具体看看,线程的属性. 概述 #include <pthre ...
- Linux系统编程温故知新系列 --- 01
1.大端法与小端法 大端法:按照从最高有效字节到最低有效字节的顺序存储,称为大端法 小端法:按照从最低有效字节到最高有效字节的顺序存储,称为小端法 网际协议使用大端字节序来传送TCP分节中的多字节整数 ...
- linux系统编程之错误处理
在linux系统编程中,当系统调用出现错误时,有一个整型变量会被设置,这个整型变量就是errno,这个变量的定义在/usr/include/errno.h文件中 #ifndef _ERRNO_H /* ...
- LINUX系统编程 由REDIS的持久化机制联想到的子进程退出的相关问题
19:22:01 2014-08-27 引言: 以前对wait waitpid 以及exit这几个函数只是大致上了解,但是看REDIS的AOF和RDB 2种持久化时 均要处理子进程运行完成退出和父进程 ...
- Linux系统编程-setitimer函数
功能:linux系统编程中,setitimer是一个经常被使用的函数,可用来实现延时和定时的功能. 头文件:sys/time.h 函数原型: int setitimer(int which, cons ...
- Linux 系统编程
简介和主要概念 Linux 系统编程最突出的特点是要求系统程序员对它们工作的的系统的硬件和操作系统有深入和全面的了解,当然它们还有库和系统调用上的区别. 系统编程分为:驱动编程.用户空间编程和网络编程 ...
- Linux C 程序 文件操作(Linux系统编程)(14)
文件操作(Linux系统编程) 创建一个目录时,系统会自动创建两个目录.和.. C语言实现权限控制函数 #include<stdio.h> #include<stdlib.h> ...
- 读书笔记之Linux系统编程与深入理解Linux内核
前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linu ...
随机推荐
- .netcore3.0 System.Text.Json 日期格式化
.netcore3.0 的json格式化不再默认使用Newtonsoft.Json,而是使用自带的System.Text.Json来处理. 理由是System.Text.Json 依赖更少,效率更高. ...
- Nexus-在项目中使用Maven私服,Deploy到私服、上传第三方jar包、在项目中使用私服jar包
场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...
- SQLyog连接MySQL8.0报2058错误的解决方案
引言 用SQLyog连接MySQL8.0(社区版:mysql-installer-community-8.0.15.0.msi),出现错误2058(Plugin caching_sha2_passwo ...
- leaflet 结合 Echarts4 实现散点图(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...
- 团队项目之Scrum4
小组:BLACK PANDA 时间:2019.11.24 每天举行站立式会议 提供当天站立式会议照片一张 2 昨天已完成的工作 2 基本实现web富文本编辑功能 后台的编辑接口已经基本完成,还有一些b ...
- MySQL5.6与MySQL5.7安装的区别
一.MySQL5.6与MySQL5.7安装的区别 1.cmake的时候加入了boost 下载boost.org 2.初始化时 cd /application/mysql/bin/mysql 使用mys ...
- 设置自动获取IP和DNS
问题阐述 设置ipv4的自动获取时遇到一个问题,ip和dns自动获取可以确认设置,但是全局时就是报错,回头去看ipv4的ip和dns也还是原来的样子 由于一直使用的都是自动获取,很少会有主动设置ip或 ...
- css字体效果
text-shadow还没有出现时,大家在网页设计中阴影一般都是用photoshop做成图片,现在有了css3可以直接使用text-shadow属性来指定阴影.这个属性可以有两个作用,产生阴影和模糊主 ...
- 手把手教你安装Virtualbox,安装并运行虚拟机
一.安装VirtualBox. 官网:https://www.virtualbox.org/wiki/Downloads 首先,进入官网下载页面,单击Windows hosts 链接(图中红色方框), ...
- tensorflow基本用法个人笔记
综述 TensorFlow程序分为构建阶段和执行阶段.通过构建一个图.执行这个图来得到结果. 构建图 创建源op,源op不需要任何输入,例如常量constant,源op的输出被传递给其他op做 ...