Unix环境高级编程
文章平均质量分 79
丿咫尺天涯
这个作者很懒,什么都没留下…
展开
-
UNIX环境高级编程(阅读笔记)---多线程信号
多线程信号 1.默认情况下,信号将由主进程接收处理,就算信号处理函数是由子线程注册的 2. 每个线程均有自己的信号屏蔽字,可以使用sigprocmask函数来屏蔽某个线程对该信号的响应处理,仅留下需要处理该信号的线程来处理指定的信号。 3. 对某个信号处理函数,以程序执行时最后一次注册的处理函数为准,即在所有的线程里,同一个信号在任何线程里对该信号的处理一定相同 4. 可以使用pth原创 2016-05-10 14:58:56 · 763 阅读 · 0 评论 -
简单的服务端与客户端通信代码
一、初级服务端代码,只实现了简单的连接和接收数据功能 #include #include #include #include #include #include #include #include #define LISTEN_PORT 9999 int main(void ) { int socket_fd,accept_fd; struct sockadd原创 2016-05-18 15:18:06 · 608 阅读 · 0 评论 -
Unix环境高级编程(阅读笔记)-----kill、raise、alarm、pause函数
kill函数将信号发送给进程或者进程组,raise函数则运行进程向自身发送信号。 1. #include 2. int kill(pid_t pid,int signo); 3. int raise(int signo); 4. //若成功,则返回0,出错则返回-1. 使用alarm函数可以执行一个计时器,在将来某个指定的时间该计时器会超时。当计时器超时转载 2016-05-12 16:15:24 · 493 阅读 · 0 评论 -
vimtutor中文版
=============================================================================== = 欢 迎 阅 读 《 V I M 教 程 》 —— 版本 1.5 = ==================================================转载 2016-05-16 19:53:24 · 387 阅读 · 0 评论 -
文件I/O
文件I/O 1. open函数 int open(const char* path,int oflag) oflag参数包括O_RDONLY,O_WRONLY,O_RDWR,O_EXEC,O_SEARCH 2. lseek函数 off_t lseek(int fd,off_t offset,int whence) 每个打开文件都有一个与其相关联的”当前文件偏移量”原创 2016-05-16 15:29:23 · 259 阅读 · 0 评论 -
Unix环境高级编程(阅读笔记)----sigsuspend函数
更改进程的信号屏蔽字可以阻塞所选择的信号,或解除对它们的阻塞,使用这种技术可以保护不希望由信号中断的代码临界区。 1)头文件:#include 2)一个保护临界区代码的错误实例:(sigprocmask()和pause()实现) #include #include #include void handler(int sig) //信号处理函数的实现转载 2016-05-14 10:58:45 · 402 阅读 · 0 评论 -
unix环境高级编程(阅读笔记)------signal函数与sigaction的区别
signal函数每次设置具体的信号处理函数(非SIG_IGN)只能生效一次,每次在进程响应处理信号时,随即将信号处理函数恢复为默认处理方式.所以如果想多次相同方式处理某个信号,通常的做法是,在响应函数开始,再次调用signal设置,如下图: int sig_int(); //My signal handler ... signal(SIGINT, sig_int)原创 2016-05-11 22:06:20 · 464 阅读 · 0 评论 -
Unix环境高级编程(阅读笔记)----中断的系统调用,自动重启动的函数
早期的UNIX系统的一个特性是:如果进程在执行一个低速系统调用而阻塞期间捕捉到一个信号,该系统调用就被终端不再 继续执行。该系统调用返回出错,其errno被设置为EINTR。 为了支持这种特性,将系统调用分成两类:低速系统调用和其他系统调用。低速系统调用是可能会使进程永远阻塞的一类 系统调用: 1.在读某些类型的文件(管道,终端设备以及网络设备)时,如果数据并不存在则可能会使调用者永远阻塞原创 2016-05-11 22:38:46 · 907 阅读 · 0 评论 -
unix环境高级编程(阅读笔记)-----信号以及signal函数
1.信号概念 信号是软件中断,很多比较重要的应用程序都需要处理信号。信号提供了一种处理异步事件的方法。 在有文件中,这些信号被定义为正整数。不存在信号为0的信号。 很多条件可以产生信号: 1.当用户按某些终端键时,引发终端产生的信号。在终端上按ctrl+c键,通常产生中断信号(SIGINT)。 2.硬件异常产生信号:除数为0,无效的内存引用等等。这些条件由硬件检测到,并将其通知内核,然后原创 2016-05-11 21:31:54 · 718 阅读 · 0 评论 -
Unix环境高级编程(阅读笔记)----setjmp和longjmp函数使用详解
非局部跳转语句---setjmp和longjmp函数。非局部指的是,这不是由普通C语言goto,语句在一个函数内实施的跳转,而是在栈上跳过若干调用帧,返回到当前函数调用路径上的某一个函数中。 #include Int setjmp(jmp_buf env); 返回值:若直接调用则返回0,若从longjmp调用返回则返回非0值 Void longjmp(jmp_buf env,in转载 2016-05-12 21:35:07 · 384 阅读 · 0 评论 -
Unix环境高级编程(阅读笔记)----sigaction函数
sigaction函数的功能是检查或修改指定信号相关联的处理动作,此函数取代UNIX早期版本使用的signal函数。 [cpp] view plain copy #include int sigaction(int signo, const struct sigaction *restrict act, struct sigaction转载 2016-05-12 16:43:58 · 386 阅读 · 0 评论 -
Unix环境高级编程(阅读笔记)----可靠信号
在产生信号时,内核通常在进程表中设置某一种形式的标志。当对信号采取了这种动作时,我们说向进程递送了一个信号。 在信号产生和递送之间的时间间隔内,称信号是未决的。 进程可以选用信号递送阻塞。如果为进程产生了一个选择为阻塞的信号,而且对该进程的动作是默认动作或捕捉该信号,则 为该进程将次信号保持为未决状态,直到该进程(1)对此信号解除了阻塞,或者(2)将次信号的动作更改为忽略。内核在转载 2016-05-12 15:56:50 · 366 阅读 · 0 评论 -
Unix环境高级编程(阅读笔记)----信号集、信号屏蔽函数sigprocmask
信号屏蔽字是指一个进程中当前阻塞而不能够递送给该进程的信号集。 信号集则是一个能表示多个信号的集合的一种数据类型,为sigset_t。 与信号集设置相关的函数有如下几个: // 下列四个函数成功返回0,出错返回-1 int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sigadds原创 2016-05-12 15:48:53 · 667 阅读 · 0 评论 -
unix环境高级编程(阅读笔记)----线程同步
多个线程共享相同的内存时,需要确保每个线程看到一致的数据视图。 1.互斥量 可以通过使用pthread的互斥接口保护数据,确保同一时间只有一个线程访问数据,互斥量(mutex)从本质上说是一把 锁,在访问共享资源前对互斥量进行枷锁,在访问完成后释放互斥量上的锁。对互斥量进行加锁后,任何其他试图再次对互斥 量进行加锁的线程将被阻塞知道当前线程释放该互斥锁。如果释放互斥锁时有多个线程阻塞,所有转载 2016-05-03 16:51:07 · 458 阅读 · 0 评论 -
UNIX环境高级编程(阅读笔记)——线程属性
pthread_attr_t 的缺省属性值 1、初始化一个线程对象的属性 int pthread_attr_init(pthread_attr_t *attr); 返回值:若是成功返回0,否则返回错误的编号 形 参: attr 指向一个线程属性的指针 说 明:Posix线程中的线程属性pthread_attr_t主要包括scope属性、deta转载 2016-05-03 20:51:03 · 445 阅读 · 0 评论 -
UNIX环境高级编程(阅读笔记)---线程相关函数
线程汇总: 1.#include 线程头文件,链接出错是加上-lpthread,因为pthread不是Linux中默认的库。 2.pthread_t pthread_self() 返回自身的线程ID,C中输出可以指定格式%lu。 3.int pthread_create(pthread_t * restricttidp,const pthread_attr_t * restrict a原创 2016-05-04 20:20:41 · 294 阅读 · 0 评论 -
基于select的服务端
* 1. 程序使用了一个数组fd,通信开始后把需要通信的多个socket描述符都放入此数组 * 2. 首先生成一个叫sock_fd的socket描述符,用于监听端口。 * 3. 将sock_fd和数组fd中不为0的描述符放入select将检查的集合fdsr。 // select_server.c #include #include #include #include #转载 2016-05-31 10:58:54 · 1069 阅读 · 0 评论