
linux 书本学习__APUE
文章平均质量分 83
yuanhaitaozz
啊啊啊啊啊啊啊啊
展开
-
第十章(二) sigsuspend、system等重要信号函数的使用
函数 sigsuspend(sigset_t *mask) 1、之前说过,更改进程的信号屏蔽字可以阻塞所选择的信号,或解除对它们的阻塞,这可以用来保护不希望由信号中断的代码临界区 2、如果希望对一个信号解除阻塞,然后pause以等待以前被阻塞的信号发生,如何实现呢? 若是直接 sigprocmask(); pause(); 这样可能会导致pause原创 2015-01-25 21:25:35 · 877 阅读 · 2 评论 -
异步I/O
不同的I/O模型: ㈠、同步I/O阻塞 最常用的一个模型是同步阻塞 I/O模型。在这个模型中,用户空间的应用程序执行一个系统调用,这会导致应用程序阻塞。这意味着应用程序会一直阻塞,直到系统调用完成为止(数据传输完成或发生错误)。调用应用程序处于一种不再消费CPU 而只是简单等待响应的状态,因此从处理的角度来看,这是非常有效的。 配图 2 给出了传转载 2015-02-11 20:44:16 · 441 阅读 · 0 评论 -
第十四章(二) 异步I/O
I/O多路转接 当我们从一个描述符读取数据从而写到另外一个描述符时,可以使用阻塞I/O while((n=read(STDIN_FILENO,buf,BUFSIZ))>0) if(write(STDOUT_FILENO,buf,n)!=n) perror("write"); 但是如果我们希原创 2015-02-10 15:13:40 · 599 阅读 · 0 评论 -
第十四章(三) readv、存储映射
以下两个函数用于在一次函数调用中读、写多个非连续缓冲区函数 ssize_t readv(int fd, struct iovec *iov, int iovcnt) iovcnt用于指定iov数组中元素的个数 按从0到iovcnt-1的顺序,总是先填满一个缓冲区,然后再填写下一个。 返回读到的总字节数。函数 ssize_t writev(i原创 2015-02-11 20:40:37 · 487 阅读 · 0 评论 -
第十五章(二) FIFO、消息队列及信号量
FIFO FIFO也称为命名管道,没有了未命名管道只能在两个相关进进程之间才能运行的局限性; 通过FIFO, 两个不相关的进程也能交换数据。 FIFO是一种文件类型,通过stat结构的 st_mode 成员的编码可以知道文件是否是FIFO类型。 可以用 S_ISFIFO宏对此进行测试。 创建FIFO类似于 创建文件,路径名是事实存在的。 函原创 2015-02-14 21:29:20 · 989 阅读 · 0 评论 -
第十五章(一) 进程间通信 之 管道
第十五章 进程间通信这里先添加之前学习对管道的认识:管道编程: 要实现 who | sort 需要两个技巧: 如何创建管道 + 如何将标准输入和输出通过管道连接起来 系统调用pipe也使用最低可用文件描述符 pipedemo1.c展示了在一个进程中如何使用pipe(玩原创 2015-02-14 17:50:58 · 846 阅读 · 0 评论 -
第十六章(一) 套接字初识
地址格式 一个地址标识一个特定通信域的套接字端点,地址格式与这个特定的通信域相关。为使不同的格式地址能够传入到套接字函数,地址会被强制转化成一个通用的地址结构:struct sockaddr{ sa_family_t sa_family; //address family char sa_data[]; //variable-length address . .原创 2015-03-21 16:03:40 · 462 阅读 · 0 评论 -
第十六章(二) 套接字初识
数据传输: 尽管可以通过 read 和 write 交换数据,但这就是这两个函数所能作的一切。但是如果想要指定选项,从多个客户端接收数据包,或者发送带外数据,就需要使用6个为数据传递而设计的套接字函数。 三个传送数据的套接字函数:ssize_t send(int sockfd, void *buf, size_t nbytes, int flags) /*使用send时套接原创 2015-03-21 16:19:50 · 446 阅读 · 0 评论 -
第十三章 守护进程
在看第十二章之前,这里要先提一个十一章遗留下来的一个问题. 在使用条件变量的时候,下面哪个步骤是正确的? 1、对互斥量加锁 2、改变互斥量保护的条件 3、给等待条件的线程发信号 4、对互斥量解锁 或者 1、对互斥量加锁 2、改变互斥量保护的条件 3、对互原创 2015-02-02 14:04:47 · 557 阅读 · 0 评论 -
第八章(二) exec系列函数 和 进程的几个ID的认识
竞争条件 这里书本只是提了一些,但并未详细讲解如何实现,具体可以根据之后要学的信号量机制 和 管道机制实现。 这里的程序里还有个细小的知识点: setbuf(stdout,NULL) 即将输出缓冲关闭了。函数 exec 之前对这个的理解就是在进程fork后调用,是会覆盖fork出来的程序段的。除了环境变量、打开的文件描述符原创 2015-01-15 14:15:16 · 775 阅读 · 0 评论 -
多线程下的信号和fork,以及IO操作
线程和信号 信号十分复杂, 在本身进程基础上, 就存在信号处理. 信号屏蔽字. 信号未决等因素需要去考虑, 在遇到线程后, 信号与线程之间就更是复杂基础认知 每个线程都有自己的信号屏蔽字, 但是信号的处理是进程中所有线程共享的, 这就意味着单个线程可以阻止某些信号, 但当某个线程修改了与某个信号相关的处理行为后, 所有的线程都必须共享这个行为的改变. 进程中的原创 2015-07-16 18:14:26 · 644 阅读 · 0 评论 -
第七章 进程环境
第七章 进程环境关于 main 函数: 当内核执行C程序时,在调用main前先调用一个特殊的启动例程。可执行程序文件将此启动例程指定为程序的起始地址 --- 这是由连接编辑器设置的,而连接编辑器则是由C编译器调用。 启动例程从内核取得命令行参数和环境变量值,然后为按上述方式调用main函数做好安排。一个进程的终止也分为好几种情况:原创 2015-01-03 17:12:12 · 596 阅读 · 0 评论 -
关于守护进程
守护进程 守护进程就是后台运行的一种特殊进程。它独立于控制终端且周期性的执行某种任务或等待处理某些发生的事件 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。 同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。 守护进程的特性:原创 2015-01-20 16:13:30 · 488 阅读 · 0 评论 -
第六章 系统文件和时间
函数 getpwuid(uid_t )、 getpwnam(char *) 用于根据用户uid或者用户名得到用户相关信息函数 getpwent、setpwent、endpwent 调用getpwent可以返回口令文件中下一个记录项,调用setpwent是自我保护措施, 以便确保调用者在此之前已经调用getpwent打开了有关文件情况下,反绕原创 2014-12-31 12:52:01 · 685 阅读 · 0 评论 -
第十章 信号
当某个信号出现时,可以告诉内核按下列3种方式处理: 1、忽略此信号。 但是 SIGKILL 和 SIGSTOP 是不能被忽略的 2、捕捉信号 通知内核在某种信号发生时,调用一个用户函数 但是不能捕捉 SIGKILL 和 SIGSTOP 信号。 3、执行系统默认动作函数 signal原创 2015-01-21 21:08:08 · 654 阅读 · 0 评论 -
第十一章(二) 线程锁的使用
线程同步 当一个线程可以修改的变量,其他线程也可以读取或者修改的时候,我们就需要对这些线程进行同步,确保它们访问变量的存储内容时不会访问到无效的值。互斥量 可以使用pthread的互斥接口来保护数据,确保同一时间只有一个线程访问数据 互斥变量是用 pthread_mutex_t数据类型表示的。 在使用互斥变量之前,需要对它进行初始化,将其设置原创 2015-01-28 18:21:04 · 648 阅读 · 0 评论 -
第十一章 线程之锁、读写锁、条件变量、屏障
函数 pthread_mutex_timelock 可以给线程指定一个超时时间。 当试图获得一个已经加锁的互斥量时,阻塞等待达到超时时间后返回错误码 ETIMEOUT读写锁 与互斥量相似,但是允许更高的并行性 互斥量: 要么是锁住,要么没锁住,而且只有一个线程可以对其加锁 读写锁: 有3种状态,即 读模式下的加锁状态,原创 2015-01-29 17:25:26 · 596 阅读 · 0 评论 -
第八章(一) 进程控制
函数 fork ,子进程与父进程#include int globvar = 6;char buf[] = "a write to stdout"; int main(){ intvar; pid_tpid; var= 88; if(write(STDOUT_FIL原创 2015-01-07 17:45:40 · 585 阅读 · 0 评论 -
第八章(三) 进程调度、进程时间
解释器文件 这种文件起始行形式是: (是那种脚本文件吗? 就是 .sh 结尾的?) #!pathname [optional-argument] 内核使调用 exec 函数的进程实际执行的并不是该解释器文件,而是在该解释器文件第一行中 pathname 所指定的文件。 注意一定要将解释器文件(即文本文件,它以 #原创 2015-01-16 16:54:06 · 574 阅读 · 0 评论 -
第十四章 非阻塞I/O 和 记录锁
本章包括:(非阻塞I/O、 记录锁、 I/O多路转接(select和poll函数)、 异步I/O、 readv和writev函数和存储映射I/O(mmap))非阻塞I/O 之前章节中将系统调用分为两类 1、低速系统调用 2、其他 低速系统调用是可能会使进程永远阻塞的一类系统调用。 我们可以通过以下两种方法使得这些原创 2015-02-04 20:38:13 · 486 阅读 · 0 评论 -
第五章 标准I/O库
函数 fwide用于设置流的定向 fwide(FILE *fp,int mode); 若 mode 为负,fwide 将试图使指定的流的字节定向的 若 为正, 宽定向的 若 为0,将不试图设置流的定向。 对于这个函数,书上没有过多介绍,我也没用过,暂且放在这里吧文件描述符对原创 2014-12-30 17:16:15 · 772 阅读 · 0 评论 -
第三章 文件I/O
第一、二章在命令前加 time -p 可以得到程序运行三种时间系统调用是进入内核的入口点(如 write),通用库函数却不是内核的入口点(如 printf, strcpy) 第三章 文件I/Oopen()的falgs中一些陌生的常量: O_EXCL: 如果指定了 O_CREAT ,而文件已经存在,则出错。可用于测试一个原创 2014-12-28 15:39:18 · 634 阅读 · 0 评论 -
第九章 进程关系
第九章、 进程关系如果用户正确登录, login程序就完成以下工作: 将当前工作目录更改为用户的起始目录(chdir) 调用 chown 更改获得终端的所有权,使登录用户成为它的所有者 将对该终端的设备的访问权限改变成 “用户读和写” 调用 setgid 和 initgroups 设置进程的组ID原创 2015-01-19 19:38:14 · 653 阅读 · 0 评论 -
第四章 文件和目录
第四章 文件和目录函数 stat、fstat、lstat、fstatatlstat:若为符号链接,则返回该符号链接本身的信息。fstatat:可传入指定目录文件描述符,然后传入相对路径; 可规定(通过flag)是否返回符号链接指向(默认)或是其本身。文件类型:普通文件、 目录文件块特殊文件:提供对设备带缓冲的访问。每次访问以固定长度为单位进行原创 2014-12-30 23:49:51 · 580 阅读 · 0 评论 -
第十一章 线程(一)
这里首先提一下,并发和并行有什么区别: 并行是指在同一时刻,有多条指令在多个处理器上同时执行。 并发是指在同一时刻,只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。 线程的概念: 典型的UNIX进程可以看成是一个线程,通过使用线程可以把进程设计成在某一时刻能够不止做一件事。 1、通过为每种原创 2015-01-27 17:04:29 · 437 阅读 · 0 评论