读书之unix环境高级编程_简单笔记1(初步)

手头有比较多的技术书籍,弃之可惜,放之惭愧,借助空闲时间,先草读,再demo整理。

unix环境高级编程 草读简单整理,为下一步整理细节技术点做准备(仅个人笔记)。

基本的文件操作,线程,进程,系统,进程间通信,终端控制等

1:文件和目录

demo1 :实现ls的功能,列出所有的目录文件 opendir

demo2:从标准输入读,向标准输出写。 > < read write getc putc

demo3:获取进程id gitpid() 组id 线程id /etc/group

demo4:多进程,从标准输入读入指令并执行。 专门进程执行 execlp

demo5: strerror和perror 打印错误字符串

demo6:捕获终止信号,并做相关处理

demo7:time -p指令 测量指令消耗时长

demo8:printf底层调用write系统调用?

demo9:malloc和sbrk系统调用

2:unix标准和实现

demo1:了解unix相关基础头文件。

demo2:limits中的相关限制 (ISO C和POSIX限制)

demo3:sysconf,pathconf,fpathconf函数使用 获取相关系统参数,比如 返回页面大小,打开文件描述符等。

​ 为路径名动态分配空间,确定描述符的个数。

demo4:基本系统数据类型

3:文件IO

demo1:open,create,lseek

demo2:read,write 从标准输入复制到标准输出 缓冲区大小对性能的影响 开启同步写通过fcntl

demo3:文件共享 内核处理文件打开的结构体及存储方式。 v-node节点 多进程打开同一个文件的影响

demo4:原子操作 相关的函数 pread 和pwrite dup和dup2(原子操作)

demo5:延迟写 sync fsync fdatasync

demo6:fcntl 改变打开文件属性 整理该接口。 对文件描述符设置属性进行操作demo

demo7:预了解ioctl函数

demo8:/dev/fd/ 0 1 2 和/dev/stdin stdout stderr等相关

4:文件和目录

demo0:获取文件或者目录状态信息 stat fstat lstat fstatat 结构体stat 中存储文件类型等相关信息 其中st_mode中相关必要信息 用户用户组信息,文件访问权限 所有权等。

demo1:权限测试 access 和faccessat 测试文件的访问权限,是否有权限

demo3:umask 可以设置用户的访问权限,对文件。 类似于open和create时的参数 也是一个指令。

demo4:代码中chmod fchmod fchmodat 改权限。

demo5:chown fchown fchownat lchown 改文件的用户id和组id

demo6:空洞文件的查看 ls -l指令和du -s查看占用块大小 wc -c 查看实际字符数 设置环境变量可以改变du代表的块大小,默认512字。

demo7:文件截断 truncate ftruncate 以及打开文件时 O_TRUNC 修改文件大小?

demo8:文件系统,从分区到i节点。

demo9:链接文件 link linkat unlink unlinkat remove 以及df指令查看权限。

demo10:文件和目录的重命名 rename 和 renameat

demo11:符号链接和硬链接的区别? 符号链接用cat无效 syslink syslinkat readlink readlinkat

demo12:文件的时间 st_atim st_mtim st_ctim 以及那些操作函数会对其有影响。

​ 修改访问时间,futimens utimensat utimes

demo13:创建删除目录 mkdir mkdirat rmdir ext2 ext3 ext4 和mount命令

demo14:读目录 opendir fdopendir readdir rewinddir closedir telldir seekdir 递归遍历目录 按类型计数demo

demo15:更改当前工作目录chdir,fchdir 以及底层原理 getcwd获取完整绝对路径

demo16:设备特殊文件,主,次设备号 major minor 的demo

demo17:文件访问权限位整理总结。

5:标准IO库 操作文件流

demo0:fwide设置流的定向,flush刷新缓冲,setbuf,setvbuf打开或者关闭缓冲机制 设置使用自己的缓冲区,fflush,

demo1:流操作,fopen,freopen,fdopen,fclose,

===》getc,fgetc,getchar ferror feof clearerr ungetc(压回流中) putc fputc putchar

demo2:fgets gets fputs puts行操作 fread fwrite二进制io操作

