UNIX 环境高级编程
文章平均质量分 64
Legendary_life
这个作者很懒,什么都没留下…
展开
-
共享存储函数
共享存储共享存储允许两个或多个进程共享一个给定的存储区。数据不需要在客户进程和服务器进程之间复制,因此这是最快的一种进程间通信的方式。使用的窍门是多个进程访问存储区时,需要采取一定的同步控制。获取一个共享存储标志:shmget函数#includeint shmget(key_t key, size_t szie, inf flag);成功--共享存储ID,出原创 2015-08-09 15:57:56 · 444 阅读 · 0 评论 -
消息队列操作函数
消息队列操作函数1、概述 消息队列可以认为是一个消息链表,System V 消息队列使用消息队列标识符标识。具有足够特权的任何进程都可以往一个队列放置一个消息,具有足够特权的任何进程都可以从一个给定队列读出一个消息。在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。System V 消息队列是随内核持续的,只有在内核重起或者显示删除一个消息队列时,该原创 2015-08-05 22:22:02 · 921 阅读 · 0 评论 -
进程间通信之管道和FIFO
进程间通信管道特点:1)半双工,数据只能在一个方向上流动。 2)只能在具有血缘关系的进程间使用。#includeint pipe(int fd[2]);成功-- 0,出错-- -1fd 参数:返回的是文件描述符,fd[0] 读端,fd[1]写端。1.如果所有指向管道写端的文件描述符都关闭了(管道写端的引用计数等于0),而仍然有进程原创 2015-08-04 23:43:42 · 839 阅读 · 0 评论 -
记录锁 和 fcntl函数
记录锁和fcntl函数1 .记录锁的功能 当一个进程正在读或修改文件的某个部分时,它可以阻止其他进程修改同一文件区。我们不应该从字面上去理解记录锁,实际上它应该叫“区域锁”,因为它锁定的只是文件的一个(也可能是整个文件)。这个区域用来存放多用户的共享区。2 .记录锁的分类 记录锁分为共享读锁和独占写锁,前者也叫做共享锁后者也叫做排他锁。3原创 2015-08-04 16:53:21 · 504 阅读 · 0 评论 -
时间处理函数
时间处理函数time函数返回当前时间#includetime_t time(time_t *calptr);成功-- 时间值(秒数),出错-- -1若参数calptr非空,时间值也存在calptr上clock_gettime函数#includeint clock_gettime(clockid_t clock_id,struct timespec *t原创 2015-08-04 16:00:31 · 431 阅读 · 0 评论 -
mmap 函数
mmap 函数#includevoid *mmap(void *addr,size_t len,int prot,int flags,int fd,off_t off);成功-返回映射区域的起始地址,出错-返回MAP_FAILEDaddr 参数用于指定映射存储区的起始地址。通常设置为NULL,表示由系统选择映射区的起始地址。此函数返回值是映射区的起始地址。len 参数原创 2015-08-04 11:43:59 · 439 阅读 · 0 评论 -
同步和信号量
信号量概述下面介绍用信号量进行同步。信号量概念由荷兰科学家Dijkstra首先提出。信号量是一个特殊类型的变量,它可以被增加或者减少。但对其的关键访问被保证是原子操作,即使在一个多线程程序中也是如此。信号量有两种类型:(1)二进制信号量。它只有0和1两种取值。(2)计数信号量。它可以有更大的取值范围。如果要用信号量来保护一段代码,使其每次只能被一个执转载 2015-08-03 19:41:31 · 693 阅读 · 0 评论 -
同步和互斥量
互斥量(也称为互斥锁)出自POSIX线程标准,可以用来同步同一进程中的各个线程。当然如果一个互斥量存放在多个进程共享的某个内存区中,那么还可以通过互斥量来进行进程间的同步。互斥量,从字面上就可以知道是相互排斥的意思,它是最基本的同步工具,用于保护临界区(共享资源),以保证在任何时刻只有一个线程能够访问共享的资源。互斥量类型声明为pthread_mutex_t数据类型,在中有具体的定义。转载 2015-08-03 12:07:02 · 422 阅读 · 0 评论 -
同步和条件变量
条件变量变量也是出自POSIX线程标准,另一种线程同步机制,。主要用来等待某个条件的发生。可以用来同步同一进程中的各个线程。当然如果一个条件变量存放在多个进程共享的某个内存区中,那么还可以通过条件变量来进行进程间的同步。每个条件变量总是和一个互斥量相关联,条件本身是由互斥量保护的,线程在改变条件状态之间必须要锁住互斥量。条件变量相对于互斥量最大的优点在于允许线程以无竞争的方式等待条件的发生。当转载 2015-08-03 12:03:51 · 411 阅读 · 0 评论 -
exit函数 和 _exit函数区别
exit()函数定义在stdlib.h中,而_exit()定义在unistd.h中,从名字上看,stdlib.h似乎比 unistd.h高级一点,那么,它们之间到底有什么区别呢?_exit()函数的作用最为简单:直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构;exit() 函数则在这些基础上作了一些包装,在执行退出之前加了若干道工序,也是因为这个原因,有些人认为e转载 2015-08-02 18:14:59 · 406 阅读 · 0 评论 -
Linux 进程控制函数
返回标识符函数#includepid_t getpid();//返回值:调用进程的进程IDpid_t getppid();//返回值:调用进程的父进程pid_t getuid();//返回值:调用进程的实际用户IDpid_t geteuid();//返回值:调用进程的有效用户IDpid_t getgid();//返回值:调用进程的实际组IDpid_t get原创 2015-08-02 17:24:56 · 498 阅读 · 0 评论 -
同步与读写锁
读写锁和互斥量(互斥锁)很类似,是另一种线程同步机制,但不属于POSIX标准,可以用来同步同一进程中的各个线程。当然如果一个读写锁存放在多个进程共享的某个内存区中,那么还可以用来进行进程间的同步,和互斥量不同的是:互斥量会把试图进入已保护的临界区的线程都阻塞;然而读写锁会视当前进入临界区的线程和请求进入临界区的线程的属性来判断是否允许线程进入。相对互斥量只有加锁和不加锁两种状态,读写锁有三转载 2015-08-03 11:48:49 · 397 阅读 · 0 评论 -
线程的结合态和分离态
线程的分离与结合 在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。线程的分离状态决定一个线程以什么样的方式来终止自己。在上面的例子中,我们采用转载 2015-08-03 09:42:36 · 1324 阅读 · 0 评论 -
Linux 多线程的基本概念
一、基本概念1、线程是计算机中独立运行的最小单位。进程是分配资源的单位。2、为什么使用多线程?(1)启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间转载 2015-08-03 09:39:36 · 380 阅读 · 0 评论 -
僵尸进程和孤儿进程
1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的转载 2015-08-02 18:21:16 · 409 阅读 · 0 评论 -
线程属性设置
在上一篇文章中,介绍了线程的创建和退出,以及相关函数的使用。其中pthread_create函数的第二个参数,是关于线程属性的设置,这也是今天所有讲述的。这些属性主要包括邦定属性、分离属性、堆栈地址、堆栈大小、优先级。其中系统默认的是非邦定、非分离、缺省1M的堆栈、与父进程同样级别的优先级。在pthread_create中,把第二个参数设置为NULL的话,将采用默认的属性配置。(1)邦定属性。转载 2015-08-03 17:19:09 · 1752 阅读 · 0 评论 -
创建守护进程的步骤
守护进程编程步骤1. 创建子进程,父进程退出 所有工作在子进程中进行 形式上脱离了控制终端2. 在子进程中创建新会话 setsid()函数 使子进程完全独立出来,脱离控制3. 改变当前目录为根目录 chdir()函数 防止占用可卸载的文件系统 也可以换成其它路径4. 重设文件权限掩码 umask()函数 防止继承的文件创建屏蔽字拒原创 2015-09-08 11:26:31 · 563 阅读 · 0 评论