随笔分类 -  unix环境高级编程

摘要:所谓共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。其他进程能把同一段共享内存段“连接到”他们自己的地址空间里去。所有进程都能访问共享内存中的地址。如果一个进程向这段共享内... 阅读全文
posted @ 2015-06-16 12:53 Jessica程序猿 阅读(4641) 评论(0) 推荐(0)
摘要:close和unlink。以前时候总是不太理解两者的区别,最近看到一篇博客比较详细地描述了二者的本质区别,这里我引用了它的原文。 “每一个文件,都可以通过一个struct stat的结构体来获得文件信息,其中一个成员st_nlink代表文件的链接数。当通过shell的touch命令或者在程序中... 阅读全文
posted @ 2015-05-28 15:28 Jessica程序猿 阅读(1083) 评论(0) 推荐(1)
摘要:写时复制技术最初产生于Unix系统,用于实现一种傻瓜式的进程创建:当发出fork()系统调用时,内核原样复制父进程的整个地址空间并把复制的那一份分配给子进程。这种行为是非常耗时的,因为它需要:·为子进程的页表分配页面·为子进程的页分配页面·初始化子进程的页表·把父进程的页复制到子进程相应的页中创建一... 阅读全文
posted @ 2015-05-11 20:12 Jessica程序猿 阅读(18957) 评论(3) 推荐(4)
摘要:最近研究mysql源码,各种锁,各种互斥,好在我去年认真学了《unix环境高级编程》, 虽然已经忘得差不多了,但是学过始终是学过,拿起来也快。写这篇文章的目的就是总结linux 下多线程编程,作为日后的参考资料。本文将介绍linux系统下多线程编程中,线程同步的各种方法。包括:互斥量(mutex)读... 阅读全文
posted @ 2015-04-09 21:01 Jessica程序猿 阅读(744) 评论(0) 推荐(0)
摘要:Linux进程间通信——使用数据报套接字前一篇文章,Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用。一、简单回顾——什么是数据报套接字socket,即套接字是一种通信机制,凭借这种机制,客户/... 阅读全文
posted @ 2015-04-01 10:19 Jessica程序猿 阅读(809) 评论(0) 推荐(0)
摘要:Linux进程间通信——使用流套接字前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程。通常我们使用socket进行网络编程,这里将会简单地讲述如何使用socket进行简单的网络编程。一... 阅读全文
posted @ 2015-04-01 10:13 Jessica程序猿 阅读(714) 评论(0) 推荐(0)
摘要:Linux进程间通信——使用消息队列下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处。有关命名管道的更多内容可以参阅我的另一篇文章:Linux进程间通信——使用命名管道一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。消息队列是消息的链接... 阅读全文
posted @ 2015-03-31 21:00 Jessica程序猿 阅读(1081) 评论(0) 推荐(0)
摘要:Linux进程间通信——使用共享内存下面将讲解进程间通信的另一种方式,使用共享内存。一、什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共... 阅读全文
posted @ 2015-03-31 20:19 Jessica程序猿 阅读(2096) 评论(0) 推荐(0)
摘要:Linux进程间通信——使用信号量这篇文章将讲述别一种进程间通信的机制——信号量。注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物。有关信号的更多内容,可以阅读我的另一篇文章:Linux进程间通信——使用信号。下面就进入信号量的讲解。一、什么是信号量为了防止出现因多个程序同时访问... 阅读全文
posted @ 2015-03-31 20:13 Jessica程序猿 阅读(2181) 评论(0) 推荐(0)
摘要:Linux进程间通信——使用命名管道转载:http://blog.csdn.net/ljianhui/article/details/10202699在前一篇文章——Linux进程间通信——使用匿名管道中,我们看到了如何使用匿名管道来在进程之间传递数据,同时也看到了这个方式的一个缺陷,就是这些进程都... 阅读全文
posted @ 2015-03-31 18:47 Jessica程序猿 阅读(1475) 评论(0) 推荐(0)
摘要:Linux进程间通信——使用匿名管道在前面,介绍了一种进程间的通信方式:使用信号,我们创建通知事件,并通过它引起响应,但传递的信息只是一个信号值。这里将介绍另一种进程间通信的方式——匿名管道,通过它进程间可以交换更多有用的数据。一、什么是管道如果你使用过Linux的命令,那么对于管道这个名词你一定不... 阅读全文
posted @ 2015-03-31 18:18 Jessica程序猿 阅读(550) 评论(0) 推荐(0)
摘要:Linux进程间通信——使用信号一、什么是信号用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中的进程捕获到这个信号然后作出一定的操作并最终被终止。信号是UNIX和L... 阅读全文
posted @ 2015-03-31 17:31 Jessica程序猿 阅读(450) 评论(0) 推荐(0)
摘要:命名管道(named PIPE)由于基于fork机制,所以管道只能用于父进程和子进程之间,或者拥有相同祖先的两个子进程之间 (有亲缘关系的进程之间)。为了解决这一问题,Linux提供了FIFO方式连接进程。FIFO又叫做命名管道(named PIPE)。FIFO (First in, First o... 阅读全文
posted @ 2015-03-31 17:15 Jessica程序猿 阅读(1786) 评论(0) 推荐(0)
摘要:与一个进程关联的ID有6个或更多,如下图所示:与每个进程相关联的用户ID和组ID实际用户ID实际组ID我们实际是谁有效用户ID有效组ID附加组ID用于文件访问权限检索保存的设置用户ID保存的设置组ID由exec函数保存实际用户ID和实际组ID标识我们究竟是谁,这两个字段在登录时取自口令文件中的登录项... 阅读全文
posted @ 2015-02-06 20:03 Jessica程序猿 阅读(1483) 评论(0) 推荐(0)
摘要:下面两个函数都可用来复制一个现存的文件描述符:#includeint dup(int filedes);int dup2(int filedes,int filedes2); ... 阅读全文
posted @ 2015-02-06 11:33 Jessica程序猿 阅读(3601) 评论(0) 推荐(0)
摘要:参考文章:http://blog.csdn.net/andyxie407/article/details/1672325今天在运行在APUE第16章的16-14(客户端)和16-15(服务端)遇到了不少问题,搞了半天,运行方法多谢andyxie407的文章给了很好地参考(本来就一样,不叫参考),后面... 阅读全文
posted @ 2014-10-20 23:02 Jessica程序猿 阅读(352) 评论(0) 推荐(0)
摘要:ngx_int_tngx_daemon(ngx_log_t *log){ int fd; // 让init进程成为新产生进程的父进程: // 调用fork函数创建子进程后,使父进程立即退出。这样,产生的子进程将变成孤儿进程,并被init进程接管, // 同时,所产生的新进... 阅读全文
posted @ 2014-10-20 16:38 Jessica程序猿 阅读(5147) 评论(0) 推荐(0)
摘要:孤儿进程和守护进程通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程。现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程一.孤儿进程1.什么是 孤儿进程如果一个子进程的父进程先于子进程 结束, 子进程就成为一个孤儿进程,它由 init 进程收养,成为 init... 阅读全文
posted @ 2014-10-20 16:27 Jessica程序猿 阅读(3265) 评论(0) 推荐(0)
摘要:什么是僵尸进程?首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打开的文件等,但内核为每一个终止子进程保存了一定量的信息。这些信息至少包括进程ID,进程的终止状态,以及该进程使用的CPU时间,所以当终止子进程的父进程调用wait或waitpid时就可以得到这些信息。而僵尸... 阅读全文
posted @ 2014-10-12 13:35 Jessica程序猿 阅读(27663) 评论(3) 推荐(12)
摘要:早期UNIX系统的一个特性是:如果在进程执行一个低速系统调用而阻塞期间捕捉到一个信号,则该系统调用就被中断不再继续执行。该系统调用返回出错,其errno设置为EINTR。这样处理的理由是:因为一个信号发生了,进程捕捉到了它,这意味着已经发生了某种事情,所以是个好机会应当唤醒阻塞的系统调用。在这里,我... 阅读全文
posted @ 2014-10-12 11:08 Jessica程序猿 阅读(3700) 评论(0) 推荐(2)