上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 24 下一页

2018年2月25日

System V 共享内存区

摘要: 1、概述 系统调用mmap通过映射一个普通文件实现共享内存。System V 则是通过映射特殊文件系统shm中的文件实现进程间的共享内存通信。也就是说,每个共享内存区域对应特殊文件系统shm中的一个文件。执行过程是先调用shmget,再调用shmat。对于每个共享的内存区,内核维护如下的信息结构,定 阅读全文

posted @ 2018-02-25 09:35 AlanTu 阅读(309) 评论(0) 推荐(0) 编辑

共享内存

摘要: 共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。 采用共享内存通 阅读全文

posted @ 2018-02-25 09:32 AlanTu 阅读(424) 评论(0) 推荐(0) 编辑

Posix共享内存区

摘要: 1、概述 Posix提供了两种在无亲缘关系进程间共享内存区的方法: (1)内存映射文件:先有open函数打开,然后调用mmap函数把得到的描述符映射到当前进程地址空间中的一个文件(上一篇笔记所用到的就是)。 (2)共享内存区对象:先有shm_open打开一个Posix IPC名字(也可以是文件系统中 阅读全文

posted @ 2018-02-25 09:32 AlanTu 阅读(332) 评论(0) 推荐(0) 编辑

Posix信号量

摘要: 1、概述 信号量(semaphore)是一种用于提供不同进程间或一个给定进程的不同线程间同步手段的原语。信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中, 阅读全文

posted @ 2018-02-25 09:30 AlanTu 阅读(318) 评论(0) 推荐(0) 编辑

System V 信号量

摘要: System V 信号量在内核中维护,其中包括二值信号量 、计数信号量、计数信号量集。二值信号量 : 其值只有0、1 两种选择,0表示资源被锁,1表示资源可用;计数信号量:其值在0 和某个限定值之间,不限定资源数只在0 1 之间;计数信号量集 :多个信号量的集合组成信号量集内核维护的信号量集结构信息 阅读全文

posted @ 2018-02-25 09:30 AlanTu 阅读(322) 评论(0) 推荐(0) 编辑

记录锁

摘要: 1、概述 记录锁是读写锁的一种扩展类型,可用于亲缘关系或无亲缘关系的进程之间共享某个文件的读与写。被锁住的文件通过文件描述符进行访问,执行上锁的操作函数是fcntl,这种类型的锁通常在内核中维护。 记录锁的功能是:一个进程正在读或修改文件的某个部分时,可以阻止其他进程修改同一文件区,即其锁定的是文件 阅读全文

posted @ 2018-02-25 09:26 AlanTu 阅读(678) 评论(0) 推荐(0) 编辑

2018年2月24日

读写锁

摘要: 1、概述 读写锁与互斥量类似,不过读写锁允许更高的并行性。互斥量要么是锁住状态,要么是不加锁状态,而且一次只有一个线程对其加锁。读写锁可以有三种状态:读模式下加锁状态,写模式下加锁状态,不加锁状态。一次只有一个线程可以占有写模式的读写锁,但是多个线程可用同时占有读模式的读写锁。读写锁也叫做共享-独占 阅读全文

posted @ 2018-02-24 16:04 AlanTu 阅读(235) 评论(0) 推荐(0) 编辑

System V 消息队列 - 复用消息

摘要: 消息队列中的消息结构可以由我们自由定义,具备较强的灵活性。通过消息结构可以共享一个队列,进行消息复用。通常定义一个类似如下的消息结构: #define MSGMAXDAT 1024 struct mymsg { long msg_len; //消息长度 long msg_type; //消息类型 l 阅读全文

posted @ 2018-02-24 16:03 AlanTu 阅读(201) 评论(0) 推荐(0) 编辑

System V 消息队列

摘要: 1、概述 消息队列可以认为是一个消息链表,System V 消息队列使用消息队列标识符标识。具有足够特权的任何进程都可以往一个队列放置一个消息,具有足够特权的任何进程都可以从一个给定队列读出一个消息。在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。System V 消 阅读全文

posted @ 2018-02-24 16:01 AlanTu 阅读(406) 评论(0) 推荐(0) 编辑

System V IPC

摘要: 1、概述 System V IPC共有三种类型:System V消息队列、System V 信号量、System V 共享内存区。 System V IPC操作函数如下: 2、key_t键和ftok函数 三种类型的IPC使用key_t值作为他们的名字,头文件<sys/types.h>把key_t定义 阅读全文

posted @ 2018-02-24 15:58 AlanTu 阅读(426) 评论(0) 推荐(0) 编辑

Unix环境高级编程(二十)伪终端

摘要: 1、综述 伪终端对于一个应用程序而言,看上去像一个终端,但事实上伪终端并不是一个真正的终端。从内核角度看,伪终端看起来像一个双向管道,而事实上Solaris的伪终端就是用STREAMS构建的。伪终端总是成对地使用的,就好像是个管道的两端。一端的设备称为"主设备"(master),另一端的设备称为"从 阅读全文

posted @ 2018-02-24 15:57 AlanTu 阅读(1467) 评论(0) 推荐(0) 编辑

Unix环境高级编程(二十一)数据库函数库

摘要: 本章的内容是开发一个简单的、多用户数据库的C函数库。调用此函数库提供的C语言函数,其他程序可以读取和存储数据库中的记录。绝大部分商用数据库函数库提供多进程同时更新数据库所需要的并发控制,采用建议记录锁、B+树、动态散列实现数据库。 1、函数库 开发类似ndbm函数库,增加了并发控制机制,从而允许多进 阅读全文

posted @ 2018-02-24 15:57 AlanTu 阅读(430) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十九)终端I/O

