06 2021 档案
摘要:17.1 Unix域套接字 UNIX 域套接字用于在同一台计算机上运行的进程之间的通信。UNIX 域套接字就像是套接字和管道的混合。一对相互连接的UNIX域套接字可以起到全双工管道的作用。 和网络套接字相比: 在同一计算机上使用,效率更高;仅复制数据,不进行协议处理;域套接字提供流和数据报两种接口,
阅读全文
摘要:16.1 套接字描述符 套接字是通信端点的抽象,用套接字描述符访问套接字。套接字描述符本质上是一个文件描述符,但是不是所有接受文件描述符的函数都接受套接字描述符。 为创建一个套接字,调用socket函数。 套接字通信是双向的,可以采用shutdown函数来禁止一个套接字的I/O。 套接字类型描述SO
阅读全文
摘要:管道和FIFO仍能有效引用于大量应用程序,但是在新程序中要避免使用消息队列和信号量,而应当考虑使用全双工管道和记录锁。 15.1 管道 管道的局限性: 半双工只能在具有公共祖先的两个进程之间使用管道是通过调用pipe函数创建的 当读一个写端已被关闭的管道时,在所有数据都被读取后read返回0,表示文
阅读全文
摘要:12. 1 线程属性 如果在创建线程时就知道不需要了解线程的终止状态,就可以使用pthread_attr_setdetachstatepthread_attr_init对线程属性进行初始化,pthread_attr_destroy执行清理工作。对于进程来说虚地址空间的大小是固定的,但对于线程来说,同
阅读全文
摘要:13. 守护进程 要创建一个守护进程需要遵循一个固定的步骤,可以参考下面的例子。 例子 #include <fcntl.h> #include "apue.h" #include <sys/resource.h> #include <syslog.h> void daemonize(const ch
阅读全文
摘要:11. 1 线程概念 进程可以有多个控制线程,每个线程处理各自独立的任务。一个进程的所有信息对该进程的所有线程都是共享的,包括可执行程序的代码、程序的全局内存和堆内存、栈以及文件描述符。 1. 多个进程必须使用操作系统提供的复杂机制才能实现内存和文件描述符的共享,而多个线程共享相同的存储地址空间和文
阅读全文
摘要:10.1 信号概念 mac和linux都支持31种信号。不存在编号为0的信号。 产生信号的方式: 当用户按某些终端键时引发终端产生的信号硬件异常产生信号:除数为0、无效的内存引用等用户可用kill命令将信号发送给其他进程进程调用kill函数可将任意信号发送给另一个进程或进程组当检测到某种软件条件已经
阅读全文
摘要:9.1 终端登录 这里终端是本地的或者是远程的。登录unix系统都经由内核中的终端设备驱动程序。 BSD系统的过程:init读取文件/etc/ttys,对每一个允许登录的终端设备调用一次fork,它所生成的子进程则exec getty程序。getty打开终端设备,exec login程序。至此,登录
阅读全文
摘要:8.1 进程标识 每个进程都有一个非负整型表示的唯一进程ID。进程ID是可重用的。 ID为0的进程通常是调度进程,常常被称为交换进程(swapper)。 该进程是内核的一部分,它并不执行任何磁盘上的程序。 ID为1通常是init进程,在自举过程结束时由内核调用。 #include <stdio.h>
阅读全文
摘要:7.1 main函数 c程序总是从main函数开始执行。在调用main前先调用一个特殊的启动例程,从内核取得命令行参数和环境变量值。 7.2 进程终止 正常终止 (1) 从main返回; (2) 调用exit; (3) 调用_exit或_Exit; (4) 最后一个线程从其启动例程返回 (5) 从最
阅读全文
摘要:5.1 流和FILE 所有I/O函数都是围绕文件描述符的。 当打开一个文件时返回一个文件描述符,该文件描述符就用于后续的I/O操作。 标准I/O库的操作是围绕流(stream) 进行的。 标准I/O文件流可用于单字节或多字节(“宽” )字符集。 流的定向决定了所读、写的字符是单字节还是多字节的。fw
阅读全文
摘要:4.1 stat stat/lstat函数返回文件的信息结构体stat。st_mode中包含了文件的格式信息。 例子 判断文件或目录类型 #include "apue.h" int main(int argc, char *argv[]) { int i; struct stat s; char *
阅读全文
摘要:3.1 文件描述符 对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。 例子: 0表示stdin, 1表示stdout, 2表示stderr. 文件描述符的变化范围是0~OPEN_MAX-1,早期允许每个进程打开19个文件。对很多系统来说,文件描述符范围是无限的。 3.2
阅读全文
摘要:golang里的时间戳转字符串的通常用法 timeStr := time.Now().Format("2006-01-02 15:04:05") 注意这个格式模板2006-01-02 15:04:05是有特殊含义的,不是随便写一个类似格式的时间就可以的。 具体可以参考下面的博客 参考博客
阅读全文
摘要:2.1 标准化 ISO C C程序设计语言标准 POSIX 指的是可移植操作系统接口(Portable Operating System Interface)。该标准的目的是提升应用程序在各种UNIX系统环境之间的可移植性。 Single UNIX Specification(SUS,单一UNIX规
阅读全文
摘要:1.1 Unix体系 内核的接口被称为系统调用。公用函数库构建在系统调用接口之上。shell和公共函数都能直接进行系统调用, 应用程序可以直接进行系统调用,也可以使用shell和公共函数库里的函数,从而间接进行系统调用。 1.2 登录 shell是一个命令行解释器,它读取用户输入然后执行命令。she
阅读全文
摘要:1. 前言 最后花了一些时间学习了下《unix环境高级编程》。这本书其实买了半年了一直都没有时间打开。平时上班的时候都纠结于一些边角料的工作和细枝末节的技术问题,感觉自己的提升太少了,所以觉得还是要找时间好好补一补基础知识。 虽然买了书,但是实际上大部分时间都是在看电子版的pdf。纸本书太厚没办法随
阅读全文
摘要:1. 拆机 把背面的螺丝钉拧开,拿个卡找个缝插进去转一圈就打开了。 2. 内存 先把电源排线拔掉,排线旁边有标识“+”和“-”。 内存条外面盖着一个金属壳,把四周的小固定扣压下去就能打开,内存条型号DDR3L。买了个DDR4才发现插不进去。 3. 固态硬盘 把机械盘的三个螺丝拧开,把硬盘向前推动就能
阅读全文
浙公网安备 33010602011771号