摘要: 一:简介前面已经学过:pipe,FIFO,msg queue, 今天要学的是“共享内存区”1.共享内存区是进程通信中最快的方式,而且传递的信息量是很大的!2.是通过内存区间映射到进程空间来实现的!因此这种进程间的通信不再涉及到内核!(即进程不是通过执行任何的进入内核的系统调用来传递数据的。这样内核就必须建立允许各个进程之间的共享内存区的映射关系,然后一直管理该内存区!同时也要保证所谓的同步,有序,而且没有死锁!)3.简单的实现过程:<1>.server获得访问共享内存区的权限<2>.server从输入文件中读取数据到共享内存区(需要一次copy内容 )<3> 阅读全文
posted @ 2012-07-27 15:45 戊辰岁终 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 1.并不是IPC机制,它是一种提供不同进程之间或者是同一个进程的不同的线程之间的同步!2.类型:<1>.二元信号:值为0或者1,1说明有一个可以资源,0说明此时正好再用,其他进程等待相当于是 P 和 V 问题...<2>.计数信号量:值在0和一个大于0的值之间,一般是可用的资源数量<3>.计数信号量集:由一个或多个信号量组成的集合,每一个都是计数信号量。一般在25个以上。>>>:其使用就是我们知道的P/V操作一样,需要P是否有资源,如果P到,那么就是VALUE--,然后使用OK后还回来,也就是VALUE++,if申请不到资源就要阻塞自己!3 阅读全文
posted @ 2012-07-27 15:44 戊辰岁终 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 一.简介目前主要有两种类型的消息队列:POSIX消息队列以及系统V消息队列,系统V消息队列目前被大量使用。考虑到程序的可移植性,新开发的应用程序应尽量使用POSIX消息队列。消息队列是内核创建的一个数据结构,是有标识的!对于有读写权限的进程来说哦,所以可以通过对共享的消息进程的读写实现不同进程之间的通信!内核通过 key_t 类型(通常为32为整形)来标识一个 system v ipc 对象。 ipc_perm Structure 1 struct ipc_perm 2 { 3 key_t key; 4 ushort uid; /* owner euid and egid *... 阅读全文
posted @ 2012-07-27 15:43 戊辰岁终 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 一、一些简单理解:我们知道管道是没有标志的,所以只能是在同一个进程组中进行通信,不同的祖先产生的进程之间是不可以的!!所以此处引入FIFO机制同样也只能是单流的!不同的是FIFO是有标志的!每个FIFO都有一个路径名与之相关!FIFO也称为 “有名管道”#include <sys/types.h>#include <sys/stat.h>int mkfifo( const char* pathname, mode_t mode );mode 与 open函数中的一样,默认为:O_CREAT | O_EXCLif FIFO 已经存在,那么返回EEXIST错误!if不存在那 阅读全文
posted @ 2012-07-27 15:41 戊辰岁终 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 一.#include <unistd.h>int pipe(int fd[2]);//!>注意参数是fd[0]是读的文件描述符,fd[1]是用来写的文件描述符一般用于 “父子进程” 之间的通信!因为pipe是没有标志的,所以只能在一个进程集中运作!“单向pipe”:父进程创建好 pipe 后,同时通过 fork() 创建一个子进程,然后父进程就可以关闭自己这端的“读进程”,因为 父进程就是将数据写入子进程的,所以无须 “读”,然后子进程就关闭自己的“写”,这样就形成一个 “单向” 的 pipe。“双向pie”:( 可以用于CS ) 创建两个pipe就可以了,其实也就是相当于加 阅读全文
posted @ 2012-07-27 15:40 戊辰岁终 阅读(198) 评论(0) 推荐(0) 编辑
摘要: //!> server端代码//!>server.c 1 #include <stdio.h> 2 #include <unistd.h> 3 #include <stdlib.h> 4 #include <string.h> 5 #include <errno.h> 6 #include <netinet/in.h> 7 #include <sys/select.h> 8 #include <sys/types.h> 9 #include <sys/socket.h> 10 阅读全文
posted @ 2012-07-27 15:28 戊辰岁终 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 注意:可以开启一个server和多个client,同时可以对server进行发送data处理,请注意client的参数,格式是:./clientIPchar_dataIP:就是server所在的IP,char_data就是发送的数据server.c 1 #include<sys/types.h> 2 #include<sys/socket.h> 3 #include<strings.h> 4 #include<arpa/inet.h> 5 #include<unistd.h> 6 #include<stdlib.h> 7 阅读全文
posted @ 2012-07-27 15:21 戊辰岁终 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 当然此处仅仅是对于单用户请求的处理,对于多用户的请求后面再说!对于server处理:server要做的就是创建自己的套接字,然后设置一些参数:例如协议类型,IP之类。然后就是bind参数,再次就是监听( listen),最后就是accept进入睡眠等待状态,if有cilent的请求就会有反应!对于chient的处理:建立自己的套接字,然后就是连接到server,发送自己的数据,然后等待server的回送!server.cpp 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<errno.h> 4 #inc 阅读全文
posted @ 2012-07-27 15:15 戊辰岁终 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 跟我一起写 Makefile陈皓 (CSDN)概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别 阅读全文
posted @ 2012-07-27 15:11 戊辰岁终 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 在Linux下进行C/C++开发经常要创建和使用库,包括静态库和动态库(共享库)。静态库文件的扩展名是.a,其命名规则是libxxx.a,动态库的扩展名是.so,其命名规则是libxxx.so。静态库和动态库在链接调用的是都是-lxxx。下面讲一下静态库和动态库具体创建和使用(1)静态库假如我们要将源文件test.c编译成静态库,首先,源文件编译成目标文件gcc-c test.c编译成功之后会生成目标文件test.o,然后由目标文件创建成库arcrslibtest.atest.o创建好库之后,怎么使用呢,比如我们要在编译main.c是使用test库,gcc -o main main.c -L. 阅读全文
posted @ 2012-07-27 15:07 戊辰岁终 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 大小端序是针对于不同的硬件而言的,具体的就是不同的CPU 是不同的处理的。对于 Intel x86 系列就是小端序。简单点说,就是字节的存储顺序,如果数据都是单字节的,那怎么存储无所谓了,但是对于多字节数据,比如int,double等,就要考虑存储的顺序了。注意字节序是硬件层面的东西,对于软件来说通常是透明的。再说白一点,字节序通常只和你使用的处理器架构有关,而和编程语言无关。Big(大端序):数据的高位字节存放在地址的低端 低位字节存放在地址高端Little(小端序):数据的高位字节存放在地址的高端 低位字节存放在地址低端字节的高位与低位:举个例子,int a =0x12345678 ; 那 阅读全文
posted @ 2012-07-27 15:05 戊辰岁终 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 1 #include<assert.h> //设定插入点 2 #include <ctype.h> //字符处理 3 #include <errno.h> //定义错误码 4 #include <float.h> //浮点数处理 5 #include <fstream.h> //文件输入/输出 6 #include <iomanip.h> //参数化输入/输出 7 #include<iostream.h> //数据流输入/输出 8 #include<limits.h> //定义各种数据类型最值常量 阅读全文
posted @ 2012-07-27 14:48 戊辰岁终 阅读(116) 评论(0) 推荐(0) 编辑
摘要: pkill 和killall 应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill 来杀掉。 应用方法: #pkill 正在运行的程序名 举例: [root@localhost beinan]# pgrep -l gaim 2979 gaim [root@localhost beinan]# pkill gaim 也就是说: kill 对应的是 PID pkill 对应的是COMMAND 例如在Ubuntu中强制结束一个已成僵尸的名称为:firefox,PID为:1603的进程,可以如下操作: 方法一: (1)ctrl+alt+t,调出终端,输入... 阅读全文
posted @ 2012-07-27 10:41 戊辰岁终 阅读(5291) 评论(0) 推荐(0) 编辑
摘要: 使用linux操作系统,难免遇到一些软件"卡壳"的问题,这时就需要使用linux下强大的kill命令来结束相关进程。这在linux系统下是极其容易的事情,你只需要kill xxx即可,这里xxx代表与此软件运行相关的进程PID号。首先,我们需要使用linux下另外一个ps命令查找与进程相关的PID号:ps aux | grep program_filter_wordps a 显示现行终端机下的所有程序,包括其他用户的程序。ps -A 显示所有程序。ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。ps -e 此参数的效果和指定" 阅读全文
posted @ 2012-07-27 10:35 戊辰岁终 阅读(1478) 评论(0) 推荐(0) 编辑