摘要: 终端I/O应用很广泛,用于终端、计算机之间的直接连线、调制解调器以及打印机等等。终端I/O有两种不同的工作模式: (1)规范模式输入处理:终端输入以行为单位进行处理,对于每个读要求,终端驱动程序最多返回一行。(默认模式) (2)非规范模式输入处理:输入字符并不组成行。 终端设备是由一般位于内核的终端 阅读全文

posted @ 2018-02-24 15:55 AlanTu 阅读(676) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十八)高级进程间通信

摘要: 本章主要介绍了基于STREAM的管道和UNIX域套接字,这些IPC可以在进程间传送打开文件描述符。服务进程可以使用它们的打开文件描述符与指定的名字相关联,客户进程可以使用这些名字与服务器进程通信。 1、基于STREAMS的管道 STREAMS pipe是一个双向(全双工)管道,单个STREAMS管道 阅读全文

posted @ 2018-02-24 15:54 AlanTu 阅读(1026) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十七)网络IPC套接字

摘要: 通过网络套接字可以使得不同计算机上运行的进程相互通信。 1、创建套接字 #include <sys/socket.h> Int socket( int domain, int type, int protocol); 注意:AF_LOCAL域是AF_UNIX的别名,AF_UNSPEC域可以代表任何域 阅读全文

posted @ 2018-02-24 15:49 AlanTu 阅读(303) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十六)进程间通信

摘要: 进程间通信(IPC)是指能在两个进程间进行数据交换的机制。现代OS都对进程有保护机制,因此两个进程不能直接交换数据,必须通过一定机制来完成。 IPC的机制的作用: (1)一个软件也能更容易跟第三方软件或内核进行配合的集成,或移植.如管道,在shell 下执行 ps –aux | grep bash。 阅读全文

posted @ 2018-02-24 15:47 AlanTu 阅读(1153) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十五)高级I/O

