易截截图软件、单文件、免安装、纯绿色、仅160KB

linux—select详解

linux—select详解
select系统调用时用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变。
关于文件句柄,其实就是一个整数,通过socket函数的声明就明白了:
int socket(int domain, int type, int protocol);
我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的,对应的FILE *结构的表示就是stdin、stdout、stderr。
继续上面的select,就是用来监视某个或某些句柄的状态变化的。select函数原型如下:
int select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
函数的最后一个参数timeout是一个超时时间值。其类型是struct timeval *,即一个struct timeval结构的变量的指针,所以我们在程序里要声明一个struct timeval tv;然后把变量tv的地址&tv传递给select函数。struct timeval结构如下:
struct timeval
{
       long tv_sec;  //seconds
       long tv_usec; //microseconds
};
第2、3、4三个参数是一样的类型;fd_set *,即我们在程序里要申请几个fd_set类型的变量,比如rdfds,wtfds,exfds,然后把这个变量的地址&rdfds,&wtfds,&exfds传递给select函数。这三个参数都是一个句柄的集合,第一个rdfds是用来保存这样的句柄的:当句柄的状态变成可读时系统就告诉select函数返回,同理第二个函数是指向有句柄状态变成可写时系统就会告诉select函数返回,同理第三个参数exfds是特殊情况,即句柄上有特殊情况发生时系统会告诉select函数返回。特殊情况比如对方通过一个socket句柄发来了紧急数据。如果我们程序里只想检测某个socket是否有数据可读,我们可以这样:
fd_set  rdfds;
struct timeval tv;
int ret;
FD_ZERO(&rdfds);
FD_SET(socket, &rdfds);
tv.tv_sec = 1;
tv.tv_uses = 500;
ret = select (socket + 1, %rdfds, NULL, NULL, &tv);
if(ret < 0) perror (“select”);
else if (ret = = 0) printf(“time out”);
else {
       printf(“ret = %d\n”,ret);
       if(FD_ISSET(socket, &rdfds)){
   


相关文档:

Is cygwin support linux header file??


On 05/02/2010 04:31, Larry Hall (Cygwin) wrote:
> On 02/04/2010 08:36 PM, phil song wrote:
>> Hi,cygwin,
>> when I compile some project in cygwin,It prompts
>>
>> /cygdrive/g/work_platform/open-s/ftk-0.2/src/os/linux/ftk_linux.h:43:22:
>> linux/fb ......

关键业务慎用linux!

关键业务慎用linux!
在这里我指的“关键业务”是指在企业中提供诸如收费、销售等业务,需要提供要求苛刻的“安全性”、“可靠性(7X24)等要求的业务。不是宕机几个小时都无所谓的业务。从我的以往的应用案例来看,使用linux是个非常糟糕的选择。安全性,由于不能得到及时修补很容易被利用。稳定 ......

从windows转向linux下,感叹多多

  写了这几年程序,突然转到linux下,突然感到自己还要学的太多。
  1。linux的命令,好多....
      2. 太多的IDE,不知道究竟哪个才真正好使,暂时用eclicpes吧,据说很象VS。
  3.  VMWARE下的linux, 显卡竟然装不好,听说到装VTOOLS,,但没找到好用的。
  4 除了MS的 ......

Ubuntu(Linux)使用Eclipse搭建C/C++编译环境

这两天,给自己电脑弄了双系统,除了原来的Windows 7系统外,装上了Linux系统,使用的版本是Ubuntu
(点
击可到相应的下载页面)。开始我装的Linux版本是fedora9,对于一个根本没接触过Linux系统的人而言,使用fedora,简直让人崩溃。更
崩溃的是,我用的英文版。没的办法,又重新下载Linux,刻碟。装系统。装系统的时候 ......

1.初级入门 xp sqlplus 连接 linux虚拟机 oracle

1.首先看看在xp下是否能够ping通虚拟机的ip(虚拟机查看ip命令:ifconfig,此命令要求有root权限,或者用 /sbin/ifconfig).
2.在第一步成功的基础上,要配置xp下oracle安装目录下的tnsnames.ora这个文件(我的路径是:D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN,这个路径因机器而异)
    首先在tnsnam ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号