系统编程
rotation ㅤ
这个作者很懒,什么都没留下…
展开
-
fcntl函数的用法总结
fcntl函数功能记录锁原创 2016-07-21 11:56:27 · 44931 阅读 · 2 评论 -
wait和waitpid函数总结
wait和waitpid两个函数的功能:1.防止产生僵尸进程 2.跟据需求,先让父进程挂起等待子进程结束后,再运行,实现进程的同步。僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。如果进程不调用wait / wai原创 2016-07-27 21:56:23 · 1839 阅读 · 0 评论 -
Linux进程间通信之POSIX共享内存
共享内存是最高效的IPC机制,因为它不涉及进程之间的任何数据传输。这种高效率带来的问题是,我们必须用其他辅助手段来同步进程对共享内存的访问,否则会产生竞态条件。因此,共享内存通常和其他进程间通信方式一起使用。 Linux下有三种共享内存的IPC技术:System V共享内存、共享文件映射(mmap)、POSIX共享内存。 我们在这里只介绍POSIX共享内存。要使用POSIX共享内存对象需要完成下原创 2017-08-02 21:15:34 · 2734 阅读 · 0 评论 -
Linux进程间通信之POSIX信号量
当多个进程同时访问系统上的某个资源的时候,就需要考虑进程的同步问题,以确保任一时刻只有一个进程可以拥有对资源的独占式访问。POSIX信号量不仅可以用于进程之间的同步,也可以用于线程之间的同步。概述SUSv3规定了两种类型的POSIX信号量。命名信号量:这种信号量拥有一个名字。通过使用相同的名字调用sem_open(),不相关的进程能够访问同一个信号量。未命名信号量:这种信号量没有名字,相反,它位原创 2017-08-01 10:33:37 · 2062 阅读 · 0 评论 -
Linux进程间通信之POSIX消息队列
消息队列可认为是一个消息链表,它允许进程之间以消息的形式交换数据。有足够写权限的进程或线程可往队列中放置消息,有足够读权限的进程或线程可从队列中取走消息。每个消息都是一个记录,它由发送者赋予一个优先级。与管道不同,管道是字节流模型,没有消息边界。 本文介绍的是POSIX消息队列。POSIX消息队列与System V消息队列的相似之处在于数据的交换单位是整个消息,但它们之间仍然存在一些显著的差异。原创 2017-07-30 15:49:23 · 3315 阅读 · 0 评论 -
实现简单的printf函数
首先,要介绍一下printf实现的原理printf函数原型如下:int printf(const char* format,...);返回值是int,返回输出的字符个数。例如:int main(){ int n; n=printf("hello world,%d\n",100); printf("返回值:%d\n",n); return 0;原创 2016-07-29 15:54:46 · 20433 阅读 · 12 评论 -
消息队列有关的数据结构
数据结构:1.ipc_perm系统使用ipc_perm 结构来保存每个IPC 对象权限信息。在Linux 的库文件linux/ipc.h中,它是这样定义的:struct ipc_perm{key_t key;ushort uid; /* owner euid and egid */ushort gid;ushort cuid;原创 2016-09-26 19:57:39 · 4456 阅读 · 0 评论 -
我读过的最好的epoll讲解
首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。 不管是文件,还是套接字,还是管道,我们都可以把他们看作流。 之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要从socket读如数据,但是服务转载 2016-08-08 16:10:53 · 922 阅读 · 0 评论 -
linux线程同步:条件变量
互斥量防止多个线程同时访问同一共享变量。条件变量则是在此之外的拾遗补缺。条件变量允许一个线程就某个共享变量(或其他共享资源)的状态变化通知其他线程,并让其他线程等待(堵塞于)这一通知。条件变量总是结合互斥量使用。条件变量就共享变量的状态改变发出通知,而互斥量则提供对该共享变量访问的互斥。有关互斥量的总结请看:linux线程同步:互斥锁http://blog.csdn.net/fen原创 2016-08-01 22:04:06 · 1072 阅读 · 0 评论 -
linux线程同步:互斥锁
互斥锁和条件变量都是线程用来同步彼此行为的两个工具。互斥锁可以帮助线程同步对共享资源的使用,以防如下情况发生:线程某甲试图访问一共享变量时,线程某乙正在对其修改。条件变量则是在此之外的拾遗补缺,允许线程相互通知共享变量(或其他共享资源)的状态发生了变化。未避免线程更新共享变量时所出现的问题,必须使用互斥锁来确保同时仅有一个线程可以访问某项共享资源。互斥锁有两种状态:已锁定(lock原创 2016-08-01 18:14:01 · 4441 阅读 · 0 评论 -
linux 进程的虚拟内存
当我们创建一个进程时,我们知道进程有以下特点:1. 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构2. 一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_struct中记录中一条链表,记录中内存空间的分配情况,哪些地址有数据,哪些地址无数据,哪原创 2016-07-30 11:40:03 · 7775 阅读 · 4 评论 -
总结如何创建一个守护进程
守护进程是指在后台运行的,没有控制终端与之相连的进程。它独立于控制终端,经常周期性地执行某种任务。所以要想创建一个守护进程,就要实现满足这两点。在此之前,要先介绍一下进程组和会话组。一个进程组可以包含多个进程进程组中的这些进程之间不是孤立的,他们彼此之间或者存在者父子、兄弟关系,或者在功能有相近的联系。那linux为什么要有进程组呢?其实提供进程组就是方原创 2016-07-27 20:58:50 · 1901 阅读 · 0 评论 -
Linux进程间通信之管道
IPC是进程间通信(interprocess communication)的简称。我们在这里对有关管道的知识进行总结。 我们将介绍三种管道:管道(pipe)。管道是第一个广泛使用的IPC形式,既可在程序中使用,也可以从shell中使用。管道只能在具有共同祖先(指父子进程关系)的进程间使用。FIFO。FIFO是管道概念的一个变体,FIFO(First In First Out,先进先出),也叫有原创 2017-07-29 11:04:13 · 1012 阅读 · 0 评论