随笔分类 -  Linux

I/O多路复用技术详解之epoll模型
摘要:epoll的优点:1.支持一个进程打开大数目的socket描述符(FD) select 最不能忍受的是一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置,默认值是2048。对于那些需要支持的上万连接数目的IM服务器来说显然太少了。这时候你一是可以选择修改这个宏然后重新编译内核,不过资料也同时指出这样会带来网络效率的下降,二是可以选择多进程的解决方案(传统的 Apache方案),不过虽然linux上面创建进程的代价比较小,但仍旧是不可忽视的,加上进程间数据同步远比不上线程间同步的高效,所以也不是一种完美的方案。不过 epoll则没有这个限制,它所支持的FD上限是最大可以打开文件的数目 阅读全文

posted @ 2012-07-04 22:01 java课程设计 阅读(1147) 评论(0) 推荐(0)

I/O多路复用技术详解之poll模型
摘要:poll模型poll()系统调用是System V的多元I/O解决方案。它解决了select()的几个不足,尽管select()仍然经常使用(多数还是出于习惯,或者打着可移植的名义):#include <sys/poll.h>int poll (struct pollfd *fds, unsigned int nfds, int timeout); 和select()不一样,poll()没有使用低效的三个基于位的文件描述符set,而是采用了一个单独的结构体pollfd数组,由fds指针指向这个组。pollfd结构体定义如下:#include <sys/poll.h>st 阅读全文

posted @ 2012-07-04 21:59 java课程设计 阅读(410) 评论(0) 推荐(0)

I/O多路复用技术详解之select模型
摘要:select模型select()系统调用提供一个机制来实现同步多元I/O:#include <sys/time.h>#include <sys/types.h>#include <unistd.h>int select (int n,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,struct timeval *timeout);FD_CLR(int fd, fd_set *set);FD_ISSET(int fd, fd_set *set);FD_SET(int fd, fd_set *set);FD_ 阅读全文

posted @ 2012-07-04 21:57 java课程设计 阅读(782) 评论(0) 推荐(0)

函数setjmp,longjmp和sigsetjmp,siglongjmp
摘要:int sigsetjmp(sigjmp_buf env,int savemask); 返回值:若直接调用则返回0,若从siglongjmp调用返回则返回非0值;int siglongjmp(sigjmp_buf env,int val);setjmp和longjmp的使用如下:#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<signal.h> #include<setjmp.h> #define MAXLINE 1024 void sig_alarm( 阅读全文

posted @ 2012-06-25 21:05 java课程设计 阅读(338) 评论(0) 推荐(0)

信号的生命周期
摘要:#include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<signal.h> void sig_quit(int signo); int main() { if (signal(SIGQUIT, sig_quit) == SIG_ERR) { printf("can't catch sigquit\n"); exit(0); } sigset_t newset, oldset, curset; sigfillset(&newset); if 阅读全文

posted @ 2012-06-25 20:40 java课程设计 阅读(306) 评论(0) 推荐(0)

函数strtok和strchr的使用
摘要:#include <string.h> #include <stdio.h> int main(void) { char input[16] = "abc,d"; char *p; p = strtok(input, ","); if (p) printf("%s\n", p); p = strtok(NULL, ","); if (p) printf("%s\n", p); return 0; }#include<string.h> #include< 阅读全文

posted @ 2012-06-20 23:41 java课程设计 阅读(447) 评论(0) 推荐(0)

LINUX进程小结
摘要:id为0的进程通常是调度进程,常常被称为交换进程(swapper),该进程为内核的一部分,他并不执行任何磁盘上的程序,因此也被称为系统进程。id为1 init进程,在自举过程结束后由内核调用。id为2 页守护进程对于父进程已经终止的所有进程,他们的父进程都改变为init。在一个进程终止时,内核逐个检查所有活动的进程,以判断他是否是正要终止进程的子进程,如果是,则将该进程id更改为1,这种方法保证了每个进程都有一个父进程。如果子进程在父进程终止之前终止,父进程如何能做相应检验得到子进程的终止状态呢?对此的回答是:内核为每个子进程保存了一定量的信息,所以当终止进程的父进程调用wait或waitpi 阅读全文

posted @ 2012-06-20 23:19 java课程设计 阅读(240) 评论(0) 推荐(0)

LINUX文件系统--inode,硬连接,符号连接
摘要:业务背景:存在两个进程,进程A生成文件file,然后将其mv到一个新的文件fileA,进程B在需要的时候会取读取文件fileA。如果在进程B读取文件的时候,进程A在进行mv的操作,那么这个操作是否对进程B读取文件生成影响呢?会产生什么结果? 如下图所示: 在阐述该问题之前,首先讲解下mv的操作和fopen()函数等对文件的操作的基本原理。那么首先需要初步的了解下Linux的文件系统中所涉及到的一些基础知识,比如说Linux文件系统组件的体系结构,VFS, i节点,元数组等概念。1.Linux文件系统体系结构 如图1为Linux文件系统组件的体系结构: 其中用户空间包含一些应用程序(例如,文.. 阅读全文

posted @ 2012-06-19 20:00 java课程设计 阅读(564) 评论(0) 推荐(0)

基础socket编程
摘要:server 端#define MAXLINE 1024 int main() { int n; char buf[1024]; sockfd = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in servaddr; servaddr.sin_family = AF_INET; servaddr.sin_port(6666); servaddr.sin_addr.s_addr = INADDR_ANY; // servaddr.sin_addr.s_addr=inet_addr("127.0.0.1"); // inet 阅读全文

posted @ 2012-06-18 22:02 java课程设计 阅读(230) 评论(0) 推荐(0)

proxyscan
摘要:#include <stdio.h> #include <stdlib.h> #include <netinet/in.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <string.h> #define MAX 256 #define SS struct sockaddr int main(int argc, char *argv[]) { int s 阅读全文

posted @ 2012-06-13 16:26 java课程设计 阅读(297) 评论(0) 推荐(0)

导航