APUE学习
julysee
这个作者很懒,什么都没留下…
展开
-
异步信号安全(可重入性)与线程安全
书中10.6和12.5两节分别是信号和线程的重入介绍。但是未对异步信号安全、线程安全、可重入概念做统一对比,难以彻悟。针对于此,写下本文。1. 三个概念,线程安全,可重入,信号安全 先简单提一下, 线程安全,主要是针对数据竞争来说的,就是说:如果数据不需要共享,那就让每个线程私有;如果需要共享,那就加锁。 信号安全,其实也就是异步信号安全,是说线程在信号处理函转载 2015-04-23 15:26:34 · 551 阅读 · 0 评论 -
进程与线程的差别
学习APUE,对于进程与线程也有了一些认识,从《程序员面试宝典》第三版中,摘录关于两者区别的面试题,供自己学习使用。面试例题1: 请描述进程和线程的差别。进程是程序的一次执行。线程可以理解为进程中执行的一个程序片段。在一个多任务环境中,下面的概念可以帮助我们理解两者的差别。进程间是独立的,这表现在内存空间,上下文环境上;线程运行在进程空间内,一般来讲(不使用特殊技术),进程无法转载 2015-04-28 15:52:00 · 337 阅读 · 0 评论 -
初窥多进程
程序的实例被称为进程,有三个用于进程控制的主要函数:fork、exec和waitpid。接下来会有一段类shell程序的简化实现代码,让我们一起来看看以上3个函数是如何使用的,随后参照代码,会有比较详细的要点解释。#include #include #include #include #include #include #define MAXLINE 4096原创 2015-04-28 15:34:05 · 318 阅读 · 0 评论 -
【代码】显示一个目录下所有文件
#include #include #include int main(int argc, char* argv[]){ DIR* dir; struct dirent* buf; if (argc != 2) { printf("useage:1-1 \n"); exit(1); } //open原创 2015-04-28 11:07:33 · 465 阅读 · 0 评论 -
UNIX Architecture
In a strict sense, an operating system can be defined as the software that controls the hardware resources of the computer and provides an environment under which programs can run. Generally, we call原创 2015-04-27 15:38:24 · 428 阅读 · 0 评论 -
errno的前世今生
当unix函数出错时,常常返回一个负值,而且整形变量errno通常被设置为含有附加信息的一个值。例如open函数如果成功,返回一个非负文件描述符。如果出错,则返回-1。在open出错时,有大约15种不同的errno值(文件不存在,权限问题等)。某些函数并不返回负值而是使用另一种预定。例如,返回一个指向对象指针的大多数函数,在出错时,将返回一个空指针。在中定义了errno以及可以赋予它的各种原创 2015-04-28 17:03:03 · 525 阅读 · 0 评论 -
输入与输出
1、文件描述符(file descriptor)文件描述符(file descriptor)通常是一个小的非负整数2、标准输入、标准输出、标准出错按惯例,每当运行一个新程序时,所有的shell都将为其打开三个文件描述符:标准输入(standard input)、标准输出(standard output)和标准出错(standard error)。3、不用缓冲的I/O函数open原创 2015-04-28 12:36:51 · 344 阅读 · 0 评论 -
the data structures used by the kernel for all I/O
以下的描述是概念性的,它可能符合或者不符合一个特定的实现。内核使用三种数据结构表示打开的文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。1、每个进程在其进程表中都有一个记录项,记录项中包含有一张该进程打开文件描述符表。我们可以将它看做是一个vector,每条记录对应一个描述符。与每个文件描述符相关联的是:a) 文件描述符标志(The file原创 2015-04-30 15:26:11 · 404 阅读 · 0 评论 -
文件I/O
unix系统中的大多数文件I/O只需用到5个函数:open、read、write、lseek、close。术语不带缓冲指的是每个read和write都调用内核中的一个系统调用。只要涉及在多个进程间共享资源,原子操作将会变得非常重要。由open返回的描述符一定是最小的未用的描述符值。int open(char* filename, int oflag, .../*mo原创 2015-04-30 11:25:22 · 285 阅读 · 0 评论 -
初涉信号
信号(signal)是通知进程已发生某种情况的一种技术。进程对于处理信号有三种选择:1、忽略该信号。有些信号表示硬件异常,例如,除以0或访问进程地址空间以外的单元等,因为这些异常产生的后果不确定,所以不推荐使用这种方法。2、按系统默认方式处理。例如,对于除以0的情况,系统默认方式是终止该进程。3、提供一个函数,信号发生时则调用该函数,这被称为捕捉该信号。使用这种方式,我们只要提供自原创 2015-04-29 10:40:34 · 659 阅读 · 0 评论 -
用creat创建已存在的文件会发生什么
creat函数int creat(const char *path, mode_t mode);等价于open(path, O_WRONLY | O_CREAT | O_TRUNC, mode);creat的函数有一个不足之处,就是它是以只写方式打开已创建的文件的。另外,在进行函数测试时,还发现,使用creat文件创建一个已存在的文件时,就会把文件长度截断为0,但文件的访问权限维持原先的不原创 2015-05-07 11:25:55 · 1589 阅读 · 0 评论