摘要: 1、非阻塞I/O 对低速设备的I/O操作可能会使进程永久阻塞,这类系统调用主要有如下情况:(1)如果数据并不存在,则读文件可能会使调用者永远阻塞(例如读管道、终端设备和网络设备)。(2)如果数据不能立即被接受,则写这些同样的文件也会使调用者永远阻塞;(3)在某些条件发生之前,打开文件会被阻塞(例如以 阅读全文

posted @ 2018-02-24 15:46 AlanTu 阅读(499) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十四)守护进程实现时间服务器

摘要: 守护进程是在后台运行不受终端控制的进程(如输入、输出等),一般的网络服务都是以守护进程的方式运行。守护进程脱离终端的主要原因有两点:(1)用来启动守护进程的终端在启动守护进程之后,需要执行其他任务。(2)(如其他用户登录该终端后,以前的守护进程的错误信息不应出现)由终端上的一些键所产生的信号(如中断 阅读全文

posted @ 2018-02-24 15:45 AlanTu 阅读(297) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十三)守护进程

摘要: 守护进程也称为精灵进程是一种生存期较长的一种进程。它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。他们常常在系统引导装入时启动,在系统关闭时终止。unix系统有很多守护进程,大多数服务器都是用守护进程实现的,例如inetd守护进程。 1、守护进程的特征 用ps命令察看一些常用的系 阅读全文

posted @ 2018-02-24 15:43 AlanTu 阅读(488) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十二)线程控制

摘要: 本章介绍了一个进程中多个线程之间如何保持数据的似有性及进程的系统调用如何与线程进行交互。 1、线程限制: Single Unix定义了一线线程操作的限制,和其他的限制一样,可以通过sysconf来查询。和其它的限制使用目的一样,为了应用程序的在不同操作 系统的可移植性。 一些限制: PTHREAD_ 阅读全文

posted @ 2018-02-24 15:42 AlanTu 阅读(769) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十一)线程

摘要: 一个进程在同一时刻只能做一件事情,线程可以把程序设计成在同一时刻能够做多件事情,每个线程处理各自独立的任务。线程包括了表示进程内执行环境必需的信息,包括进程中标识线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量以及线程似有数据。进程的所有信息对该进程的所有线程都是共享的 阅读全文

posted @ 2018-02-24 15:39 AlanTu 阅读(426) 评论(0) 推荐(0) 编辑

Unix环境高级编程(十)信号续

摘要: 1、signal函数 Unix系统的信号机制最简单的接口是signal函数,函数原型如下: #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t hand 阅读全文

posted @ 2018-02-24 15:36 AlanTu 阅读(318) 评论(0) 推荐(0) 编辑

Unix环境高级编程(九)信号

摘要: 信号时软中断,很多比较重要的应用程序都需要处理信号,信号提供了一种处理异步事件的方法。每个信号都一个名字,以SIG开头,在<signal.h>头文件中定义信号类型,都是正整数(信号编号)。 产生信号的条件: (1)当用户按某些终端键时,引发终端产生的信号。 (2)硬件异常产生信号。 (3)进程调用k 阅读全文

posted @ 2018-02-24 15:30 AlanTu 阅读(336) 评论(0) 推荐(0) 编辑

Unix环境高级编程(八)进程关系

摘要: 本章看后给人似懂非懂的感觉,主要是不知道实际当中如何去使用。通过前面几章的学习,每个进程都有一个父进程,当子进程终止时,父进程得到通知并取得子进程的退出状态。先将本章基本的知识点总结如下,日后再看时候好好总结一下。 1、终端登录 介绍了有终端登录Unix系统的过程。通过init进程读文件/etc/t 阅读全文

posted @ 2018-02-24 15:27 AlanTu 阅读(258) 评论(0) 推荐(0) 编辑

Unix环境高级编程(七)fork函数总结

摘要: 在Unix/Linux中用fork函数创建一个新的进程。进程是由当前已有进程调用fork函数创建,分叉的进程叫子进程,创建者叫父进程。该函数的特点是调用一次,返回两次,一次是在父进程,一次是在子进程。两次返回的区别是子进程的返回值为0,父进程的返回值是新子进程的ID。子进程与父进程继续并发运行。如果 阅读全文

