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 ...
随机推荐
- Linux’s init system & systemd
一.init system 1.计算机是如何启动的 以早期 Fedora 系统为例. 1.开机 2.BIOS 和 GRUB(引导加载程序) 3.Linux 内核启动后,init 进程 是在 Fedor ...
- 理解MVVM在react、vue中的使用
理解MVVM在react.vue中的使用 一:什么是MVC.为什么不用MVC 1:MVC的含义: M(modal):是应用程序中处理数据逻辑的部分. V (view) :是应用程序中数据显示的部分. ...
- Flutter安装入门教程
### 前言 Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作.在全世界,Flutter正在被越来越多的开发者和 ...
- Abp zero 登录 添加腾讯云验证码
腾讯云验证码是为网页.App.小程序开发者提供的安全验证服务,基于腾讯多年的大数据积累和人工智能决策引擎,构建智能分级验证模型,最大程度保护业务安全的同时,提供更精细化的用户体验. 腾讯云--> ...
- Kafka 的No kafka server to stop报错处理
使用kafka-server-stop.sh命令关闭kafka服务,发现无法删除,报错如下图No kafka server to stop 下面修改kafka-server-stop.sh将 PIDS ...
- 017.Kubernetes二进制部署检查集群
一 验证集群功能 1.1 检查节点状态 [root@k8smaster01 ~]# kubectl get nodes 1.2 创建测试文件 [root@k8smaster01 ~]# cd /opt ...
- 12. Go 语言文件处理
Go 语言文件处理 本章我们将带领大家深入了解一下 Go语言中的文件处理,重点在于文件而非目录或者通用的文件系统,特别是如何读写标准格式(如 XML 和 JSON 格式)的文件以及自定义的纯文本和二进 ...
- 设计模式-工厂模式(Factory)(创建型模式)
以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Product.h #pragma once class Product { public: ; protected: P ...
- JavaScript的函数以及循环和判断
1.什么是函数? 这个函数跟我们数学当中的函数不太一样,我们这个函数是一段定义好的代码,可以循环使用,(这样我们更方便). 2.函数的作用: 提升代码的可复用性,将一定代码进行预定义,需要的时候才触发 ...
- java8-计算时间差的方法
一.简述 在Java8中,我们可以使用以下类来计算日期时间差异: 1.Period 2.Duration 3.ChronoUnit 二.Period类 主要是Period类方法getYears(),g ...