摘要: Posix消息队列的属性使用如下结构存放:struct mq_attr { long mq_flags; /*阻塞标志位,0为非阻塞(O_NONBLOCK)*/ long mq_maxmsg; /*队列所允许的最大消息条数*/ long mq_msgsize; /*每条消息的最大字节数*/ long mq_curmsgs; /*队列当前的消息条数*/ }; 队列可以在创建时由mq_open()函数的第四个参数指定mq_maxmsg,mq_msgsize。 如创建时没有指定则使用默认值,一旦创建,则不可再改变。队列可以在创建后由mq_setattr()函数设置... 阅读全文
posted @ 2012-04-16 09:29 PoleStar 阅读(1288) 评论(0) 推荐(0) 编辑
摘要: 创建消息队列的程序: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <mqueue.h> //头文件 4 #include <sys/types.h> 5 #include <sys/stat.h> 6 #include <unistd.h> 7 #include <fcntl.h> 8 #include <errno.h> 9 10 #define MQ_NAME ("/tmp") 11 #define MQ_FLA 阅读全文
posted @ 2012-04-16 09:24 PoleStar 阅读(954) 评论(0) 推荐(0) 编辑
摘要: 消息队列可以认为是一个链表。进程(线程)可以往里写消息,也可以从里面取出消息。一个进程可以往某个消息队列里写消息,然后终止,另一个进程随时可以从消息队列里取走这些消息。这里也说明了,消息队列具有随内核的持续性,也就是系统不重启,消息队列永久存在。创建(并打开)、关闭、删除一个消息队列 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <mqueue.h> //头文件 4 #include <sys/types.h> 5 #include <sys/stat.h> 6 #incl 阅读全文
posted @ 2012-04-16 09:13 PoleStar 阅读(1229) 评论(0) 推荐(0) 编辑
摘要: 在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。 分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。 解决:1)在windows下转换:利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。2)也可在Linux中转换: 首先要确保文件有可执行权限 #sh& 阅读全文
posted @ 2012-04-11 17:15 PoleStar 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 互斥锁机制(Mutual exclusion,缩写为Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制。该目的通过将代码切片成一个一个的临界区域(critical section)达成。临界区域指的是一块对公共资源进行存取的代码,并非一种机制或是算法初始化:在Linux下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化:对于静态分配的互斥量, 可以把它设置为PTHREAD_MUTEX_INITIALIZER, 或者调用pthread_mutex_init.对于动态分配的互斥量, 在申请内存(malloc)之后 阅读全文
posted @ 2012-04-07 18:08 PoleStar 阅读(844) 评论(0) 推荐(1) 编辑
摘要: 共享文件:UNIX系统支持在不同进程间共享打开的文件。在介绍dup()函数前,先介绍共享文件。1.每个进程在进程表中都有一个记录项,每个记录项中有一张打开文件描述符表,可将视为一个矢量,每个描述符占用一项。与每个文件描述符相关联的是: (a) 文件描述符标志。 (b) 指向一个文件表项的指针。2.内核为所有打开文件维持一张文件表。每个文件表项包含: (a) 文件状态标志(读、写、增写、同步、非阻塞等)。 (b) 当前文件位移量。 (c) 指向该文件v节点表项的指针。3.每个打开文件(或设备)都有一个 v节点结构。v节点包含了文件类型和对此文件进行各种操作的函数的指针信息。对... 阅读全文
posted @ 2012-03-29 15:31 PoleStar 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 为了简化数据库大表的管理.ORACLE8以后推出了分区选项.分区可将表分离在不同的表空间上,用分而治之的方法来支撑元限膨胀的大表.将大表分割成较小的分区可以改善表的维护、备份、恢复、事务及查询性能。分区的优点:1、 增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍可以使用;... 阅读全文
posted @ 2012-03-20 10:39 PoleStar 阅读(3287) 评论(0) 推荐(0) 编辑
摘要: Oracle在逻辑上以表空间存储数据,而实际上是以数据文件存储数据。表空间和数据文件 表空间:某一时刻只属于一个数据库;由一个或多个数据文件组成;可近一步划分逻辑存储单元 数据文件:只能属于一个表空间和一个数据库表空间类型 system表空间: – 随数据库创建 – 包含数据字典 – 包含 SYSTEM 还原段 非SYSTEM表空间: – 用于分开存储段 – 易于空间管理 – 控制分配给用户的空间量创建表空间 创建表空间的命令:create tablespace CREATE TABLESPACE tablespace [DATAFILE clause] [MINIM... 阅读全文
posted @ 2012-03-20 10:28 PoleStar 阅读(840) 评论(0) 推荐(0) 编辑
摘要: 启动我们的客户/服务器程序对,然后kill掉服务器子进程。看看客户端发生了什么?服务器端查看结果:zhaoxj$ netstat -antdp(并非所有进程都能被检测到,所有非本用户的进程信息将不会显示,如果想看到所有信息,则必须切换到 root 用户)激活Internet连接 (服务器和已建立连接的)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN - tc... 阅读全文
posted @ 2012-03-19 10:14 PoleStar 阅读(531) 评论(0) 推荐(0) 编辑
摘要: 我们不愿意留存僵尸进程,因为它们占用内核空间,最终导致我们耗尽进城资源。为防止子进程变为僵尸进程,fork生成的子进程都必须被wait。#include "unp.h"intmain(int argc, char **argv){ int listenfd, connfd; pid_t childpid; socklen_t clilen; struct sockaddr_in cliaddr, servaddr; void si... 阅读全文
posted @ 2012-03-19 10:10 PoleStar 阅读(342) 评论(0) 推荐(0) 编辑