- 博客(93)
- 资源 (28)
- 收藏
- 关注
原创 5高并发服务器:socket IPC
socket IPCsocket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算
2014-09-30 22:53:03 1617
原创 4高并发服务器:UDP局域网服务器(组播)
1 UDP局域网服务器A读出每一个客户端发送过来的数据包,然后fork出子进程,由子进程去处理客户端请求。B客户端与服务器段交换多个数据报,服务器为每一个客户端连接创建新的socket,在其上bind一个临时端口,然后用该socket处理对应客户端上的所有应答,这个办法要求在客户查看服务器第一个应答中的源端口号。然后后面利用此端口号和服务器进行交互。2函
2014-09-30 22:42:41 4782
原创 3高并发服务器:多路IO之epoll
1 epollepoll是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并、发连接中只有少量活跃的情况下的系统CPU利用率,因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Read
2014-09-30 22:41:46 1997
原创 2高并发服务器:多路IO之poll
1 pollA依赖的头文件#include B函数声明int poll(struct pollfd *fds, nfds_t nfds,int timeout); struct pollfd {int fd; /*文件描述符*/short events; /*监控的事件*/short revents
2014-09-30 22:36:58 1747
原创 1高并发服务器:多路IO之select
1 selectA:select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯改变进程打开的文件描述符个数并不能改变select监听文件个数B:解决1024以下客户端时使用select是很合适的,但如果链接客户端过多,select采用的是轮询模型,会大大降低服务器响应效率,不应在select上投入更多精力2依赖的头文件
2014-09-30 22:35:30 3158
原创 3socket编程:UDP编程
1 C/S模型—UDPUDP处理模型说明:由于UDP不需要维护连接,程序逻辑简单了很多,但是UDP协议是不可靠的,实际上有很多保证通讯可靠性的机制需要在应用层实现。编译运行server,在两个终端里各开一个client与server交互,看看server是否具有并发服务的能力。用Ctrl+C关闭server,然后再运行server,看此时
2014-09-30 22:22:42 1528
原创 2高并发服务器:多线程服务器
1多进程并发服务器在使用线程模型开发服务器时需要考虑以下问题:A调整进程最大文件描述符上限B线程如有共享数据,考虑线程同步C服务于客户端线程退出时,退出处理D2.案例说明server.c,代码如下:/* server.c */#include #include
2014-09-27 23:58:58 2159
原创 1高并发服务器:多进程服务器
1多进程并发服务器使用多进程并发服务器时要考虑以下几点:A.父最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符)B.系统内创建进程个数(和内存大小相关)C.进程创建过多是否降低整体服务性能(进程调度)2.案例说明server.c,代码如下:#include #inclu
2014-09-27 23:57:18 1824
原创 1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client
1 Socket编程socket这个词可以表示很多概念:在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket。在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接。socket本身有“插座”的意思
2014-09-27 23:55:43 2234
原创 1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client
1 Socket编程socket这个词可以表示很多概念:在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket。在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接。socket本身有“插座”的意思
2014-09-26 22:39:01 2383
转载 ubuntu下安装mysql
现在的软件越来越好安装,尤其是在ubuntu下安装软件,更是没有技巧,只需要在联网的情况下使用apt-get inatll 即可。在决定安装mysql之前,要先确定系统是否已经安装mysql。如下图: 由此可以看出系统中并没有安装mysql.下面执行sudo apt-get install mysql-server my-client进行安装。下图: 输入
2014-09-26 01:09:25 990
原创 5进程间锁:进程间pthread_mutex,文件锁
1进程间pthread_mutexA依赖的头文件#includeB函数声明intpthread_mutexattr_destroy(pthread_mutexattr_t *attr);intpthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared);int
2014-09-25 17:02:04 4990
原创 4线程同步:信号量
1信号量信号量可以有n把锁。依赖的头文件#include 函数声明sem_t表示信号量 int sem_init(sem_t *sem, int pshared,unsigned int value);名称:sem_init功能:
2014-09-25 16:57:47 1402
原创 3线程同步:条件变量
1条件变量条件变量给多个线程提供了一个汇合的场所。依赖的头文件#include函数声明定义分配条件变量pthread_cond_t cond =PTHREAD_COND_INITIALIZER; int pthread_cond_init(pthread_cond_t*restrict cond, const pthread_co
2014-09-25 16:55:12 1402
原创 2线程同步:读写锁
1读写锁读共享,写独占2读写锁说明读写锁与互斥量类似,不过读写锁的并行性更高。读写锁可以有三种状态:A读模式加锁B写模式加锁C不加锁3在写加锁状态时,在解锁之前,所有试图对这个锁加锁的线程都会被阻塞。在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权限。但是如果线程希望以写模式加锁,它必须阻
2014-09-25 16:52:07 1212
原创 1线程同步:互斥量,死锁
1线程为什么要同步A:共享资源,多个线程都可对共享资源操作。B:线程操作共享资源的先后顺序不确定。C:处理器对存储器的操作一般不是原子操作。2互斥量mutex操作原语pthread_mutex_tpthread_mutex_initpthread_mutex_destroypthread_mutex_lock
2014-09-25 16:44:58 2645
原创 3线程的终止方式,线程属性,NPTL
1线程终止方式如果需要只终止某个线程而不终止整个线程,可以有三种方法:A:从主线程函数return.这种方法对主线程不适合,从main函数return相当于调用exit.B:一个线程可以调用pthread_cancel终止同一进程中的另一个线程。C:线程可以调用pthread_exit终止自己 同一个进程的线程间,pthread_canc
2014-09-25 16:41:05 1167
原创 2线程原语:pthread_create(),pthread_self(),pthread_exit(),pthread_join(),pthread_cancel(),pthread_detach(
1 pthread_create()函数创建线程A:依赖的头文件#includeB:函数声明int pthread_create(pthread_t *thread, constpthread_attr_t *attr,void *(*start_routine) (void *), void *arg);pthread_t
2014-09-25 16:36:58 6444
原创 1线程概念:线程和进程之间的关系,线程间可共享资源,线程间非共享资源,线程的优缺点
1线程概念1.1什么是线程1.1.2线程和进程的关系 1.轻量级进程(light-weightprocess),也有PCB,创建线程使用底层函数和进程一样,都是clone.2.从内核里看进程和线程是一样的,都有各自不同的PCB,但是PCB中指向内存资源的三级页表示相同的3.进程可以蜕变成线程4.在美国人眼里,线程就是寄存
2014-09-25 16:21:40 2269
转载 window下eclipse +cdt+cygwin做C,C++开发环境搭建 (转自:http://blog.csdn.net/thinkandchange/article/details/7935)
1.Cygwin下载,配置,参看本人ndk开发。给cygwin配置环境变量;2.eclipse for java,javaee的话再安装cdt插件,eclipse for c,c++不需要.3.安装好后eclipse的配置问题.新建工程:注:第一:选Executable 而不是上面的GNU Autotools第二:如果右边没有 Cygwin GCC选项,
2014-09-22 23:01:26 1400
转载 PCB task_struct 数据结构 (转:http://blog.csdn.net/jurrah/article/details/3965437)
在linux 中每一个进程都由task_struct 数据结构来定义. task_struct就是我们通常所说的PCB.她是对进程控制的唯一手段也是最有效的手段. 当我们调用fork() 时, 系统会为我们产生一个task_struct结构。然后从父进程,那里继承一些数据, 并把新的进程插入到进程树中, 以待进行进程管理。因此了解task_struct的结构对于我们理解任务调度(在linu
2014-09-21 11:01:52 2260
原创 2进程之间的关系:进程组,会话,守护进程
1进程组一个或过个进程的集合,进程组ID是一个正整数。用来获得当前进程组ID的函数。pid_t getpgid(pid_t pid)pid_t getpgrp(void)获得父子进程进程组运行结果:组长进程标识:其进程组ID=其进程ID组长进程可以创建一个进程组,创建该进程组中的进程,然后终止,只要进程组中有一个进程存
2014-09-21 01:33:18 2264
原创 1.进程间的关系:终端,网络设备
1终端在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(ControllingTerminal),在讲进程时讲过,控制终端是保存在PCB中的信息,而我们知道fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是这个终端。默认情况下(没有重定向),每个进程的标准输入、标准输出和标准错误输出
2014-09-21 01:27:03 1294
原创 3信号处理之:避免异步IO的类型,SIGCHLD信号处理
1避免异步I/O的类型sig_atomic_t 平台下的原子类型volatile(晚上上网查找) 防止编译器开启优化选项是,优化对内存的读写。2 SIGCHLD信号处理SIGCHLD的产生条件子进程终止时子进程接收到SIGSTOP信号停止时子进程处在停止态,接受到SIGCONT后唤醒时
2014-09-21 01:20:22 1104
原创 2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,
1信号产生原因2.进程处理信号行为manpage里信号3中处理方式:SIG_IGNSIG_DFL 默认Term动作a signal handling function进程处理信号A默认处理动作term 中断
2014-09-21 01:18:58 2121
原创 1.信号处理之:kill(),alarm(),pause()函数
1查看信号的方式:man 7 signal,通过这个命令可以查看到所有信息。2查看信号kill -l注意,后面的32个信号表示的实时信号。 会发现一个规律,前32种信号会有各种不同的名称,后32种会以“SIGRTMIN”或者“SIGRTMAX”开头,前者是从unix继承下来的信号,称为不可靠信号(也称为非实时信号),后者为了解决“不可
2014-09-21 01:13:51 1902
原创 2Makefile
1关于Makefile,在编写Makefile的时候,Makefile这个名称第一个字母要大写。并且必须是Makefile.一个Makefile就相当于:#目标:依赖(条件)# 命令 à注意这里前面是一个tab2案例:A:创建一个项目calc,案例项目结构如下:B编写mul.cC编写sub.
2014-09-20 23:55:56 1091
原创 3Linux内存映射,mmap()函数
1mmap()依赖的头文件#include 2函数声明:void *mmap(void *addr, size_t length, intprot, int flags, intfd, off_t offset);int munmap(void *addr, size_t length);函数说明:mmap可以把磁盘文件
2014-09-20 23:48:33 1235
原创 2fifo有名管道
1fifo有名管道创建一个有名管道,fifo2.fifo依赖的头文件#include #include 函数声明int mkfifo(const char *pathname, mode_tmode);3.fifo的写端应用#include #include #include
2014-09-20 23:46:34 1185
原创 1pipe管道
1进程间通信每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。2pipe管
2014-09-20 23:46:29 1876
原创 6进程原语:wait()和waitpid()函数
1 wait/waitpid僵尸进程:子进程退出,父进程没有回收子进程资源(PCB),则子进程变成僵尸进程孤儿进程:父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为1号进程init进程,称为init进程领养孤儿进程2依赖的头文件#include #include 3函数声明pid_t wait(int
2014-09-20 23:41:59 2338
原创 3进程状态getrlimit()函数和setrlimit()函数
1修改进程资源限制,软限制可改,最大值不能超过硬限制,硬限制只有root用户可以修改查看进程资源限制cat /proc/self/limitsulimit -a 2getrlimit()函数和setrlimit()函数A依赖的头文件#include#in
2014-09-17 07:00:10 2064
原创 5进程原语:execl(),execlp(),execle(),execv(),execvp(),execvp(),execve()
1.exec族依赖的头文件#includeextern char**environ;2函数声明//第一个参数:可执行程序所在的绝对位置//第二个参数:可执行程序运行时所需的参数,这里是一个可变参数,每个参数之间用逗号分割//参数结束时,最后一个参数是:NULLint execl(constchar *path, const cha
2014-09-17 06:56:31 7879
原创 4进程原语:fork()函数,getpid()函数和getppid()函数,getuid()函数,getgid()函数,vfork()
1fork()函数子进程复制父进程的0到3g空间和父进程内核中的PCB,但id号不同。fork调用一次返回两次,有以下特点:A:父进程中返回子进程IDB:子进程中返回0C:读时共享,写时复制2fork()依赖的头文件#include 3fork()函数说明:pid_tfork(void);
2014-09-16 23:38:26 4191
原创 2通过程序获得环境变量,getenv(),setenv()函数和unsetenv()函数,env查看环境变量,echo输出指定的环境变量
1进程环境libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时要用extern声明。例如:运行结果:2.env命令可以查看进程信息3.echo $环境变量名 得出环境变量的值4getenv()A依赖头文件#includeB函数声
2014-09-16 00:33:42 4449
原创 1虚拟地址,虚拟内存映射,系统调用本质,进程运行状态
1操作系统会为每个进程分配0到4G的虚拟地址2.关于虚拟内存和物理内存之间的关系总结:A程序管理内存的最小单位是page(4096Byte),如果需要的内存不够4096字节,实际上开辟的也是4096字节。B每个程序对应独立的虚拟内存,调用的时候先找自己的虚拟内存,然后实质上是通过虚拟内存找物理内存。C每个进程共享操作系统的kern
2014-09-15 23:31:57 1398
原创 11Linux服务器编程之:VFS虚拟文件系统,dup()函数和dup2()函数
1dup函数和dup2函数#includeint dup(intoldfd);int dup2(intoldfd, int newfd); dup和dup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。如果两个文件描述符指向同一个file结构体,File Status Flag和读写位置只保存一份在file结构体
2014-09-15 23:27:53 1454
原创 9Linux服务器编程之:mkdir()函数和rmdir()函数
1 mkdir依赖的头文件#include#include 2.函数声明:int mkdir(const char *pathname, mode_tmode);3.案例说明:运行结果:注意:函数声明中的mode表示的是权限是多少4rmdir:删除一个目录所依
2014-09-15 23:25:34 1769
原创 10Linux服务器编程之:opendir()函数,readdir()函数,rewinddir()函数,telldir()函数和seekdir()函数,closedir()函数
1 opendir所需的头文件#include#include2函数声明DIR *opendir(const char *name);DIR *fdopendir(int fd);通过opendir来打开一个文件夹3readdir依赖的头文件#include4函数声明struct dirent *readd
2014-09-15 23:24:12 2684
原创 8Linux服务器编程之:chdir()函数和cd命令,getcwd()函数和pwd
1chdir依赖的头文件#include2函数定义int chdir(const char *path);int fchdir(int fd);函数说明:chdir的作用是改变工作目录4getcwd依赖的头文件#include5函数定义:char *getcwd(char *buf, size_t size
2014-09-15 23:23:03 4958
easyui资料
2014-02-22
17个在线编辑器,包括kindeditor,STEditor,HTMLArea3.0last20071025等
2012-07-22
二手购物网源码
2012-05-31
强大的购物网代码(java)
2012-05-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人