随笔分类 -  linux C编程实战

书籍学习
进程间通信
摘要:主要有: 管道,有名管道,消息队列,信号量,共享内存,信号,套接字。 进程的地址空间是各自独立的,因此进程之间交互数据必须采用专门的通信机制。特别是在大型的应用系统中,往往需要多个进程相互 协作共同完成一个任务,这就需要使用进程间通信(internet process connection,IPC) 阅读全文
posted @ 2017-04-13 14:01 邶风 阅读(229) 评论(0) 推荐(0)
信号的发送与处理
摘要:信号不仅可以用来处理异步事件,也可以用来传递数据。 利用函数sigaction跟sigqueue来实现进程间的数据传递。 程序1:发送数据 程序2:接收数据 整型数据从进程1传递给了进程2 阅读全文
posted @ 2017-04-12 15:12 邶风 阅读(307) 评论(0) 推荐(0)
信号应用于事件通知
摘要:实际应用中,进程常常需要等待某一事件的发生,一般可以通过检测某一全局变量来判断事件是否发生。 有3种方法可以实现这一要求: 1、 程序不停的循环检查全局变量,这样可以满足要求,但是非常占用CPU资源。 2、 进程使用pause挂起,等待信号的触发,事件发生时向进程发送信号,对应的信号处理函数改变全局 阅读全文
posted @ 2017-04-11 16:10 邶风 阅读(272) 评论(0) 推荐(0)
信号的屏蔽,信号集
摘要:1、信号集 POSIX标准定义了数据类型sigset_t #include <signal.h> int sigemptyset(sigset_t *set); 初始化一个信号集,使其不包括任何信号 int sigfillset(sigset_t *set); 用来初始化一个信号集,使其包括所有信号 阅读全文
posted @ 2017-04-11 16:01 邶风 阅读(581) 评论(0) 推荐(0)
信号的发送kill,raise,alarm,setitimer,abort,sigqueue
摘要:1、kill函数 int kill(pid_t pid, int sig); 发送信号给指定的进程。 (1) If pid is positive, then signal sig is sent to the process with the ID specified by pid. 如果pid是 阅读全文
posted @ 2017-04-10 17:38 邶风 阅读(930) 评论(0) 推荐(0)
信号处理函数的返回sigsetjmp/siglongjmp
摘要:由于在信号处理期间自动屏蔽了正在被处理的信号,而使用setjmp/longjmp跳出信号处理程序时又不会自动将 信号屏蔽码修改会原来的屏蔽码,从而引起该信号被永久屏蔽。 可以使用sigsetjmp/siglongjmp来解决这一问题。 int sigsetjmp(sigjmp_buf env, in 阅读全文
posted @ 2017-04-10 17:35 邶风 阅读(2511) 评论(0) 推荐(0)
信号处理函数的返回setjmp/longjmp
摘要:信号处理函数可以正常返回,也可以调用其他函数返回到程序的主函数中,而不是从该处理程序返回。 正如ANSI C标准所说明的,一个信号处理程序可以返回或者调用abort、exit或longjmp(goto不支持跳出它所在的函数, 因此不能用来从信号处理程序返回到主函数中)。 int setjmp(jmp 阅读全文
posted @ 2017-04-10 16:47 邶风 阅读(1201) 评论(0) 推荐(0)
信号处理signal、sigaction、pause、信号嵌套处理、不可重入函数
摘要:信号的捕捉和处理 主要由signal和sigaction函数来完成。还有一个函数pause,它可用来响应任何信号,不过不做任何处理。 1、signal函数 typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sigha 阅读全文
posted @ 2017-03-31 17:04 邶风 阅读(1483) 评论(0) 推荐(0)
信号与信号处理
摘要:信号的来源,种类,进程对信号的响应。 信号的捕获,发送,屏蔽。 信号是一种软中断,它提供了一种处理异步事件的方式,也是进程间唯一的异步通信方式。根据POSIX标准扩展以后的信号机制,不仅可以 用来通知进程发生了什么事件,还可以给进程传递数据。 信号的来源: 1、硬件方式: 在终端按下某些键时,产生信 阅读全文
posted @ 2017-03-24 17:14 邶风 阅读(302) 评论(0) 推荐(0)
出错处理- 错误码-错误检查
摘要:1、错误检查: 头文件errno.h定义了变量errno,它存储了错误发生时的错误码,通过错误码可以得到错误的描述信息。 当函数调用失败时,errno的值才有意义。 2、错误码: 错误码是一些定义在errno.h中的宏: 3、错误的提示信息 char *strerror(int errnum); 根 阅读全文
posted @ 2017-03-17 17:19 邶风 阅读(298) 评论(0) 推荐(0)
线程-----异步信号
摘要:信号可以被进程用来相互通信。线程同进程一样也可以接收和处理信号,信号也是一种线程间同步的手段。 信号(SIGINT 和 SIGNO)与任何线程都是异步的,也就是说信号达到线程的时间是不确定的。如果有多个线程可以接收 异步信号,则只有一个被选中。如果并发的多个同样的信号被送到一个进程,每一个将被不同的 阅读全文
posted @ 2017-03-17 16:44 邶风 阅读(238) 评论(0) 推荐(0)
线程同步,条件变量pthread_cond_wait
摘要:与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号 阅读全文
posted @ 2017-03-13 16:49 邶风 阅读(7355) 评论(0) 推荐(2)
线程同步
摘要:线程最大的特点就是资源共享,然而资源共享中的同步问题是线程编程的难题。 三种方法: 1、互斥锁 2、条件变量 3、异步信号 初始化一个锁 int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t 阅读全文
posted @ 2017-03-09 17:27 邶风 阅读(216) 评论(0) 推荐(0)
多线程私有数据pthread_key_create
摘要:参照:http://blog.csdn.net/xiaohuangcat/article/details/18267561 在多线程的环境下,进程内的所有线程共享进程的数据空间。因此全局变量为所有线程共享。在程序设计中有时需要保存线程自己的全局变量,这种特殊的变量仅在线程内部有效。 如常见的errn 阅读全文
posted @ 2017-03-07 16:45 邶风 阅读(24244) 评论(0) 推荐(1)
多线程,线程的退出顺序
摘要:1:主进程退出时,不管子、孙...线程都会退出。但是对子线程创建的线程来说,比如下面的的子线程创建了孙线程,子线程先退出,孙线程没有退出 输出是//过了5秒created thread exit//又过了5秒grandson thread exit//又过了5秒main thread exit 2: 阅读全文
posted @ 2017-03-07 16:32 邶风 阅读(1108) 评论(0) 推荐(0)
pthread_cleanup_push与pthread_cleanup_pop与pthread_cancel与pthread_testcancel
摘要:参考: http://blog.csdn.net/zjc156m/article/details/9021343 http://blog.csdn.net/u010027547/article/details/48575707 http://www.cnblogs.com/lijunamneg/ar 阅读全文
posted @ 2017-02-27 17:29 邶风 阅读(630) 评论(0) 推荐(0)
线程正常终止pthread_exit,pthread_join,pthread_kill,pthread_cancel,sigwait,sigaddset
摘要:int pthread_join(pthread_t thread, void **retval); int pthread_detach(pthread_t thread); void pthread_exit(void *retval); 线程正常终止的方法: 1、return从线程函数返回。 阅读全文
posted @ 2017-02-23 17:49 邶风 阅读(31126) 评论(1) 推荐(4)
线程的创建,pthread_create,pthread_self,pthread_once
摘要:typedef unsigned long int pthread_t; //come from /usr/include/bits/pthreadtypes.h int pthread_create(pthread_t *thread, const pthread_attr_t *attr,voi 阅读全文
posted @ 2017-02-22 16:07 邶风 阅读(1448) 评论(0) 推荐(0)
线程和进程的关系
摘要:在多个CPU的主机上,线程是可以同时执行的。 多线程对于多进程的优点: 1、在多进程的情况下,每个进程都有自己的地址空间。而在多线程情况下,同一进程内的线程共享进程的地址空间, 因此,创建一个新的进程要耗费时间来为其分配系统资源,而创建一个新的线程花费的时间要少得多。 2、在系统调度方面,由于进程拥 阅读全文
posted @ 2017-02-22 14:14 邶风 阅读(725) 评论(0) 推荐(0)
改变进程的优先级,nice,getpriority,setpriority
摘要:int getpriority(int which, int who);返回一组进程的优先级 参数which和who确定返回哪一组进程的优先级 The value which is one of PRIO_PROCESS, PRIO_PGRP, or PRIO_USER, and who is in 阅读全文
posted @ 2017-02-22 09:58 邶风 阅读(7244) 评论(0) 推荐(0)