随笔分类 - Linux
select,poll和epoll的区别
摘要: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);
阅读全文
(转)I/0模型
摘要:在高性能服务器中,一般采用非阻塞网络IO,单进程事件驱动的架构。这种架构的核心是事件驱动机制。目前Linux常用select,poll和epoll系统调用来完成事件驱动。select和poll是传统的unix事件驱动机制,但它们有很大的缺点:在大量的并发连接中,如果冷连接较多,select和poll的性能会因为并发数的线性上升而成平方速度的下降,这是因为调用者在每次select和poll返回时都要检测每个连接是否有事件发生,当连接数很大时,系统开销会非常大。另外select和poll每次返回时都要从内核向用户空间复制大量的数据,这样的开销也很大。所以,select和poll并不是处理网络IO的
阅读全文
(转)linux select poll
摘要:以前写服务器程序直接就都写成多线程的了,没考虑过其他方式,也没考虑到底哪种方式好;前些日子看些人说windows下面用完成端口、Linux下面用epoll,这些效率高。其它环境一说就是select;似乎很多人不愿意提多线程方式,也许被传说中的线程同步吓得吧;我个人还是偏向多线程方式,这样不但可以监视多端口,还可以分离业务逻辑,便于调试维护。----------------------------------------------------------------------------------------------------看明白这几个东西,需要一个环境,描述问题;就是我的程序需要
阅读全文
poll函数
摘要:poll函数 poll函数起源于SVR3,最初局限于流设备。SVR4取消了这种限制,允许poll工作在任何描述字上。poll提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。 1.#include <poll.h> 2. 3.int poll(struct pollfd *fdarray, unsigned long nfds, int timeout); 4. 返回:就绪描述字的个数,0-超时,-1-出错 第一个参数是指向一个结构数组第一个元素的指针。每个数组元素都是一个pollfd结构,用于指定测试某个给定描述字fd的条件。 struct pollfd{.
阅读全文
线程堆栈大小 pthread_attr_setstacksize 的使用【转】
摘要:author: 张继飞pthread_create 创建线程时,若不指定分配堆栈大小,系统会分配默认值,查看默认值方法如下:# ulimit -s8192#上述表示为8M;单位为KB。也可以通过# ulimit -a其中 stack size 项也表示堆栈大小。ulimit -s value 用来重新设置stack 大小。一般来说默认堆栈大小为 8388608;堆栈最小为 16384 。 单位为字节。堆栈最小值定义为PTHREAD_STACK_MIN ,包含#include <limits.h>后可以通过打印其值查看。对于默认值可以通过pthread_attr_getstacksi
阅读全文
linux setsockopt
摘要:1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAIT的过程:BOOL bDontLinger = FALSE;setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLing
阅读全文
Linux下getsockopt/setsockopt 函数说明
摘要:【getsockopt/setsockopt系统调用】功能描述: 获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。用法:#include <sys/types.h>#include <sys/socket.h>intgetsockopt(int sock, int level, int
阅读全文
TCP/IP编程中协议无关性的函数getaddrinfo()
摘要:一、getaddrinfo函数介绍:gethostbyname和gethostbyaddr这两个函数仅仅支持IPv4,getaddrinfo函数能够处理名字到地址以及服务到端口这两种转换,返回的是一个sockaddr结构的链表而不是一个地址清单。这些sockaddr结构随后可由套接口函数直接使用。如此以来,getaddrinfo函数把协议相关性安全隐藏在这个库函数内部。应用程序只要处理由getaddrinfo函数填写的套接口地址结构。该函数在POSIX规范中定义了。#include<netdb.h>int getaddrinfo( const char *hostname, con
阅读全文
Linux下的多线程编程(转)
摘要:1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。 为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。 使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。我们知道,在Linux系统下,启动一个新的进
阅读全文
linux中fork创建进程讲解(转)
摘要:大家知道Linux中创建子进程的一个很好的方法是函数调用fork,但是很多初学者对fork的理解上可能有点困难。我们举个例子来看看fork的用法吧。 大家用fork的时候记住fork是“分叉”的意思就很好理解了。 记得初学fork() 函数及遇到这个函数时,总是不能理解fork为什么会这样写,就会分成父子两个进程。 先看一下fork() 的经典模式//--------------------------------------------------------beginint pid=fork();if(pid < 0){//失败,一般是该用户的进程数达到限制或者内存被用光了.....
阅读全文
怎么查看redhat版本
摘要:第一种:[root@css /]# cat /etc/redhat-releaseRed Hat Enterprise Linux AS release 4 (Nahant Update 2)第二种:[root@css /]# cat /etc/issueRed Hat Enterprise Linux AS release 4 (Nahant Update 2)Kernel \r on an \m查看核心版本:[root@css /]# cat /proc/versionLinux version 2.6.9-22.ELsmp (bhcompile@porky.build.redhat.co
阅读全文
source insight 调用标准C函数时提示方法
摘要:输入自定义函数时会代码提示输入标准C函数时没有提示解决方法Options->Prefernces->Create Common Projects->Standrd C/C++ and Windows Headers "...VC98/include"创建一个包含头文件的工程如CStandard_WIN32.PR然后在Options->Prefernces->Project symol path中Add Project to Path将CStandard_WIN32.PR添加进来对于Linux程序只需拷贝linux中的头文件,然后创建一个工程包含
阅读全文
请教shell读写XML问题(转)
摘要:现有 123.xml文件,内容是:<?xml version="1.0" encoding="GBK"?><videoinfo> <videoname>呵呵</videoname> <videopath>20080110</videopath> <videosize>0.0</videosize> <widthOfImage>320</widthOfImage> <heightOfImage>240</heightOf
阅读全文
linux批量替换文件内容3种方法(perl,sed,shell)
摘要:方法1:这两天在构建一个应用的使用用到了maven,由于project很大,足足有700多个 pom.xml文件,更郁闷的是在很多pom.xml文件里都单独指定了资源库的url,我需要把这些资源库的url统一指定到nexus本地中央库.手 工一个个改文件配置有点不太实际,所以google了一下,找到批量替换文件内容的好方法,命令结构如下:find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g'下面这个例子就是将当前目录及所有子目录下的所有pom.xml文件中的”http://
阅读全文
更改linux的最大文件描述符限制
摘要:ile Descriptor Requirements (Linux Systems)To ensure good server performance, the total number of client connections, database files, and log files must not exceed the maximum file descriptor limit on the operating system (ulimit-n). By default, the directory server allows an unlimited number of con
阅读全文
mount/umount命令
摘要:如果想在运行的Linux下访问其它文件系统中的资源的话,就要用mount命令来实现。2. mount的基本用法是?格式:mount [-参数] [设备名称] [挂载点]其中常用的参数有:-a 安装在/etc/fstab文件中类出的所有文件系统。-f 伪装mount,作出检查设备和目录的样子,但并不真正挂载文件系统。-n 不把安装记录在/etc/mtab 文件中。-r 讲文件系统安装为只读。-v 详细显示安装信息。-w 将文件系统安装为可写,为命令默认情况。-t指定设备的文件系统类型,常见的有:ext2linux目前常用的文件系统msdosMS-DOS的fat,就是fat16vfatwindo.
阅读全文
Linux如何查找文件安装路径
摘要:Linux中查看某 个软件的安装路径(地址)有时显得非常重要。比如某个文件的快速启动项被删除,或者你要建立快速启动项,或者想删除、 添加安装文件等等,很多地方都要用到查案文件安装路径的命令。这里给大家介绍Linux查看文件安装路径(地址)命令。一、查看文件安装路径:由于软件安装的地方不止一个地方,所有先说查看文件安装的所有路径(地址)。这里以Oracle为例。比如说我安装了Oracle,但是不知道文件都安装在哪些地方、放在哪些文件夹里,可 以用下面的命令查看所有的文件路径在终端输入:whereis oracle回车,如果你安装好了Oracle,就会显示文件安装的地址,例如我的显示(安装地址可能
阅读全文
第一章:linux命令初步
摘要:内容简介Linux控制台与图形界面切换掌握Linux命令的习惯介绍使用频率比较多的一些命令文件操作命令目录命令文件比较命令增加用户及更改密码命令列出文件内容命令其它命令Linux控制台与图形界面切换Ctrl+Alt+F1~F6 Ctrl+Alt+F7掌握Linux命令的习惯1、要善用TAB键来补全命令2、要善用帮助文件操作命令ls(list)相当于dos下的dir功能说明:列出目录内容。补充说明:执行ls指令可列出目录的内容,包括文件和子目录的名称。参 数: -1 每列仅显示一个文件或目录名称。 -a或–all当前目录下所有文件和目录。 -c 以更改时间排序,显示文件和目录。 -C 以又上至.
阅读全文
linux系统下更改用户名
摘要:格式如下usermod -l new_user_name old_user_name即可更改用户名。用新用户登陆后,相应有用户家目录的用户组权限为新用户,但组的用户还是老用户!
阅读全文
dd命令使用详解
摘要:1.命令简介dd 的主要选项:指定数字的地方若以下列字符结尾乘以相应的数字:b=512, c=1, k=1024, w=2, xm=number mif=file #输入文件名,缺省为标准输入。of=file #输出文件名,缺省为标准输出。ibs=bytes #一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。obs=bytes #一次写 bytes 个字节(即一个块大小为 bytes 个字节)。bs=bytes #同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。cbs=bytes #一次转换 bytes 个字节,即转换缓冲区大小。skip=blocks
阅读全文