读书之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复制文件的效率对比。

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 UNIX操作系统概述 7 1.1 UNIX操作系统简介 7 1.2 UNIX系统组成 7 1.3 UNIX启动过程 8 1.4 UNIX用户登录过程 8 1.5 与UNIX有关的几个名词 9 第2章 UNIX基本常识 11 2.1 启动终端 11 2.2 登录 11 2.3 初始化文件 11 2.4 注销(退出UNIX系统) 12 第3章 UNIX文件系统 13 3.1 文件系统分类 13 3.2 文件类型 13 3.2.1 正规文件 13 3.2.2 目录文件 14 3.2.3 字符和块设备文件 15 3.2.4 套接字文件 15 3.2.5 命名管道文件 16 3.2.6 链接文件 16 3.3 树型目录结构 16 3.4 文件和目录的命名 18 3.5 UNIX文件存取权限 18 3.6 重定向与管道 21 3.6.1 UNIX重定向 21 3.6.2 UNIX管道 22 3.7 常用配置文件 22 3.7.1 /etc/passwd文件 22 3.7.2 /etc/group文件 22 3.7.3 /etc/hosts 23 3.7.4 /etc/services 23 3.8 文件系统管理 23 3.8.1 mount 23 3.8.2 umount 24 3.8.3 加载配置文件 24 3.8.4 fsck 25 第4章 UNX系统常用命令 27 4.1 UNIX命令基础 27 4.1.1 UNIX命令的一般格式 27 4.1.2 特殊功能键和字符 28 4.1.3 查看帮助信息 30 4.1.4 在后台运行程序 31 4.1.5 在指定时间执行指定程序 31 4.2 vi编辑器的最基本用法 32 4.2.1 vi简介 32 4.2.2 vi的启动和退出 33 4.2.3 vi的两种模式 33 4.2.4 vi的基本操作 34 4.2.5 vi的高级操作 36 4.3 目录操作命令 38 4.3.1 pwd 38 4.3.2 mkdir 38 4.3.3 cd 38 4.3.4 rmdir 39 4.4 文件操作命令 39 4.4.1 ls 39 4.4.2 cat 40 4.4.3 head 41 4.4.4 tail 41 4.4.5 more 41 4.4.6 cp 43 4.4.7 mv 44 4.4.8 rm 44 4.4.9 chmod 44 4.4.10 chown 46 4.4.11 chgrp 46 4.4.12 cmp 46 4.4.13 diff 47 4.4.14 wc 47 4.4.15 split 47 4.4.16 touch 48 4.4.17 file 48 4.4.18 pack 48 4.4.19 pcat 49 4.4.20 unpack 49 4.4.21 find 49 4.4.22 grep 51 4.4.23 pg 52 4.4.24 ln 52 4.4.25 sort 53 4.4.26 compress 53 4.4.27 uncompress 54 4.4.28 gzip 54 4.4.29 gunzip 54 4.4.30 tar 54 4.4.31 cpio 55 4.4.32 tee 56 4.5 状态信息命令 57 4.5.1 w 57 4.5.2 who 57 4.5.3 whodo 57 4.5.4 logname 58 4.5.5 whoami 58 4.5.6 whereis 58 4.5.7 which 58 4.5.8 date 58 4.5.9 cal 59 4.5.10 time 59 4.5.11 id 59 4.5.12 hostid 60 4.5.13 hostname 60 4.5.14 df 60 4.5.15 du 60 4.5.16 stty 61 4.5.17 tty 61 4.5.18 history 61 4.5.19 alias 61 4.5.20 echo 62 4.5.21 uname 62 4.5.22 clear 62 4.6 网络命令 62 4.6.1 arp 62 4.6.2 finger 63 4.6.3 wall 63 4.6.4 mesg 63 4.6.5 write 63 4.6.6 ping 63 4.6.7 netstat 64 4.6.8 telnet 64 4.6.9 ftp 64 4.7 进程管理命令 65 4.7.1 kill 65 4.7.2 ps 66 4.7.3 sleep 68 4.7.4 nice 68 4.7.5 shutdown 68 4.7.6 halt 69 4.7.7 poweroff 69 4.7.8 reboot 69 4.8 用户管理命令 69 4.8.1 su 69 4.8.2 groupadd 69 4.8.3 groupdel 70 4.8.4 useradd 70 4.8.5 userdel 70 4.8.6 passwd 71 第5章 shell的基础知识 72 5.1 什么是shell 72 5.2 别名化 73 5.3 shell变量 74 5.3.1 shell变量的存储机制 74 5.3.2 变量替换 74 5.3.3 命令替换 76 5.4 用户环境 76 5.5 两个重要的环境变量 77 5.6 shell启动文件 78 5.7 监控进程 78 第6章 附录 79 6.1 ftp命令参考 79 6.2 vi命令参考 80 6.3 find命令详解 85 6.3.1 Find命令形式 85 6.3.2 Find命令参数 85 6.3.3 Find命令举例 87 6.4 grep命令详解 99
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值