环境编程
linux 环境应用编程
DADA2ndTIAN
这个作者很懒,什么都没留下…
展开
-
LINUX线程(六)生产者,消费者同步实例
消费者:一,创建并加锁phtread_mutex_t mutex;phtread_mutex_init()phtread_mutex_lockphtread_cond_wait() //等待条件满足,1)阻塞等条件变量2)解锁unlock3)加锁5. 访问共享数据6. 解锁,释放条件变量,释放锁生产者:phtread_mutext_lock生产数据,phtread_mutext_unlockphtread-cond_signal/phtread-cond_broadca原创 2021-01-09 16:31:24 · 178 阅读 · 0 评论 -
LINUX线程(五)线程同步
线程同步,指一个线程发出同一功能调用时,在没有得到结果之前,该调用不返回。同时其他线程为保证数据一致性,不能调用该功能同步方法锁的使用:建议锁,对公共数据进行保护,所有线程应该在访问公共数据前先拿锁再访问,但锁本身不具备强制性互斥量pthread_mutex_t mutexphtread_mutex_init(&mutex,NULL);phtread_mutex_destroy(&mutex,NULL);pthread_mutex_lock(&mutex)pthre原创 2021-01-09 15:51:46 · 211 阅读 · 0 评论 -
LINUX 线程 (二)控制原语
函数原型说明进程对应功能接口pthread_t pthread_self(void);返回线程ID,线程ID是进程内部,识别标志(不同进程中,线程ID允许相同)getpidint phtread_create(phtread_t *thread,const pthread_attr_t *attr,void *(*start_routine)(void ),void arg);创建新线程。参数1:传出参数,保存新线程ID;参数2:线程属性默认NULL;参数3:线程体,该函数...原创 2021-01-09 12:52:41 · 152 阅读 · 0 评论 -
LINUX 线程(四)属性设置线程分离
线程属性初始化int pthread_attr_init(phtread_attr_t *attr); 成功:0 ;失败,错误号销毁线程属性int pthread_attr_destroy(phtread_attr_t *attr); 成功:0 ;失败,错误号设置线程属性 分离状态int phtread_attr_setdetachstate(phtread_attr_t *attr,int detachstate);获取线程属性int phtread_attr_getdetachstate(原创 2021-01-09 12:47:58 · 340 阅读 · 0 评论 -
LINUX 线程(三)循环创键多个子线程
int main(){ int i ,ret; for(i = 0; i<N ;i++){ ret = pthread_create(&tid, NULL,tfn,NULL); if(ret!=0) perror(..); }}原创 2021-01-09 10:05:09 · 147 阅读 · 0 评论 -
LINUX 线程(一)概念
进程: 有独立的进程地址空间,有独立的pcb ,是分配资源的最小单位线程:有独立的PCB,没有独立的进程地址空间 ,是最小的执行单位ps -Lf 进程id : 查看对应进程下的线程数.LWP : 线程号,CPU 执行的最小单位线程ID 与LWP 不是同一概念,线程ID 用于同一进程中的线程管理线程共享.text .data. .rodata .bss heap 全局变量(除errno)线程独享栈空间(内核栈,用户栈)线程id处理器现场和栈指针errno信号屏蔽字调度原创 2020-12-28 13:16:52 · 106 阅读 · 1 评论 -
LINUX 会话 与守护进程创建
创建会话6点注意事项调用进程不能是进程组组长,该进程变成新会话的首进程该进程成为一个新进程组的组长进程新会话丢弃原有的控制终端,该会话没有控制终端该调用进程是组长进程,则出错返回有些系统需有root 权限建立新会话时,先调用fork,父进程终止,子进程调用setsid守护进程Daemon(精灵)进程,是linux 中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发送的事件,一般采用以d结尾的名字命名。创建步骤fork 子进程,让父进程终止子进程调用se转载 2020-12-28 12:57:54 · 181 阅读 · 0 评论 -
记录锁的使用
记录锁是对于不同进程访问文件区域的一种同步工具,防止多个进程修改同一文件区在同一个进程多次上锁,(这不是记录锁的正确用法,且没有意义)也不会被阻塞原创 2020-10-21 00:03:47 · 173 阅读 · 0 评论 -
第三版apue编译
第三版apue编译:首先在 http://www.apuebook.com/ 下载源码解压:tar zxvf src.3e.tar.gz看完Readme可知,直接执行make即可执行make报错:making threadsmake[1]: 正在进入目录 `/work/apue/apue.3e/threads'gcc -ansi -I../include -Wall -DLINUX -D_GNU_SOURCE badexit2.c -o badexit2 -L../lib转载 2020-09-26 11:05:27 · 145 阅读 · 0 评论 -
linux信号之作业控制
文章目录概述概述SIGTTIN 当一个后台进程组进程试图读其控制终端时,终端驱动程序产生此信号。(见9 . 8节中对此问题的讨论。)在下列例外情形下不产生此信号,此时读操作返回出错, e r r n o设置为E I O:( a )读进程忽略或阻塞此信号,或( b )读进程所属的进程组是孤儿进程组。...原创 2020-08-16 09:11:11 · 121 阅读 · 0 评论 -
linux信号【5】sigsetjmp和siglongjmp函数
文章目录简述简述这两个函数与 s e t j m p和l o n g j m p函数非常相似,都是用于程序的非局部转移。而在信号处理程序中,对应使用的就是sigsetjmp和siglongjmp函数。在信号处理程序中,有时需要返回到序的主循环中,而不是从该处理程序返回。为什么不直接使用 s e t j m p和l o n g j m p呢? 因为用l o n g j m p时有一个问题。当捕捉到一个信号时,进入信号捕捉函数,此时当前信号被自动地加到进程的信号屏蔽字中。这阻止了后来产生的这种信号中断此信原创 2020-08-11 19:46:54 · 503 阅读 · 0 评论 -
linux 信号【3】信号集和信号集函数
文章目录信号集信号集初始化信号集的变更信号集测试sigprocmask函数信号集数据类型s i g s e t _ t以包含一个信号集,表示多个信号的集合#include <signal.h>信号集初始化int sigemptyset(sigset_t * s e t) ;初始化由s e t指向的信号集,使排除其中所有信号int sigfillset(sigset_t * s e t) ;函数 s i g f i l l s e t初始化由s e t指向的信号集,使其包括所有信号原创 2020-08-11 19:01:40 · 183 阅读 · 0 评论 -
LINUX 信号【1】基础知识
文章目录信号是什么信号的三种处理方式信号的状态信号是什么信号是软件中断。很多比较重要的应用程序都需处理信号。信号提供了一种处理异步事件的方法:终端用户键入中断键,则会通过信号机构停止一个程序。信号的三种处理方式(1) 忽略此信号。大多数信号都可使用这种方式进行处理,但有两种信号却决不能被忽略。它们是:S I G K I L L和S I G S TO P。这两种信号不能被忽略的原因是:它们向超级用户提供一种使进程终止或停止的可靠方法。另外,如果忽略某些由硬件异常产生的信号(例如非法存储访问或除原创 2020-08-11 17:12:23 · 152 阅读 · 0 评论 -
linux信号【2】signal&sigaction
文章目录signalsigactionkillraisealarmpausesignal#include <signal.h>void (signal (int s i g n o, void ( f u n c)(int))) (int);s返回:成功则为以前的信号处理配置,若出错则为 S I G _ E R Rs i g n o参数是表1 0 - 1中的信号名。f u n c的值是:( a )常数S I G _ I G N,或( b )常数S I G _ D F L,或(原创 2020-08-11 17:09:06 · 158 阅读 · 0 评论 -
linux信号【4】相关函数kill&raise&alarm&pause
killint kill(pid_t p i d, int s i g n o) ;k i l l函数将信号发送给进程或进程组。k i l l的p i d参数有四种不同的情况:p i d > 0 将信号发送给进程I D为p i d的进程。p i d == 0 将信号发送给其进程组I D等于发送进程的进程组I D,而且发送进程有许可权向其发送信号的所有进程。这里用的术语“所有进程”不包括实现定义的系统进程集。对于大多数 U N I X系统,系统进程集包括:交换进程(pid 0),init原创 2020-08-11 16:27:56 · 168 阅读 · 0 评论 -
使用optparse 替代解决 getopt 不可重入的问题
源码原创 2020-08-09 22:22:35 · 377 阅读 · 0 评论 -
linux信号之SIGHUP
文章目录介绍介绍SIGHUP 如果终端界面检测到一个连接断开,则将此信号送给与该终端相关的控制进程(对话期首进程)。见图9 - 11,此信号被送给s e s s i o n结构中s _ l e a d e r字段所指向的进程。仅当终端的C L O C A L标志没有设置时,在上述条件下才产生此信号。(如果所连接的终端是本地的,才设置该终端的C L O C A L标志。它告诉终端驱动程序忽略所有调制解调器的状态行。第 11章将说明如何设置此标志。)注意,接到此信号的对话期首进程可能在后台,作为一个原创 2020-08-03 09:27:47 · 1546 阅读 · 0 评论 -
linux信号之SIGBUS,SIGEMT,SIGFPE,SIGILL等
SIGBUS 指示一个实现定义的硬件故障。SIGEMT 指示一个实现定义的硬件故障SIGFPE 此信号表示一个算术运算异常,例如除以0,浮点溢出等。SIGILL 此信号指示进程已执行一条非法硬件指令。SIGINFO 这是一种4 . 3 + B S D信号,当用户按状态键(一般采用C t r l - T)时,终端驱动程序产生此信号并送至前台进程组中的每一个进程。此信号通常造成在终端上显示前台进程组中各进程的状态信息。SIGINT 当用户按中断键(一般采用D E L E T..原创 2020-08-03 09:25:31 · 3869 阅读 · 0 评论