demo3:定位流 ftell fseek rewind ftello fseeko fgetpos fsetpos

demo4:格式化io printf fprintf dprintf sprintf snprintf vprintf vfprintf vdprintf vsprintf vsnprintf

demo5: scanf fscanf sscanf vscanf vfscanf vsscanf fileno(获取文件流的描述符)

demo6:对各个标准io流打印缓冲状态信息

demo7:临时文件 tmpnam生成文件名 tmpfile创建临时文件 mkdtemp mkstemp 创建唯一临时目录 文件

demo9:setbuf,setvbuf设置使用自己的缓冲区, fmemopen创建文件流对象,与内存缓冲区关联,像操作文件一样操作缓冲区。

===》open_memstream open_wmemstream 创建流面向字节,宽字节

6:系统数据文件和信息 /etc下文件信息 时间相关函数

demo0:了解 /etc/passwd和/etc/group 了解finger指令

demo1:getpwuid getpwnam getpwent setpwent endpwent 获取口令相关,如用户id对应的用户名和家目录

demo2:getspnam getspent setspent endspent 阴影口令 获取阴影密码文件中的信息 注意不同操作系统下阴影口令文件位置

demo3:组文件 getgrgid getgrnam getgrent setgrent endgrent

demo4:附属组 getgroups setgroups initgroups

demo5:其他数据文件及操作 /etc/services /etc/networks /etc/hosts /etc/protocols

demo6:系统标识 uname gethostname

demo7:时间和日期 time clock_gettime clock_getres clock_settime gettimeofday(已弃用但精度更高)

===》gmtime localtime mktime strftime strftime_l

7:进程环境

demo0: exit _Exit _exit 终止进程 atexit(注册终止时执行的函数) 命令行参数main函数获取

demo1:环境表 extern char **environ获取信息, 存储空间安排(正文,初始化,未初始化,堆,栈)

demo2:共享库的了解。 malloc calloc realloc 以及sbrk的关系,字节对齐。

====》相关库 libmalloc vmalloc quick-fit jemalloc TCMalloc alloca

demo3:环境变量 getenv putenv setenv unsetenv

demo4:函数setjmp和longjmp ===>goto

demo5:自动变量,寄存器变量,易失变量的测试demo

demo6:进程资源限制 getrlimit setrlimit 打印当前进程资源demo,比如当前进程的CPU时间限制

8:进程控制

demo0:id为0的进程 以及init进程 id为2页守护进程

demo1:getpid getppid getuid geteuid getgid getegid fork以及写时复制 相关内容的共享 vfork 不将父进程的地址空间完全复制到子进程

demo2:进程的exit以及异常退出等。

demo3:wait 和waitpid waitid wait3 wait4

demo4:子进程和父进程的竞态

demo5:子进程一般调用exec执行新程序 execl execv execle execve execlp execvp fexecve

demo6:setuid和setgid 用户和组id setreuid setregid seteuid setegid

demo7:解释器文件 类似于shell文件 用execl调用测试 awk指令

demo8:system函数的内部原理以及使用 实际是创建进程 调用execl 以及对信号等的完善处理 system函数demo

demo9:进程会计 记录进程命名 CPU时间 用户id 组id等必要信息 终止时的信息

===》文件内容查看信息以及通过结构打印(读进程会计文件) sa, ac, lastcomm, accton等

demo10:getpwuid(getuid()) getlogin()

demo11:进程调度,优先级相关 nice getpriority setpriority demo了解其对进程调度的影响

demo12:进程时间 times 获取进程时间demo

9:进程关系

demo0:/etc/ttys telnet网络登陆

demo1:进程组 getpgrp getpgid setpgid

demo2:session会话 getsid setsid 以及控制终端 session的结构体信息

demo3:前台进程组 tcgetpgrp tcsetpgrp tcgetsid 获取会话首进程的进程组id

demo4:pr指令 作业控制,以及相关信号 前台进程,后台进程以及相关信号控制进程。

demo5:crypt 指令 ps -o指令

demo6:孤儿进程,孤儿进程组。

demo7:session的结构体信息

10:信号

demo0:信号相关头文件 signal.h 梳理相关系统信号

