随笔分类 -  UNIX高级编程

5种IO模型
摘要:一、五种I/O模型: 阻塞I/O,非阻塞I/O,I/O复用模型,信号驱动I/O,异步I/O 前四种属于同步iO,最后一种属于异步IO。因为前四种真正的I/O操作将阻塞进程。异步I/O不导致请求被进程阻塞。由内核完成I/O操作。 1、阻塞IO 2、非阻塞IO 非阻塞IO,recv返回错误-1(EWOU 阅读全文

posted @ 2019-05-30 17:38 wsw_seu 阅读(228) 评论(0) 推荐(0) 编辑

wait函数与waitpid函数(僵尸进程)
摘要:当子进程退出时,内核会向父进程发送SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止) 子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程。它只保留最小的一些内核数据结构,以便父进程查询子进程的退出状态。父进程查询子进程的退出状态可以用wait/waitpi 阅读全文

posted @ 2019-05-12 20:53 wsw_seu 阅读(726) 评论(0) 推荐(0) 编辑

UNIX系统编程:文件IO(I)
摘要:1、标准C库中访问文件用的是文件指针FILE *(stdin,stdout,stderr);对于linux系统编程而言,所有对设备或文件的操作都是通过文件描述符进行的 2、当打开或者创建一个文件的时候,内核向进程返回一个文件描述符(非负整数),后续对文件的操作只需要通过文件描述符,内核记录有关这个打 阅读全文

posted @ 2019-05-09 15:08 wsw_seu 阅读(180) 评论(0) 推荐(0) 编辑

系统编程错误处理
摘要:在系统编程中错误通常通过函数返回值来表示,并通过特殊变量errno来描述。errno这个全局变量在<errno.h>头文件中声明如下: extern int errno; 同时提供了两个错误处理函数:perror、strerror。 char * strerror(int errnum); //将错 阅读全文

posted @ 2019-05-08 15:41 wsw_seu 阅读(181) 评论(0) 推荐(0) 编辑

共享内存
摘要:共享内存:共享内存区是最快的IPC形式,一旦这样的内存映射到共享的进程的地址空间,这些进程间数据的传递不再涉及到内核,换句话说就是进程不再通过执行进入内核的系统调用来传递彼此的数据 共享内存就是映射一段能被其他进程所访问的内存,这段内存由一个进程创建,但多个进程都可以访问。 管道或者消息队列会有多次 阅读全文

posted @ 2018-03-13 15:18 wsw_seu 阅读(218) 评论(0) 推荐(0) 编辑

用system v消息队列实现回射客户/服务器程序
摘要:客户端程序 服务端程序: 阅读全文

posted @ 2018-03-13 11:34 wsw_seu 阅读(152) 评论(0) 推荐(0) 编辑

消息队列
摘要:System V随内核持续的IPC 对象数据结构struct ipc_perm{ key_t key; uid_t uid; gid_t gid; uid_t cuid; gid_t cgid; unsigned short mode; unsigned short seq;}消息队列提供了一个从一 阅读全文

posted @ 2018-03-13 11:24 wsw_seu 阅读(803) 评论(0) 推荐(0) 编辑

理解 Linux 的硬链接与软链接(转)
摘要:Linux 的文件与目录 现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用。在 UNIX 系统中,操作系统为磁盘上的文本与图像、鼠标与键盘等输入设备及网络交互等 I/O 操作设计了一组通用 API,使他们被处理时均可统一使用字节流方式。换 阅读全文

posted @ 2018-03-06 09:27 wsw_seu 阅读(197) 评论(0) 推荐(1) 编辑

