随笔分类 -  Linux

摘要:在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __FD_SETSIZE1024表示select最多同时监听1024个fd,当然,可以通过修改头文件再重编译内核来扩大这个数目,但这似乎并不治本。epoll的接口非常简单,一共就三个函数:1. int epoll 阅读全文
posted @ 2012-10-22 15:53 ForA 阅读(320) 评论(0) 推荐(1)
摘要:现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。一.对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对数据存放进行对齐,会在存取效率上带来损失。比如有些平台每 阅读全文
posted @ 2012-10-18 20:23 ForA 阅读(160) 评论(0) 推荐(0)
摘要:在开发 socket 应用程序时,首要任务通常是确保可靠性并满足一些特定的需求。利用本文中给出的 4 个提示,您就可以从头开始为实现最佳性能来设计并开发 socket 程序。本文内容包括对于 Sockets API 的使用、两个可以提高性能的 socket 选项以及 GNU/Linux优化。 为了能够开发性能卓越的应用程序,请遵循以下技巧:最小化报文传输的延时。最小化系统调用的负载。为 Bandwidth Delay Product 调节 TCP 窗口。动态优化 GNU/Linux TCP/IP 栈。 技巧 1. 最小化报文传输的延时 在通过 TCP socket 进行通信时,数据都拆分... 阅读全文
posted @ 2012-10-18 18:08 ForA 阅读(1721) 评论(0) 推荐(0)
摘要:函数#include <string.h>#include<stdarg.h>int max(int num, int b...){ va_list ap; //A int maxf,temp; va_start(ap,b);//B maxf=b; cout <<b <<endl; for(int i=1;i<num;i++) { temp=va_arg(ap,int); //C cout<<temp<<'\n'; if(maxf<temp) maxf=tem... 阅读全文
posted @ 2012-09-29 10:08 ForA 阅读(703) 评论(0) 推荐(0)
摘要:在对IP地址结构体SOCKADDR_IN赋值的时候,经常会用到下列的函数htonl,htons,inet_addr,与之相对应的函数是ntohl,ntohs,inet_ntoa。查看这些函数的解析,会发现这些函数其实是与主机字节序和网络字节序之间转换有关。就是什么网络字节序,什么是主机字节序呢?下面我写出他们之间的转换:用IP地址127.0.0.1为例:第一步 127 . 0 . 0 . 1 把IP地址每一部分转换为8位的二进制数。第二步 01111111 00000000 00000000 00000001 = 2130706433(主机字节序)然后把上面的四部分二进制数从右往左按部分重新排 阅读全文
posted @ 2012-09-26 15:06 ForA 阅读(6582) 评论(0) 推荐(0)
摘要:1. yum 安装 mysql一、[root@sample ~]# yum -y install mysql-server ← 安装MySQL.....略Installed: mysql-server.i386 0:4.1.20-1.RHEL4.1Dependency Installed: mysql.i386 0:4.1.20-1.RHEL4.1 perl-DBD-MySQL.i386 0:2.9004-3.1 perl-DBI.i386 0:1.40-8Complete!二、配置[root@sample ~]# vi /etc/my.cnf ← 编辑MySQL的配置文件[mysqld]da 阅读全文
posted @ 2011-07-08 17:21 ForA 阅读(943) 评论(0) 推荐(1)
摘要:在Unix/Linux下共有五种I/O模型,分别是:1)阻塞I/O2)非阻塞I/O3)I/O复用(select和poll)4)信号驱动I/O(SIGIO)5)异步I/O(Posix.1的aio_系列函数)这几个模型,有时还真把我给弄糊涂了,今天就特意来总结比较一下:阻塞I/O:应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空间,IO函数返回成功指示非阻塞I/O:我们把一个套接口设置为非阻塞就是告诉内核,当所请求的I/O操作无法完成时,不要将进程睡眠,而是返回一个错误。这样我们的I/O操作函数将不断的测试数据是否已经准 阅读全文
posted @ 2011-06-30 11:48 ForA 阅读(1258) 评论(0) 推荐(0)
摘要:进程,线程通信与同步1.0Linux进程间通讯管道/FIFO:管道中还有命名管道和非命名管道(即匿名管道)之分,非命名管道(即匿名管道)只能用于父子进程通讯,命名管道可用于非父子进程,命名管道就是FIFO,管道是先进先出的通讯方式 消息队列:消息队列是用于两个进程之间的通讯,首先在一个进程中创建一个消息队列,然后再往消息队列中写数据,而另一个进程则从那个消息队列中取数据. 需要注意的是,消息队列是用创建文件的方式建立的,如果一个进程向某个消息队列中写入了数据之后,另一个进程并没有取出数据,即使向消息队列中写数据的进程已经结束,保存在消息队列中的数据并没有消失,也就是说下次再从这个消息队列读数据 阅读全文
posted @ 2011-05-06 23:31 ForA 阅读(3045) 评论(0) 推荐(0)
摘要:以 ssize_t write(int filedes, const void *buff, size_t nbytes)和size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *fp)来讲讲自己对unix系统下带缓存的I/O和不带缓存的I/O的区别。首先要清楚一个概念,所谓的代缓存并不是指上面两个函数的buff参数,而是指unix系统在内核中所设的缓冲存储器。当将数据写到文件上时,内核先将该数据写到缓存,如果该缓存未满,则并不将其排入输出队列,直到缓存写满或者内核再次需要重新使用此缓存时才将其排入输入队列,待其到达对首,在 阅读全文
posted @ 2011-04-25 22:03 ForA 阅读(1039) 评论(0) 推荐(0)
摘要:调度算法是指:根据系统的资源分配策略所规定的资源分配算法。一、先来先服务和短作业(进程)优先调度算法 1. 先来先服务调度算法。先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度, 也可用于进程调度。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。由此可知,本算法适合于CPU繁忙型作业, 而不利于I/O繁忙型的作业(进程)。 2. 短作业(进程)优先调度算法。短作业(进程)优先调度算法(SJ/PF)是指对短作业或短进程优先调度的算法,该算法既可用于作业调度, 也可用于进程调度。但其对长作业不利;不能保证紧迫性作业(进程)被及时处理;作业的长短只是被估算出 阅读全文
posted @ 2011-04-05 19:34 ForA 阅读(17949) 评论(1) 推荐(1)
摘要:1、vi的基本概念  基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:1) 命令行模式command mode)  控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。2) 插入模式(Insert mode)  只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。3) 底行模式(last line mode)  将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出 阅读全文
posted @ 2011-01-08 10:33 ForA 阅读(264) 评论(0) 推荐(0)
摘要:file : ~/etc/vimrccontent:"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" by Amix - http://amix.dk/"" Maintainer: redguardtoo chb_sh@hotmail.com, Amir Salihefendic amix3k at gmail.com" Version: 2.1" Last Change: 21/03/08 23:00:01" fix some performance issue and syntax bugs" Last 阅读全文
posted @ 2011-01-08 09:39 ForA 阅读(447) 评论(0) 推荐(0)
摘要:在Linux下进行C语言编程,必然要采用GNU GCC来编译C源代码生成可执行程序。一、GCC快速入门Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件]其中,目标文件可缺省,Gcc默认生成可执行的文件名为:编译文件.out我们来看一下经典入门程序"Hello World!"# vi hello.c#include <stdlib.h>#include <... 阅读全文
posted @ 2010-10-03 22:56 ForA 阅读(267) 评论(0) 推荐(1)
摘要:file1.c[代码]hello.c[代码]gcc -c file1.c -o fiile1.ogcc -c hello.c -o hello.ogcc hello.o file1.o -o hello./hello注:这样连接的时候不需要在hello.c文件中加入#include"file1.c" 阅读全文
posted @ 2009-11-21 13:01 ForA 阅读(187) 评论(0) 推荐(0)
摘要:由于是Linux新手,所以现在才开始接触线程编程,照着GUN/Linux编程指南中的一个例子输入编译,结果出现如下错误:undefined reference to 'pthread_create'undefined reference to 'pthread_join'问题原因: pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthr... 阅读全文
posted @ 2009-11-21 12:58 ForA 阅读(1427) 评论(1) 推荐(0)