demo1:signal函数 处理信号,捕获信号,忽略信号?

demo2:有些函数底层,可以被信号中断。 如read等

demo3:可重入函数 以及 信号处理函数中调用不可重入函数(全局或者静态变量)。

demo4:SIGCLD信号的含义 以及demo处理

demo5:可靠信号和不可靠信号 进程对应的信号屏蔽字

demo6:kill函数和 raise函数 处理信号

demo7:alarm 超时产生信号 pause 挂起直到捕获信号

demo8:结合信号 实现sleep的功能,带时间限制的read

demo9:处理多个信号,信号集 sigemptyset sigfillset sigaddset sigdelset sigismember

demo10:进程信号屏蔽字 sigprocmask sigpending

demo11:sigaction 检查和修改信号和信号对应的执行函数

demo12:自实现signal函数 以及对应的函数返回值梳理。

demo13:sigsetjmp siglongjmp 实现系统屏蔽的信号字调用。

demo14:sigsuspend 原子操作恢复信号屏蔽字,使进程休眠。 信号屏蔽恢复成之前旧值

demo15:利用信号实现父子进程之间的同步。

demo16:函数abort的底层并实现。

demo17:函数system调用ed编辑器,并捕获信号。

demo18:利用信号实现可靠的 sleep nanosleep clock_nanosleep

demo19:信号队列的支持 sigqueue

demo20:作业控制信号 等必要信号的梳理和处理 如SIGTSTP信号的处理

demo21:信号名和编号 psignal psiginfo strsignal sig2str str2sig 打印出来demo

11:线程

demo0:进程可以看成是一个控制线程,线程标识pthread_t

demo1:pthread_equal pthread_self pthread_create 创建线程,打印线程id,比较线程id

demo2:pthread_exit pthread_join 线程终止

demo3:pthread_cancel 取消线程 pthread_cleanup_push pthread_cleanup_pop 线程清理处理程序 pthread_cancel_push pthread_detach

demo4:线程同步互斥量: pthread_mutex_init pthread_mutex_destroy pthread_mutex_lock pthread_mutex_trylock pthread_mutex_unlock

====》demo 实现一个结构 访问 多个互斥量,避免死锁demo

demo5:pthread_mutex_timedlock 不建议使用,会有诡异死锁 比如多个线程用这个函数获取锁

demo6:读写锁 pthread_rwlock_init pthread_rwlock_destroy pthread_rwlock_rdlock pthread_rwlock_wrlock pthread_rwlock_unlock

====》pthread_rwlock_tryrdlock pthread_rwlock_trywrlock 搜索频率高与操作频率时使用读写锁。

====》pthread_rwlock_timedrdlock pthread_rwlock_timedwrlock 带超时的读写锁

demo7:条件变量 无竞争方式等待特定条件发生 与互斥量一起使用

====》pthread_cond_t pthread_cond_init pthread_cond_destroy PTHREAD_COND_INITIALIZER

====》pthread_cond_wait pthread_cond_timedwait 以及内部超时时间的获取?

====》pthread_cond_signal pthread_cond_broadcast 发信号

demo8:自旋锁忙等 pthread_spin_init pthread_spin_destroy

====》pthread_spin_lock pthread_spin_trylock pthread_spin_unlock

demo9:屏障 类似于pthread_join 一组线程都在某个点上等待,所有都到达才执行。

====》pthread_barrier_init pthread_barrier_destory pthread_barrier_wait

====》多个线程使用屏蔽进行同步demo (堆算法对大数据排序时使用,使用多线程分解,然后合并)

12:线程控制

demo0:线程限制 用sysconf进行获取相关限制

demo1:线程属性 pthread_attr_init pthread_attr_destroy pthread_detach设置退出时回收资源?

demo2:pthread_attr_getdetachstate pthread_attr_setdetachstate

demo3:pthread_attr_getstack pthread_attr_setstack 设置线程的虚拟内存

demo4:pthread_attr_getstacksize pthread_attr_setstacksize pthread_attr_getguardsize pthread_attr_setguardsize 线程属性对象的大小 线程属性对象中保护区的大小

