随笔分类 -  APUE

APUE过第一遍粗读
摘要:此问题来自项目上,应用程序本身由它的父进程启动,父进程监听`SIGCHLD`信号,即子进程退出时,父进程会收到这个信号,然后立即通过`execlp`重新启动子进程,确保子进程异常崩溃会被重新拉起来。而子进程(我们实际的业务应用)也会在某些地方fork新的进程,干别的事情。 出现的问题是,进程被重新拉 阅读全文
posted @ 2023-08-18 18:38 thammer 阅读(389) 评论(0) 推荐(0) 编辑
摘要:为了测试globalmem在不带互斥保护下,多个地方进行IO操作,会引发竞态的问题。写了如下一个测试程序: 会发现依然会出现文件偏移量相互干扰的情况,下图反应了fork调用后,父子进程与文件表,文件inode,vnode之间的关系(参考自APUE): 可以看到fork对父进程打开文件的拷贝只是拷贝了 阅读全文
posted @ 2020-04-01 17:29 thammer 阅读(358) 评论(0) 推荐(0) 编辑
摘要:什么是守护进程?其实感觉守护进程并没有什么明确的定义,只是守护进程有一些特征,这是它需要遵循的。 守护进程的第一个特征是长时间在后台运行的程序,并且主要是为了提供某种服务,而为了能够让服务尽可能随时都可用,就要求这个服务是一直运行的,于是守护进程就守护着这个服务不挂掉。linux里面常见的守护进程一 阅读全文
posted @ 2016-08-10 21:17 thammer 阅读(1584) 评论(0) 推荐(0) 编辑
摘要:消息队列以链表的方式将消息存储于内核中,调用msgsnd,msgrcv函数往消息队列里面投送,取出指定的消息。创建一个消息队列 生成一个消息队列或者获取已有消息队列id #include #include #include int msgg... 阅读全文
posted @ 2016-01-06 18:13 thammer 阅读(2689) 评论(0) 推荐(1) 编辑
摘要:管道是一种只允许用在有亲属关系的进程间通信的方式,由函数pipe创建一个管道,read,write进行读写操作。 #include int pipe(int pipefd[2]);参数pipefd[2]数组返回打开的读写描述符,pipefd[0]为读,pipefd[1]... 阅读全文
posted @ 2016-01-01 15:04 thammer 阅读(410) 评论(0) 推荐(0) 编辑
摘要:占位,等看了unp再补充 阅读全文
posted @ 2015-12-31 22:16 thammer 阅读(114) 评论(0) 推荐(0) 编辑
摘要:定义 记录锁:当一个进程对一个文件的某个部分或者整个文件作读操作或者修改时,记录锁可以阻止另一个进程修改文件的同一区域。 由其定义,可以知: 记录锁是对文件的一定范围,包括整个文件进行保护 记录锁的3个要素是:进程ID,文件范围,操作。也就是说判断记录锁是否产生排斥需要依据这3点。 ... 阅读全文
posted @ 2015-12-29 15:22 thammer 阅读(484) 评论(0) 推荐(0) 编辑
摘要:在linux多线程编程中,线程的执行顺序是不可预知的,但是有时候由于某些需求,需要多个线程在启动时按照一定的顺序执行,虽然可以使用一些比较简陋的做法,例如:如果有3个线程 ABC,要求执行顺序是A-->B-->C,可以create A--->sleep---->create B---->slee... 阅读全文
posted @ 2015-12-29 14:12 thammer 阅读(759) 评论(0) 推荐(0) 编辑
摘要:函数的可重入和线程安全是针对于2种不同的使用场景提出的概念。 可重入函数这一概念是针对于一个进程中单个线程,指的是一个函数如果在调用期间被中断,在中断中再次进入这个函数执行完毕后,恢复原来的中断点执行时,不会出现错误。 线程安全这个概念是针对多进程,多线程编程中产生的。指的是一个函数被并发调... 阅读全文
posted @ 2015-12-24 13:34 thammer 阅读(485) 评论(0) 推荐(0) 编辑
摘要:SYNOPSIS #include int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sigaddset(sigset_t *set, int signum); ... 阅读全文
posted @ 2015-12-04 16:54 thammer 阅读(882) 评论(0) 推荐(0) 编辑
摘要:看到apue的第十章,说到alarm,pause可以实现sleep,可以让某些一直阻塞的函数超时,例如read,write。代码如下: 1 static void sig_alrm(int signo) 2 { 3 printf("I'm just print from sig_alrm... 阅读全文
posted @ 2015-12-02 17:08 thammer 阅读(635) 评论(0) 推荐(0) 编辑
摘要:定义. 1.孤儿进程,就是父进程先于子进程退出,子进程会被挂到init进程(1号进程)下作为init的子进程,init进程对其进行管理。 2.僵死进程,就是子进程退出了,但是父进程没有对它进行善后处理,一个进程退出,操作系统会释放其打开的文件,所占用的内存,但是会留下一些信息比如退出状态,运行时... 阅读全文
posted @ 2015-11-22 16:06 thammer 阅读(732) 评论(0) 推荐(0) 编辑
摘要:在看APU时,第8章进程时, 编译执行程序,得到: 换一个方式执行,将程序执行结果重定向到一个文件: 发现前后2此结果不一样,第一个printf输出了2次,这是因为printf是属于标准IO,他的输出是带缓冲的,程序上面使用write进行输出却不会这样,write是不带缓冲的。 缓冲的目的是尽量减少 阅读全文
posted @ 2015-11-20 21:59 thammer 阅读(501) 评论(0) 推荐(0) 编辑
摘要:1 fd = open("./newfile", O_RDWR|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR); 2 if ( fd < 0 ) 3 { 4 perror("open"); 5 return -1; 6 } 7 pos = lsee... 阅读全文
posted @ 2015-11-14 10:54 thammer 阅读(845) 评论(0) 推荐(0) 编辑

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