POSIX条件变量
摘要:条件变量: 当一个线程互斥的访问某个变量时,它可能发现其他线程改变状态之前,它什么都做不了例如:一个线程访问队列时,发现队列为空,它只能等待,直到其他线程将一个节点添加到队列中,这种情况就需要使用条件变量。 线程A: 线程B: 改变nint n=0 进入临界区进入临界区 更改 n>0等待 n>0(该 阅读全文

posted @ 2018-03-03 20:01 wsw_seu 阅读(310) 评论(0) 推荐(0) 编辑

自旋锁与读写锁
摘要:自旋锁:自旋锁类似于互斥锁,它的性能比互斥锁更高。自旋锁与互斥锁很重要的一个区别在于:线程在申请自旋锁的时候,线程不会被挂起,它处于等待的状态。 从 实现原理上来讲,Mutex属于sleep-waiting类型的锁。例如在一个双核的机器上有两个线程(线程A和线程B),它们分别运行在Core0和 Co 阅读全文

posted @ 2018-03-03 19:27 wsw_seu 阅读(654) 评论(0) 推荐(0) 编辑

POSIX信号量与互斥锁实现生产者消费者模型
摘要:posix信号量 Link with -lpthread. sem_t *sem_open(const char *name, int oflag);//打开POSIX信号量 sem_t *sem_open(const char *name, int oflag,mode_t mode, unsig 阅读全文

posted @ 2018-03-03 19:08 wsw_seu 阅读(279) 评论(0) 推荐(0) 编辑

线程特定数据
摘要:线程特定数据:在单线程程序中,我们经常要用到“全局变量”以实现多个函数间共享数据。在多线程环境下,由于数据空间是共享的,因此全局变量也为所有的线程所共享。但有的应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨越多个函数访问。POSIX线程库通过维护一定的数据结构来解决这个问 阅读全文

posted @ 2018-03-03 17:05 wsw_seu 阅读(289) 评论(0) 推荐(0) 编辑

线程属性
摘要:线程属性:attr中包含了以下的多个属性。初始化与销毁属性:int pthread_attr_init(pthread_attr_t* attr);int pthread_attr_destroy(pthread_attr_t* attr); 获取与设置分离属性:int pthread_attr_g 阅读全文

posted @ 2018-03-03 16:45 wsw_seu 阅读(244) 评论(0) 推荐(0) 编辑

POSIX线程
摘要:posix线程库接口:引入<pthread.h> 链接要加上-lpthread 成功返回0,失败返回错误码.pthread函数出错时不会设置全局变量errno,而是将错误代码返回。int pthread_create(pthread_t* thread,const pthread_attr_t* a 阅读全文

posted @ 2018-03-02 20:59 wsw_seu 阅读(168) 评论(0) 推荐(0) 编辑

有名管道FIFO进程间数据传输实例
摘要:紧接着上面一个博客的简单介绍,下面进行一个没有血缘关系的进程间通信的实例,实现文件拷贝传输。 有两个进程,一个主要是fifow进程:读文件Makefile内容,写入管道;另一个进程fifor:读管道内容,写入到Makefile2。 首先,写端会创建一个管道,然后读取Makefile内容,写入到管道t 阅读全文

posted @ 2018-02-01 16:13 wsw_seu 阅读(305) 评论(0) 推荐(0) 编辑

命名管道FIFO及其读写规则
摘要:一、匿名管道的一个限制就是只能在具有共同祖先的进程间通信命名管道(FIFO):如果我们想在不相关的进程之间切换数据,可以使用FIFO文件来做这项工作注意:命名管道是一种特殊类型文件。利用命令:$ mkfifo filename或者相关函数:int mkfifo(const char*filename 阅读全文

posted @ 2018-02-01 15:58 wsw_seu 阅读(1009) 评论(0) 推荐(0) 编辑

(匿名)管道的读写规则
摘要:管道读写规则:1、当没有数据可读时 O_NONBLOCK disable(文件状态标志)未设置非阻塞的话 : read调用阻塞,即进程暂停执行,一直等到有数据来。O_NONBLOCK enable: 设置非阻塞模式的话,无数据可读时,read调用返回-1,errno值为EAGAIN。 总之:阻塞模式 阅读全文

posted @ 2018-01-30 15:31 wsw_seu 阅读(671) 评论(0) 推荐(0) 编辑

(匿名)管道
摘要:(匿名)管道:一种进程间通信形式。把从一个进程连接到另一个进程的一个数据流成为一个管道(固定大小内核缓冲区)。管道的限制:1、半双工(数据只能在一个方向流动)需要双方通信时,要建立两个管道; 2、只能用于共同祖先进程(具有亲缘关系的进程)通信,通常一个管道由一个进程创建,然后调用fork。 例如:l 阅读全文

posted @ 2018-01-30 11:36 wsw_seu 阅读(160) 评论(0) 推荐(0) 编辑

时间与定时器操作
摘要:三种不同精度的睡眠函数:1、unsigned int sleep(unsigned int seconds) 会被信号中断,返回剩余的秒数 int n=5; do{ n=sleep(n); }while(n>0) 确切等到5秒2、int usleep(useconds_t usec) ; 微秒最为单 阅读全文

posted @ 2018-01-30 10:47 wsw_seu 阅读(591) 评论(0) 推荐(0) 编辑

可靠信号与不可靠信号
摘要:信号是软件中断,是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。 信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进 阅读全文

posted @ 2018-01-30 10:06 wsw_seu 阅读(1802) 评论(1) 推荐(0) 编辑

导航

点击右上角即可分享
微信分享提示