demo5:线程互斥属性 pthread_mutexattr_init pthread_mutexattr_destory pthread_mutexattr_getpshared pthread_mutexattr_setpshared 共享属性?

====》多个线程访问同一个同步对象 共享属性?

====》pthread_mutexattr_getrobust pthread_mutexattr_setrobust 健壮的互斥量属性 鲁棒性?

====》pthread_mutex_consistent 让互斥量能正常使用

====》pthread_mutexattr_gettype pthread_mutexattr_settype 得到互斥量属性

======》汇总demo 使用递归互斥量demo

demo6:读写锁属性 pthread_rwlockattr_init pthread_rwlockattr_destroy

====》 pthread_rwlockattr_getpshared pthread_rwlockattr_setpshared 进程共享属性

====》pthread_condattr_init pthread_condattr_destroy 条件变量属性 pthread_condattr_getpshared pthread_condattr_setpshared pthread_condattr_getclock pthread_condattr_setclock

====》pthread_barrierattr_init pthread_barrierattr_destroy 屏障属性 pthread_barrierattr_getpshared pthread_barrierattr_setpshared

demo7:重入,线程安全和不保证线程安全的函数

====》管理文件对象FILE的方法 ftrylockfile flockfile funlockfile getchar_unlocked getc_unlocked putchar_unlocked putc_unlocked

====》getenv的可重入和不可重入以及安全版本 demo

demo8:线程特定数据,私有数据

====》pthread_key_create pthread_key_delete pthread_once

====》pthread_getspecific pthread_setspecific

====》取消 pthread_setcancelstate pthread_testcancel pthread_setcanceltype

demo9:线程和信号 线程信号屏蔽字

====》pthread_sigmask sigwait pthread_kill 线程中同步信号处理

demo10:pthread_atfork 和fork 处理fork后锁的问题

demo11:多线程并发操作文件 用pread pwrite

13:守护进程

demo0: ps -efj 查看相关父进程细节。 以及操作系统必要的守护进程。 inetd cron

demo1:创建一个守护进程 umask fork setsid 等创建一个孤儿进程。

demo2:守护进程的日志记录 syslogd 的相关函数 openlog syslog closelog setlogmask vsyslog

demo3:文件和记录锁 实现单实例守护进程