posted @ 2018-02-24 15:26 AlanTu 阅读(791) 评论(0) 推荐(0) 编辑

Unix环境高级编程(六)进程控制

摘要: 本章介绍Unix的进程控制,包括进程创建,执行程序和进程终止,进程的属性,exec函数系列,system函数,进程会计机制。 1、进程标识符 每一个进程都有一个非负整数标识的唯一进程ID。ID为0表示调度进程,即交换进程,是内核的一部分,也称为系统进程,不执行任何磁盘操作。ID为1的进程为init进 阅读全文

posted @ 2018-02-24 15:25 AlanTu 阅读(386) 评论(0) 推荐(0) 编辑

Unix环境高级编程(五)进程环境

摘要: 本章主要介绍了Unix进程环境,包含main函数是如何被调用的,命令行参数如何传递,存储方式布局,分配存储空间,环境变量,进程终止方法,全局跳转longjmp和setjmp函数及进程的资源限制。 main函数的原型为int main(int argc,char *argv[]);其中argc是命令行 阅读全文

posted @ 2018-02-24 15:23 AlanTu 阅读(342) 评论(0) 推荐(0) 编辑

Unix环境高级编程(四)数据系统文件和信息

摘要: 本章主要介绍了Unix系统的正常运行要使用的与系统有关的数据文件和信息。如:口令文件,阴影文件、组文件、附加组、系统标识、时间和日期历程。 口令文件,即Unix系统用户数据库,存储在/etc/passwd中,是一个ASCII文件,包含的字段信息在<pwd.h>定义的passwd数据结构中。 stru 阅读全文

posted @ 2018-02-24 15:22 AlanTu 阅读(582) 评论(0) 推荐(0) 编辑

Unix环境高级编程(三)标准I/O库

摘要: 标准I/O库是ISO C的标准,在很多操作系统上面都实现。Unix文件I/O函数都是针对文件描述符的,当打开一个文件的时候,返回该文件描述符用于后续的I/O操作。而对于标准I/O库,操作则是围绕流进行,当用标准I/O库打开或者创建一个文件时,使得一个流与文件相关联。标准I/O库使用了缓冲技术,使用缓 阅读全文

posted @ 2018-02-24 15:20 AlanTu 阅读(238) 评论(0) 推荐(0) 编辑

Unix环境高级编程(二)文件和目录