demo4:守护进程的一些管理 锁文件/etc/run/ 配置文件/etc/下 命令行启动,初始化脚本/etc/rc* /etc/init.d/* /etc/inittab

====》以及通过捕获信号 重新读取配置文件

====》守护进程重读配置文件的demo。 多线程 单线程

demo5:守护进程以及服务器,客户端进程模型

14:高级IO

非阻塞io,记录锁,io多路转接(select,poll),异步io,readv,writev,内存映射mmap

demo0:设置非阻塞io,从标准输入读多个字符,回显到标准输出,理解非阻塞。

demo1:文件字节范围锁(记录锁),同时操作同一个文件。 fcntl 以及struct flock(相关标志,读写锁)

demo2:文件区域加锁和解锁的demo。

demo3:模拟这种场景下的死锁。

demo4:锁的继承练习,fork子进程。

demo5:给整个文件加锁,文件末尾加锁。

demo6:建议性锁(共享锁,读锁)和强制性锁(写锁,其他进程也无法读锁吗?)对其他进程的影响。

demo7:强制性锁的练习。

demo8:思考:多人同时编辑同一文件,强制性锁在这里的意义?

demo9: telnet和telnetd服务的原理,这里如何实现一个telnet命令逻辑。(异步IO, 单独的信号触发, IO多路复用)

demo10:select和pselect的io多路复用的demo。 超时时间参数,秒和纳秒的梳理。

demo11:poll进行io多路复用接口和相关原理demo。

demo12:select和poll的可中断。 SA_RESTART 信号

demo13:异步io通过信号实现demo。

demo14:异步IO: ioctl (system) , SIGIO和SIGURG(BSD), aio模块(POSIX)。

demo15:梳理aio模块相关接口demo,翻译一个文件的异步IO实例

demo16:散布读和聚集写 readv和 writev 读,写多个非连续缓冲区

demo17:自定义实现readn和writen 读,写指定的n个字节。

demo18:存储映射IO mmap,映射文件大小与虚拟存储页大小关系,信号sigegv和sigsegv

demo19:子进程继承父进程的映射区 mprotect修改映射权限

demo20:msync (存储映射区) munmap(解除映射)

demo21:用mmap实现复制文件,考虑大文件,以及内存的限制。 以及调用msync的时机。

demo22:直接用read和write复制文件,与用mmap复制文件的效率对比。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/598147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java与Android开发入门指南

Java与Android开发是当前非常热门的技术领域&#xff0c;它们是构建移动应用程序的核心。在本文中&#xff0c;我们将为您提供一个入门指南&#xff0c;介绍Java和Android开发的基本概念和步骤&#xff0c;帮助您开始学习和掌握这两个技术。 Java 基础知识 在学习 Android 开…

基于Java SSM框架实现宠物管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现宠物管理系统演示 摘要 随着我国经济的快速发展&#xff0c;人民生活水平的不断提高&#xff0c;宠物逐渐成为许多宠物爱好者的一种生活方式。 宠物的品种也越来越多样化&#xff0c;宠物不仅能给生活带来乐趣还可以成为空巢老人&#xff0c;独生子女很…

Mysql 查看表注释或字段注释

查看所有表的注释 SELECT table_name 表名, table_comment 表说明 FROM information_schema.TABLES WHERE table_schema ‘数据库名’ ORDER BY table_name 查询所有表及字段的注释 SELECT a.table_name 表名, a.table_comment 表说明, b.COLUMN_NAME 字段名, b.column_commen…

MongoDB批量写入操作

一、概述 MongoDB为客户端提供了批量执行写入操作的能力。批量写入操作影响单个集合。MongoDB允许应用程序确定批量写入操作所需的可接受确认级别。 db.collection.bulkWrite&#xff08;&#xff09;方法提供了执行批量插入、更新和删除操作的能力。 MongoDB还支持通过db.col…

java常见面试题:什么是反射?反射在Java中有哪些应用场景?

反射在计算机科学中是一种机制&#xff0c;通过这种机制程序可以在运行时获取关于类、接口、字段和方法的信息&#xff0c;并可以在运行时对对象进行操作。 在Java中&#xff0c;反射的应用场景主要包括以下几个方面&#xff1a; 框架开发&#xff1a;Java反射机制被广泛应用…

补码的乘法-布斯乘法

前言 本篇文章讲解如何通过逻辑门的形式来实现补码的乘法操作 布斯乘法 A.D.Booth提出了一种补码相乘算法,可以将符号位与数值位合在一起参与运算&#xff0c;直接得出用补码表示的乘积&#xff0c;且正数和负数同等对待。这种算法被称之为Booth (布斯)乘法 下面有两个变量值…

【量化金融】《证券投资学》吴晓求(第四版)(更新中)

这里写目录标题 第一篇 基本知识第1章 证券投资工具名词解释简答题 第2章 证券市场名词解释简答题 第二篇 基本分析第三篇 技术分析第四篇 组合管理第五篇 量化分析与交易策略 第一篇 基本知识 第1章 证券投资工具 名词解释 风险&#xff08;risk&#xff09; 未来结果的不…

【hcie-cloud】【16】业务上云迁移、Rainbow详述

文章目录 前言华为业务迁移解决方案概述业务上云背景概述业务迁移场景需求及挑战业务迁移的价值华为业务迁移解决方案 - 全景图华为业务迁移解决方案的优势 Rainbow迁移工具介绍Rainbow迁移原理介绍Rainbow迁移工具简介Rainbow迁移工具定位Rainbow迁移视图Rainbow迁移原理 - Wi…

flutter 项目安卓开启混淆防止渗透

android/app/build.gradle 配置如下 plugins {id "com.android.application"id "kotlin-android"id "dev.flutter.flutter-gradle-plugin" }def keystorePropertiesFile rootProject.file("key.properties") def keystoreProperties…

JumpServer3.0版本-账号管理

账号列表 我这里已经创建好了所以有很多,可以点击资产树列表分类查看 点击创建按钮,添加账号 资产:如果多个设备的账号密码一致可以在资产同事选中 名称:方便辨识即可 用户名:登录设备的账户名 密码:按你登录需求自行选择 添加按钮旁边还有个“模版添加” 此功能便…

yolov8实战第五天——yolov8+ffmpg实时视频流检测并进行实时推流——(推流,保姆教学)

yolov8实战第一天——yolov8部署并训练自己的数据集&#xff08;保姆式教程&#xff09;_yolov8训练自己的数据集-CSDN博客 yolov8实战第三天——yolov8TensorRT部署&#xff08;python推理&#xff09;&#xff08;保姆教学&#xff09;-CSDN博客 今天&#xff0c;我们继续y…

Java TBA访问NetSuite Restlet时的403错误

本周有同学问为啥Java访问NetSuite Restlet时&#xff0c;按照知识会之前的文章分享&#xff0c;会一直报403 INVALID_LOGIN_ATTEMPT错误。 https://nk-community.blog.csdn.net/article/details/131399801https://nk-community.blog.csdn.net/article/details/131399801原因是…

线程同步之:QReadWriteLock

1、 使用互斥量QMutex时候存在一个问题 每次只能有一个线程获得互斥量的权限。如果在一个程序中有多个线程“读”取某个变量&#xff0c;使用互斥量时也必须排队&#xff01; 然而&#xff0c;实际情况是允许&#xff1a;让多个线程同时“读”&#xff01; 这样互斥量 就会降…

面试官:说说flexbox(弹性盒flex布局),以及适用场景?

面试官&#xff1a;说说flexbox&#xff08;弹性盒布局模型&#xff09;,以及适用场景&#xff1f; 一、是什么 Flexible Box 简称 flex&#xff0c;意为”弹性布局”&#xff0c;可以简便、完整、响应式地实现各种页面布局 采用Flex布局的元素&#xff0c;称为flex容器conta…

面试官:线程池的7种创建方式,你都清楚吗?

文章目录 前言1. 固定数量的线程池a. 线程池返回结果b. ⾃定义线程池名称或优先级 2. 带缓存的线程池3. 执⾏定时任务a. 延迟执行(一次)b. 固定频率执行c. scheduleAtFixedRate VS scheduleWithFixedDelay 4. 定时任务单线程5. 单线程线程池6. 根据当前CPU⽣成线程池 前言 线程…

CRM管理系统八大特性,如何帮助企业提升业务效能?

CRM管理系统的使用率逐年上升&#xff0c;这离不开企业对客户的依赖——管理好客户关系是企业发展你的重要因素&#xff0c;由此可见CRM对于任何成长中的企业都是必不可少的。以前我们写过很多关于CRM功能的文章&#xff0c;这篇文章换个思路&#xff0c;想一想CRM管理系统主要…

Pytorch从零开始实战15

Pytorch从零开始实战——ResNeXt-50算法实战 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——ResNeXt-50算法实战环境准备数据集模型选择开始训练可视化总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytor…

Unity中Shader序列图动画(UV流动的通用起始点)

文章目录 前言一、一般序列帧动画是按照序列图如下顺序读取的二、在Shader找到UV流动的起始点1、先实现纹理采样2、得到 uv 走格的单位格子大小3、定位到左上角为起始单位格 三、使UV流动的起始点通用化1、在属性面板接收 行 和 列的属性2、看图片可以总结出第一个单元格的公式…

Kotlin/JS工程构建及编译运行到浏览器

概述 Kotlin/JS 提供了转换 Kotlin 代码、Kotlin 标准库的能力&#xff0c;并且兼容 JavaScript 的任何依赖项。Kotlin/JS 的当前实现以 ES5 为目标。 使用 Kotlin/JS 的推荐方法是通过 kotlin.multiplatform Gradle 插件。它提供了一种集中且便捷的方式来设置与控制以 JavaS…

请求头类型content-type配置

类型 // 1 默认的格式请求体中的数据会以json字符串的形式发送到后端Content-Type: application/json // 2 请求体中的数据会以普通表单形式&#xff08;键值对&#xff09;发送到后端Content-Type: application/x-www-form-urlencoded // 3 它会将请求体的数据处理为一条消息…