摘要: 本章主要介绍的是文件结构及目录。重点是通过stat函数获取文件的结构信息,然后是文件目录及其遍历。学完本章后,编写了一个输出给的目录下的文件信息的程序。 首先是包含在<sys/stat.h>文件下的stat、fstat、lstat三个函数,三个函数的原型如下: int stat(const char 阅读全文

posted @ 2018-02-24 15:19 AlanTu 阅读(490) 评论(0) 推荐(0) 编辑

Unix环境高级编程(一)文件I/O

摘要: Unix系统中大多数文件I/O只需用到五个函数:open、read、write、lseek、close。本章说介绍的I/O是不带缓冲的,即:每个read和write都调用内核中的一个系统调用。不是ISO C的组成部分。对于内核而言,所有打开的文件都通过文件描述符引用。 在<unistd.h>中定义三 阅读全文

posted @ 2018-02-24 15:18 AlanTu 阅读(291) 评论(0) 推荐(0) 编辑

Linux下C结构体初始化

摘要: 1、前言 今天在公司看一同事写的代码,代码中用到了struct,初始化一个struct用的是乱序格式,如下代码所示: typedef struct _data_t { int a; int b; }data_t; data_t data = { .a = 10, .b = 20, }; 通常初始化一 阅读全文

posted @ 2018-02-24 15:14 AlanTu 阅读(4878) 评论(0) 推荐(0) 编辑

__attribute__中constructor和destructor

摘要: 1、前言 最近看到一份代码,看到一个函数前面用__attribute__((destructor))修饰,当时感觉有点怪怪的,搜了整个程序,也没发现哪个地方调用这个函数。于是从字面意思猜想,该函数会在程序结束后自动调用,与C++中的析构函数类似。第一次接触GNU下的attribute,总结一下。 2 阅读全文

posted @ 2018-02-24 15:12 AlanTu 阅读(11711) 评论(0) 推荐(0) 编辑

C语言指针转换为intptr_t类型

摘要: 1、前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量。由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针。感觉很奇怪,为何要将一个指针这样做呢?如是果断上网查查,发现我的感觉是错误的,所以,任何事情不能凭感觉,要弄清楚来龙去脉。先总结 阅读全文

posted @ 2018-02-24 15:11 AlanTu 阅读(7873) 评论(0) 推荐(0) 编辑

C语言sprintf与sscanf函数

摘要: 1、前言 我们经常涉及到数字与字符串之间的转换,例如将32位无符号整数的ip地址转换为点分十进制的ip地址字符串,或者反过来。从给定的字符串中提取相关内容,例如给定一个地址:http://www.bokeyuan.cn:2345,我们要从地址中提出协议,主机地址和端口号。之前对字符串和数字之间的关系 阅读全文

posted @ 2018-02-24 15:10 AlanTu 阅读(1279) 评论(0) 推荐(0) 编辑

C语言宏高级用法

摘要: 1、前言 今天看代码时候,遇到一些宏,之前没有见过,感觉挺新鲜。如是上网google一下,顺便总结一下,方便以后学习和运用。C语言程序中广泛的使用宏定义,采用关键字define进行定义,宏只是一种简单的字符串替换,根据是否带参数分为无参和带参。宏的简单应用很容易掌握,今天主要总结一下宏的特殊符号及惯 阅读全文

posted @ 2018-02-24 15:10 AlanTu 阅读(27126) 评论(0) 推荐(1) 编辑

C语言栈与调用惯例

摘要: 1、前言 最近在再看《程序员的自我修养》这本书,对程序的链接、装载与库有了更深入的认识。关于这本书的评价可以去豆瓣看看http://book.douban.com/subject/3652388/,强烈推荐给每一位程序员哈。今天看了第十章内存,主要讲的是栈和堆的管理。主要问题是:函数在栈中是如何布局 阅读全文

posted @ 2018-02-24 15:09 AlanTu 阅读(559) 评论(0) 推荐(0) 编辑

C语言二维数组作为函数的参数

摘要: 前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数。在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示。我写程序的错误如下程序所示: 1 #include <cstdio> 2 void print(int *a[3]) 3 { 4 printf("%d\n" 阅读全文

posted @ 2018-02-24 15:08 AlanTu 阅读(70101) 评论(1) 推荐(7) 编辑

递归与尾递归总结

摘要: 前言:今天上网看帖子的时候,看到关于尾递归的应用(http://bbs.csdn.net/topics/390215312),大脑中感觉这个词好像在哪里见过,但是又想不起来具体是怎么回事。如是乎,在网上搜了一下,顿时豁然开朗,知道尾递归是怎么回事了。下面就递归与尾递归进行总结,以方便日后在工作中使用 阅读全文

posted @ 2018-02-24 15:07 AlanTu 阅读(8896) 评论(0) 推荐(0) 编辑

linux系统调用sysconf

摘要: 1、前言 当前计算机都是多核的,linux2.6提供了进程绑定cpu功能,将进程指定到某个core上执行,方便管理进程。linux提供了sysconf系统调用可以获取系统的cpu个数和可用的cpu个数。 2、sysconf 函数 man一下sysconf,解释这个函数用来获取系统执行的配置信息。例如 阅读全文

posted @ 2018-02-24 15:03 AlanTu 阅读(563) 评论(0) 推荐(0) 编辑

上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 24 下一页

导航