??xml version="1.0" encoding="utf-8" standalone="yes"?>国产欧美视频一区二区,精品国产乱码久久久久久虫虫漫画,亚洲国产精品尤物yw在线观看http://www.aygfsteel.com/mlxlzc/articles/369209.htmlgotogotoThu, 02 Feb 2012 01:10:00 GMThttp://www.aygfsteel.com/mlxlzc/articles/369209.htmlhttp://www.aygfsteel.com/mlxlzc/comments/369209.htmlhttp://www.aygfsteel.com/mlxlzc/articles/369209.html#Feedback0http://www.aygfsteel.com/mlxlzc/comments/commentRss/369209.htmlhttp://www.aygfsteel.com/mlxlzc/services/trackbacks/369209.html

名词解释Q?/strong>man epoll之后Q得到如下结果:

NAME
       epoll - I/O event notification facility

SYNOPSIS
       #include <sys/epoll.h>

DESCRIPTION
       epoll is a variant of poll(2) that can be used either as Edge or Level
       Triggered interface and scales well to large numbers of  watched  fds.
       Three  system  calls  are provided to set up and control an epoll set:
       epoll_create(2), epoll_ctl(2), epoll_wait(2).

       An epoll set is connected to a file descriptor created  by  epoll_cre-
       ate(2).   Interest for certain file descriptors is then registered via
       epoll_ctl(2).  Finally, the actual wait is started by epoll_wait(2).

其实Q一切的解释都是多余的,按照我目前的了解QEPOLL模型g只有一U格式,所以大家只要参考我下面的代码,p够对EPOLL有所了解了,代码的解释都已经在注释中Q?/p>

while (TRUE)
 {
  int nfds = epoll_wait (m_epoll_fd, m_events, MAX_EVENTS, EPOLL_TIME_OUT);//{待EPOLL旉的发生,相当于监听,至于相关的端口,需要在初始化EPOLL的时候绑定?br />  if (nfds <= 0)
   continue;
  m_bOnTimeChecking = FALSE;
  G_CurTime = time(NULL);
  for (int i=0; i<nfds; i++)
  {
   try
   {
    if (m_events[i].data.fd == m_listen_http_fd)//如果新监到一个HTTP用户q接到绑定的HTTP端口Q徏立新的连接。由于我们新采用了SOCKETq接Q所以基本没用?br />    {
     OnAcceptHttpEpoll ();
    }
    else if (m_events[i].data.fd == m_listen_sock_fd)//如果新监到一个SOCKET用户q接Cl定的SOCKET端口Q徏立新的连接?br />    {
     OnAcceptSockEpoll ();
    }
    else if (m_events[i].events & EPOLLIN)//如果是已l连接的用户Qƈ且收到数据,那么q行d?br />    {
     OnReadEpoll (i);
    }

    OnWriteEpoll (i);//查看当前的活动连接是否有需要写出的数据?br />   }
   catch (int)
   {
    PRINTF ("CATCH捕获错误/n");
    continue;
   }
  }
  m_bOnTimeChecking = TRUE;
  OnTimer ();//q行一些定时的操作Q主要就是删除一些短U用L?br /> }

 其实EPOLL的精华,按照我目前的理解Q也是上述的几D늟短的代码Q看来时代真的不同了Q以前如何接受大量用戯接的问题Q现在却被如此轻杄搞定Q真是让Z得不感叹?/p>

今天搞了一天的epollQ想做一个高q发的代理程序。刚开始真是郁?一直搞不通,|上也有几篇介绍epoll的文章。但都不深入Q没有将一些注意的地方讲明。以至于C很多弯\Q现自q一些理解共享给大家,以少走弯路?

epoll用到的所有函数都是在头文件sys/epoll.h中声明,有什么地方不明白或函数忘C可以ȝ一下?
epoll和select相比Q最大不同在?

1epollq回时已l明的知道哪个sokcet fd发生了事Ӟ不用再一个个比对。这样就提高了效率?
2select的FD_SETSIZE是有限止的,而epoll是没有限止的只与pȝ资源有关?

1、epoll_create函数
函数声明Qint epoll_create(int size)
?函数生成一个epoll专用的文件描q符。它其实是在内核甌一I间Q用来存放你惛_注的socket fd上是否发生以及发生了什么事件。size是你在q个epoll fd上能x的最大socket fd数。随你定好了。只要你有空间。可参见上面与select之不?.

22、epoll_ctl函数
函数声明Qint epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
该函数用于控制某个epoll文g描述W上的事Ӟ可以注册事gQ修改事Ӟ删除事g?
参数Q?
epfdQ由 epoll_create 生成的epoll专用的文件描q符Q?
opQ要q行的操作例如注册事Ӟ可能的取值EPOLL_CTL_ADD 注册、EPOLL_CTL_MOD ?攏VEPOLL_CTL_DEL 删除

fdQ关联的文g描述W;
eventQ指向epoll_event的指针;
如果调用成功q回0,不成功返?1

用到的数据结?
typedef union epoll_data {
void *ptr;
int fd;
__uint32_t u32;
__uint64_t u64;
} epoll_data_t;

struct epoll_event {
__uint32_t events; /* Epoll events */
epoll_data_t data; /* User data variable */
};


如:
struct epoll_event ev;
//讄与要处理的事件相关的文g描述W?br />ev.data.fd=listenfd;
//讄要处理的事gcd
ev.events=EPOLLIN|EPOLLET;
//注册epoll事g
epoll_ctl(epfd,EPOLL_CTL_ADD,listenfd,&ev);


常用的事件类?
EPOLLIN Q表C对应的文g描述W可以读Q?br />EPOLLOUTQ表C对应的文g描述W可以写Q?br />EPOLLPRIQ表C对应的文g描述W有紧急的数据可读
EPOLLERRQ表C对应的文g描述W发生错误;
EPOLLHUPQ表C对应的文g描述W被挂断Q?br />EPOLLETQ表C对应的文g描述W有事g发生Q?br />

3、epoll_wait函数
函数声明:int epoll_wait(int epfd,struct epoll_event * events,int maxevents,int timeout)
该函数用于轮询I/O事g的发生;
参数Q?br />epfd:由epoll_create 生成的epoll专用的文件描q符Q?br />epoll_event:用于回传代处理事件的数组Q?br />maxevents:每次能处理的事g敎ͼ
timeout:{待I/O事g发生的超时?单位我也不太清楚)Q?1相当于阻塞,0相当于非d。一般用-1卛_
q回发生事g数?br />

 

 

 

 

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <errno.h>  
  4. #include <string.h>  
  5. #include <sys/types.h>  
  6. #include <netinet/in.h>  
  7. #include <sys/socket.h>  
  8. #include <sys/wait.h>  
  9. #include <unistd.h>  
  10. #include <arpa/inet.h>  
  11. #include <openssl/ssl.h>  
  12. #include <openssl/err.h>  
  13. #include <fcntl.h>  
  14. #include <sys/epoll.h>  
  15. #include <sys/time.h>  
  16. #include <sys/resource.h>  
  1. #define MAXBUF 1024  
  2. #define MAXEPOLLSIZE 10000  
  1. /* 
  2. setnonblocking - 讄句柄为非d方式 
  3. */  
  4. int setnonblocking(int sockfd)  
  5. {  
  6.     if (fcntl(sockfd, F_SETFL, fcntl(sockfd, F_GETFD, 0)|O_NONBLOCK) == -1)  
  7.  {  
  8.         return -1;  
  9.     }  
  10.     return 0;  
  11. }  
  1. /* 
  2. handle_message - 处理每个 socket 上的消息收发 
  3. */  
  4. int handle_message(int new_fd)  
  5. {  
  6.     char buf[MAXBUF + 1];  
  7.     int len;  
  8.       
  9.  /* 开始处理每个新q接上的数据收发 */  
  10.     bzero(buf, MAXBUF + 1);  
  11.      
  12.  /* 接收客户端的消息 */  
  13.     len = recv(new_fd, buf, MAXBUF, 0);  
  14.     if (len > 0)  
  15.  {  
  16.         printf  
  17.             ("%d接收消息成功:'%s'Q共%d个字节的数据/n",  
  18.              new_fd, buf, len);  
  19.  }  
  20.     else  
  21.  {  
  22.         if (len < 0)  
  23.      printf  
  24.                 ("消息接收p|Q错误代码是%dQ错误信息是'%s'/n",  
  25.                  errno, strerror(errno));  
  26.         close(new_fd);  
  27.         return -1;  
  28.     }  
  29.     /* 处理每个新连接上的数据收发结?nbsp;*/  
  30.     return len;  
  31. }  
  32. /************关于本文?******************************************* 
  33. *filename: epoll-server.c 
  34. *purpose: 演示epoll处理量socketq接的方?nbsp;
  35. *wrote by: zhoulifa(<a href="mailto:zhoulifa@163.com"& gt;zhoulifa@163.com</a>) 周立?<a href="http: //zhoulifa.bokee.com">http://zhoulifa.bokee.com</a>) 
  36. Linux爱好?nbsp;Linux知识传播?nbsp;SOHO?nbsp;开发?nbsp;最擅长C语言 
  37. *date time:2007-01-31 21:00 
  38. *Note: M人可以Q意复制代码ƈq用q些文档Q当然包括你的商业用?nbsp;
  39. * 但请遵@GPL 
  40. *Thanks to:Google 
  41. *Hope:希望来多的h贡献自己的力量,为科学技术发展出?nbsp;
  42. * U技站在巨h的肩膀上进步更快!感谢有开源前辈的贡献Q?nbsp;
  43. *********************************************************************/  
  44. int main(int argc, char **argv)  
  45. {  
  46.     int listener, new_fd, kdpfd, nfds, n, ret, curfds;  
  47.     socklen_t len;  
  48.     struct sockaddr_in my_addr, their_addr;  
  49.     unsigned int myport, lisnum;  
  50.     struct epoll_event ev;  
  51.     struct epoll_event events[MAXEPOLLSIZE];  
  52.     struct rlimit rt;  
  53.  myport = 5000;  
  54.  lisnum = 2;   
  55.       
  56.  /* 讄每个q程允许打开的最大文件数 */  
  57.     rt.rlim_max = rt.rlim_cur = MAXEPOLLSIZE;  
  58.     if (setrlimit(RLIMIT_NOFILE, &rt) == -1)   
  59.  {  
  60.         perror("setrlimit");  
  61.         exit(1);  
  62.     }  
  63.     else   
  64.     {  
  65.         printf("讄pȝ资源参数成功Q?n");  
  66.     }  
  1.     /* 开?nbsp;socket 监听 */  
  2.     if ((listener = socket(PF_INET, SOCK_STREAM, 0)) == -1)  
  3.     {  
  4.         perror("socket");  
  5.         exit(1);  
  6.     }  
  7.     else  
  8.     {  
  9.         printf("socket 创徏成功Q?n");  
  10.  }  
  11.    
  12.     setnonblocking(listener);  
  1.     bzero(&my_addr, sizeof(my_addr));  
  2.     my_addr.sin_family = PF_INET;  
  3.     my_addr.sin_port = htons(myport);  
  4.     my_addr.sin_addr.s_addr = INADDR_ANY;  
  1.     if (bind(listener, (struct sockaddr *) &my_addr, sizeof(struct sockaddr)) == -1)   
  2.     {  
  3.         perror("bind");  
  4.         exit(1);  
  5.     }   
  6.     else  
  7.     {  
  8.         printf("IP 地址和端口绑定成?n");  
  9.  }  
  10.     if (listen(listener, lisnum) == -1)   
  11.     {  
  12.         perror("listen");  
  13.         exit(1);  
  14.     }  
  15.     else  
  16.     {  
  17.         printf("开启服务成功!/n");  
  18.  }  
  19.       
  20.  /* 创徏 epoll 句柄Q把监听 socket 加入?nbsp;epoll 集合?nbsp;*/  
  21.     kdpfd = epoll_create(MAXEPOLLSIZE);  
  22.     len = sizeof(struct sockaddr_in);  
  23.     ev.events = EPOLLIN | EPOLLET;  
  24.     ev.data.fd = listener;  
  25.     if (epoll_ctl(kdpfd, EPOLL_CTL_ADD, listener, &ev) < 0)   
  26.  {  
  27.         fprintf(stderr, "epoll set insertion error: fd=%d/n", listener);  
  28.         return -1;  
  29.     }  
  30.  else  
  31.     {  
  32.   printf("监听 socket 加入 epoll 成功Q?n");  
  33.  }  
  34.     curfds = 1;  
  35.     while (1)   
  36.  {  
  37.         /* {待有事件发?nbsp;*/  
  38.         nfds = epoll_wait(kdpfd, events, curfds, -1);  
  39.         if (nfds == -1)  
  40.   {  
  41.             perror("epoll_wait");  
  42.             break;  
  43.         }  
  44.         /* 处理所有事?nbsp;*/  
  45.         for (n = 0; n < nfds; ++n)  
  46.   {  
  47.             if (events[n].data.fd == listener)   
  48.    {  
  49.                 new_fd = accept(listener, (struct sockaddr *) &their_addr,&len);  
  50.                 if (new_fd < 0)   
  51.     {  
  52.                     perror("accept");  
  53.                     continue;  
  54.                 }   
  55.     else  
  56.     {  
  57.      printf("有连接来自于Q?nbsp;%d:%dQ?nbsp;分配?nbsp;socket ?%d/n",  
  58.                              inet_ntoa(their_addr.sin_addr), ntohs(their_addr.sin_port), new_fd);  
  59.     }  
  60.                 setnonblocking(new_fd);  
  61.                 ev.events = EPOLLIN | EPOLLET;  
  62.                 ev.data.fd = new_fd;  
  63.                 if (epoll_ctl(kdpfd, EPOLL_CTL_ADD, new_fd, &ev) < 0)  
  64.     {  
  65.                     fprintf(stderr, "?nbsp;socket '%d' 加入 epoll p|Q?s/n",  
  66.                             new_fd, strerror(errno));  
  67.                     return -1;  
  68.                 }  
  69.                 curfds++;  
  70.             }   
  71.    else  
  72.    {  
  73.                 ret = handle_message(events[n].data.fd);  
  74.                 if (ret < 1 && errno != 11)  
  75.     {  
  76.                     epoll_ctl(kdpfd, EPOLL_CTL_DEL, events[n].data.fd,&ev);  
  77.                     curfds--;  
  78.                 }  
  79.             }  
  80.         }  
  81.     }  
  82.     close(listener);  
  83.     return 0;  
  84. }  

 epoll_wait q行的原理是 {侍注册在epfd上的socket fd的事件的发生Q如果发生则发生的sokct fd和事件类型放入到events数组中? q且注册在epfd上的socket fd的事件类型给清空Q所以如果下一个@环你q要xq个socket fd的话Q则需要用epoll_ctl(epfd,EPOLL_CTL_MOD,listenfd,&ev)来重新设|socket fd的事件类型。这时不用EPOLL_CTL_ADD,因ؓsocket fdq未清空Q只是事件类型清I。这一步非帔R要?nbsp;



goto 2012-02-02 09:10 发表评论
]]>
Linux下可以替换运行中的程序么http://www.aygfsteel.com/mlxlzc/articles/365359.htmlgotogotoFri, 02 Dec 2011 03:08:00 GMThttp://www.aygfsteel.com/mlxlzc/articles/365359.htmlhttp://www.aygfsteel.com/mlxlzc/comments/365359.htmlhttp://www.aygfsteel.com/mlxlzc/articles/365359.html#Feedback0http://www.aygfsteel.com/mlxlzc/comments/commentRss/365359.htmlhttp://www.aygfsteel.com/mlxlzc/services/trackbacks/365359.html

转:

http://blog.csdn.net/zhangxinrun/article/details/5591246

今天被朋友问?#8220;Linux下可以替换运行中的程序么Q?#8221;Q以前依E记得Linux下是可以的(而Windows׃让)Q于是随口答?#8220;OK”。结果朋友发来一个执行结果:Qtest正在q行中)

# cp test2 test
cp: cannot create regular file `test': Text file busy

看v来是E序被占用,无法覆盖。于是自己又再做了几个实验:

Q?Q先rm删除正在q行的testQ然后cp test2 test没有错误了?br />Q?Q先mv改名正在q行的testQ然后cp test2 test也没有问题?/p>

查了查资料ƈ动手分析了一下,扑ֈ了比较满意的解释。cpq不改变目标文g的inodeQ事实上它的实现是这LQ?/p>

# strace cp test2 test  2>&1 | grep open.*test
open("test2", O_RDONLY|O_LARGEFILE)     = 3
open("test", O_WRONLY|O_TRUNC|O_LARGEFILE) = 4

我原以ؓcp的实现是“rm + open(O_CREAT)”Q不q现在想想上面的实现方式才是最可靠的(保证了时序安全和目标文g的属性)。这也可以解释ؓ什么cp的目标文件会l承被覆盖文件的属性而非源文件?/p>

Linux ׃Demand Paging机制的关p,必须保正在q行中的E序镜像Q注意,q文g本nQ不被意外修改,因此内核在启动程序后会锁定这个程序镜像的inode。这? 是ؓ什么cp在用“O_WRONLY|O_TRUNC”模式open目标文g时会p|。而先rm再cp的话Q新文g的inode其实已经改变了,? inodeq没有被真正删除Q直到内栔R攑֯它的引用。同理,mv只是改变了文件名Q其inode不变Q新文g使用了新的inode?/span>

问题到这里已l水落石出,不过刨根I底的个性驱使我再做了以下一l实验,没想到结果完全出乎我意料之外Q?/p>

写了一个简单的试E序Q?/p>

#include <stdio.h>

int main(int argc, char * argv[])
{
foo();  // An export function by libtest.so.
sleep(1000);
return 0;
}

foo()是另一个测试动态库libtest.so的导出接口,只打C行提C就q回。接下来我把上面Ҏ行文件的试用例对动态库又做了一遍:

Q?Qcp libtest2.so libtest.so可以直接覆盖已加载的动态库?br />Q?Q先rm删除已加载的libtest.soQ然后cp libtest2.so libtest.so成功?br />Q?Q先mv改名已加载的libtest.soQ然后cp libtest2.so libtest.so成功?/p>

除了W一个用例外Q结果相同。这L来,动态库被加载时Nldq没有锁定inodeQ不q想想也可以宽恕Q毕竟ld也是用户态程序,没有权利去锁定inodeQ也不应与内核的文gpȝ底层实现耦合?/p>

到这里都q算在情理之中,看v来Linux也都处理的很好。不q还剩下一个问题:动态库被以cp的方式覆盖后N不会和Demand Paging机制产生冲突Q?/p>

在思考这个问题的q程中,我意识到前面q个试E序的一个致命漏z,E作修改如下Q?/p>

#include <stdio.h>

int main(int argc, char * argv[])
{
loop:
foo();  // An export function by libtest.so.
sleep(1);
goto loop;
return 0;
}

q?ơ,再执行上面的三个用例后发玎ͼ“cp libtest2.so libtest.so”虽然仍可直接覆盖已加载的动态库Q但是测试程序马上出C“Segmentation fault”。而后两个用例l果不变。由此可见,惌安全的替换已加蝲的动态库Q还是用“W拙”?#8220;rm + cp”吧,看似捷径?#8220;cp覆盖”会直接葬送掉你的E序……

看来Q我再一ơ低CLinux的健壮性,看似W合逻辑的流E也可能会带来灾 难性的后果Q?#8220;rm & cp”?#8220;cp覆盖”背后所隐藏的底层差异却可以成ؓ你的救星。Linux用得久是让h觉得q是一块充满了荆棘和陷q原始丛林Q只有步步ؓ营实t前 行才能走的更q?/p>

注:以上实验ZSuSE Linux Enterprise Server 9 SP1QLinux 2.6.5 & glibc 2.3.3Q?/p>




goto 2011-12-02 11:08 发表评论
]]>
linux telnet慢问题解?/title><link>http://www.aygfsteel.com/mlxlzc/archive/2011/12/01/365264.html</link><dc:creator>goto</dc:creator><author>goto</author><pubDate>Thu, 01 Dec 2011 02:02:00 GMT</pubDate><guid>http://www.aygfsteel.com/mlxlzc/archive/2011/12/01/365264.html</guid><wfw:comment>http://www.aygfsteel.com/mlxlzc/comments/365264.html</wfw:comment><comments>http://www.aygfsteel.com/mlxlzc/archive/2011/12/01/365264.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/mlxlzc/comments/commentRss/365264.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/mlxlzc/services/trackbacks/365264.html</trackback:ping><description><![CDATA[<div><span id="zoom"><p style="text-indent: 2em">更改/etc/resolv.conf文g </p><p style="text-indent: 2em">如果你的linuxL只是在局域网内工作,请将nameserver地址改ؓ|卡本n的地址?</p><p style="text-indent: 2em">例: </p><p style="text-indent: 2em">suselinux:~ # more /etc/resolv.conf </p><p style="text-indent: 2em">nameserver 192.168.0.160 </p><p style="text-indent: 2em">search site </p><p style="text-indent: 2em">然后重启|卡 </p><p style="text-indent: 2em">suselinux:~ # ifconfig eth0 down </p><p style="text-indent: 2em">suselinux:~ # ifconfig eth0 up </p></span></div><img src ="http://www.aygfsteel.com/mlxlzc/aggbug/365264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/mlxlzc/" target="_blank">goto</a> 2011-12-01 10:02 <a href="http://www.aygfsteel.com/mlxlzc/archive/2011/12/01/365264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql++ 安装?/title><link>http://www.aygfsteel.com/mlxlzc/archive/2011/11/03/362632.html</link><dc:creator>goto</dc:creator><author>goto</author><pubDate>Thu, 03 Nov 2011 12:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/mlxlzc/archive/2011/11/03/362632.html</guid><wfw:comment>http://www.aygfsteel.com/mlxlzc/comments/362632.html</wfw:comment><comments>http://www.aygfsteel.com/mlxlzc/archive/2011/11/03/362632.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/mlxlzc/comments/commentRss/362632.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/mlxlzc/services/trackbacks/362632.html</trackback:ping><description><![CDATA[1Q需要安装数据库的各U头文g以及动态库如:<br />     <div>    MySQL-server-community-5.1.58-1.rhel4.i386.rpm</div><div>    MySQL-client-community-5.1.58-1.rhel4.i386.rpm</div><div>    MySQL-devel-community-5.1.58-1.rhel4.i386.rpm</div><div>    MySQL-shared-compat-5.1.58-1.rhel4.i386.rpm  Q否则安装mysql++会报错,说链接客Lp|Q?br /><br />2Q安装mysql++<br />    <div>     ./configure -> make -> make install<br /><br />3Q编译测试程?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">[zhichen@localhost src]$ vi test.cpp<br />    #include </span><span style="color: #000000; ">"</span><span style="color: #000000; ">mysql++.h</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br />    </span><span style="color: #0000FF; ">using</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; "> mysqlpp;<br />    </span><span style="color: #0000FF; ">using</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">namespace</span><span style="color: #000000; "> std;<br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> main()<br />    {<br />        </span><span style="color: #008000; ">//</span><span style="color: #008000; ">构造一个Connectioncȝ对象</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        Connection con(</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">);<br />        </span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">char</span><span style="color: #000000; ">*</span><span style="color: #000000; "> db </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">mysql</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">*</span><span style="color: #000000; ">server </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">127.0.0.1</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">*</span><span style="color: #000000; ">user </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">pos</span><span style="color: #000000; ">"</span><span style="color: #000000; ">, </span><span style="color: #000000; ">*</span><span style="color: #000000; ">pass </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">pos</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (con.connect(db, server, user, pass))<br />        {<br />            cout </span><span style="color: #000000; "><<</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">success</span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; "><<</span><span style="color: #000000; "> endl;<br />            </span><span style="color: #0000FF; ">string</span><span style="color: #000000; "> sql </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">select * from users</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;    <br />            Query query </span><span style="color: #000000; ">=</span><span style="color: #000000; "> con.query(sql);<br />            </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (StoreQueryResult rs </span><span style="color: #000000; ">=</span><span style="color: #000000; "> query.store())<br />            {<br />                StoreQueryResult::const_iterator it;<br />                </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (it </span><span style="color: #000000; ">=</span><span style="color: #000000; "> rs.begin(); it </span><span style="color: #000000; ">!=</span><span style="color: #000000; "> rs.end(); </span><span style="color: #000000; ">++</span><span style="color: #000000; ">it)<br />                {<br />                    Row row </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">*</span><span style="color: #000000; ">it;<br />                    cout </span><span style="color: #000000; "><<</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">/t</span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; "><<</span><span style="color: #000000; "> row[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">] </span><span style="color: #000000; "><<</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">/t</span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; "><<</span><span style="color: #000000; "> row[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">] </span><span style="color: #000000; "><<</span><span style="color: #000000; "> endl;<br />                }<br />            }<br />            </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />            {<br />                cerr </span><span style="color: #000000; "><<</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">Failed to get item list: </span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; "><<</span><span style="color: #000000; "> endl;<br />                </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />            }<br />        }<br />        </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "><br />        {<br />            cout </span><span style="color: #000000; "><<</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">Failed to connect DB</span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; "><<</span><span style="color: #000000; "> con.error() </span><span style="color: #000000; "><<</span><span style="color: #000000; "> endl;<br />            </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />        }<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />    }<br /></span></div><br /><br /><div>g++ -o test test.cpp -I/usr/include/mysql -I/usr/local/include/mysql++/ -L/usr/local/lib -lmysqlpp -lmysqlclient</div><br /><br />4Q执?/test <br />如果报错?div>./test: error while loading shared libraries: libmysqlpp.so.3: cannot open shared object file: No such file or directory</div><br /><div> man ldconfig</div><div>vi /etc/ld.so.conf</div>把mysq++动态库 /usr/local/lib的\径加q去<br /><br />5Q再ơ执行测试程?br /></div></div><img src ="http://www.aygfsteel.com/mlxlzc/aggbug/362632.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/mlxlzc/" target="_blank">goto</a> 2011-11-03 20:32 <a href="http://www.aygfsteel.com/mlxlzc/archive/2011/11/03/362632.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查询端口对应的进E信?/title><link>http://www.aygfsteel.com/mlxlzc/archive/2011/10/10/360356.html</link><dc:creator>goto</dc:creator><author>goto</author><pubDate>Mon, 10 Oct 2011 02:21:00 GMT</pubDate><guid>http://www.aygfsteel.com/mlxlzc/archive/2011/10/10/360356.html</guid><wfw:comment>http://www.aygfsteel.com/mlxlzc/comments/360356.html</wfw:comment><comments>http://www.aygfsteel.com/mlxlzc/archive/2011/10/10/360356.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/mlxlzc/comments/commentRss/360356.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/mlxlzc/services/trackbacks/360356.html</trackback:ping><description><![CDATA[<div>[root@localhost ~]# lsof -i:36097  查看端口对应的进E信?br />COMMAND   PID USER   FD   TYPE DEVICE SIZE NODE NAME<br />.csyslog 3709 root    3u  IPv4  59474       TCP 172.18.215.28:36097->216.83.44.226:81 (ESTABLISHED)<br /><br /> netstat -anp | grep 35236  查看端口对应的程?br /><br /><br />ulimit 查看pȝ资源限制<br /><br />查询q程占用资源情况Q如打开文g句柄<br />lsof -p q程?br /><br />strace -p q程?br /></div><img src ="http://www.aygfsteel.com/mlxlzc/aggbug/360356.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/mlxlzc/" target="_blank">goto</a> 2011-10-10 10:21 <a href="http://www.aygfsteel.com/mlxlzc/archive/2011/10/10/360356.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>疲倦想攑ּ时看看(转)http://www.aygfsteel.com/mlxlzc/articles/327399.htmlgotogotoThu, 29 Jul 2010 02:00:00 GMThttp://www.aygfsteel.com/mlxlzc/articles/327399.htmlhttp://www.aygfsteel.com/mlxlzc/comments/327399.htmlhttp://www.aygfsteel.com/mlxlzc/articles/327399.html#Feedback0http://www.aygfsteel.com/mlxlzc/comments/commentRss/327399.htmlhttp://www.aygfsteel.com/mlxlzc/services/trackbacks/327399.htmlq篇东西转自一位有思想的研I生Q她看到q篇漫画Q觉得很不错Q我看后也觉得值得我们思考,其是当我们抱怨时Q?/p>

W一qOMQ每个h都背负着一个沉重的十字Ӟ在缓慢而艰隑֜前行Q?/p>

途中Q有一个h忽然停了下来。他在想着什么!

他想Q上帝啊Q这个十字架太沉重了Q我可以把十字架砍掉一块!

于是他动手砍了v来!

砍掉之后走v来,的确是轻松了很多Q他的步伐也不由得加快了?/p>

p栯啊走啊!走着走着Q他觉得肩上的十字架q是很沉Q很重!

他祈求道Q上帝啊Q请你让我再砍掉一截吧Q我会走得更LQ?/p>

于是Q他又砍掉了一截!

感谢上帝Q这样一来,他感到轻村֤了!

如此Q他毫不费力地就走到了队伍的最前面。当其他人在吃力地负重前行时Q他却轻村֜Dv了小Ԍ

啊哈!谁料Q前边忽然出C一个又深又宽的沟壑Q沟上没有桥Q周围也没有路。也没有蜘蛛侠或者超人出来解救他…

后面的h都慢慢地赶上来了Q他们用自己背负的十字架搭在沟上Q做成桥Q从容不q地跨越了沟壑?/p>

他也惛_法炮制。只可惜啊,他的十字架之前已l被砍掉了长长的一大截Q根本无法做成桥帮助他跨沟壑!

于是Q当其他人都在朝着目标l箋前进Ӟ他却只能停在原地Q垂头气,q悔莫及……

? 生的路上我们每个人都背负着各种各样的十字架在艰隑։行。它也许是我们的学习Q也许是我们的工作,也许是我们的感情。但是,正是q些责Q和义务,构成了我 们在q个世界上存在着的理由和价倹{所以,请不要埋怨学习的J重Q工作的劌Q感情的负担Q因为真正的快乐Q是奋战后的l果Q没有经历深ȝ痛苦Q我们也 ׃会不到酣畅淋漓的快乐Q?/p>

每个人都背负着属于自己的十字架Q的是q样QOM的每个hQ都是背负着属于自己的十字架Q而当沟壑出现Ӟ他们也只能利用自p负的十字架去跨越沟壑Ql前q?/p>

所以:在h生的道\上,有些黑暗Q只能自q;有些痛苦Q只能自׃验;有些孤独Q也只能自己品尝……人生是没有捷径的Q?/p>

goto 2010-07-29 10:00 发表评论
]]>
linux ftp限制登陆后切换目?/title><link>http://www.aygfsteel.com/mlxlzc/articles/313905.html</link><dc:creator>goto</dc:creator><author>goto</author><pubDate>Thu, 25 Feb 2010 08:46:00 GMT</pubDate><guid>http://www.aygfsteel.com/mlxlzc/articles/313905.html</guid><wfw:comment>http://www.aygfsteel.com/mlxlzc/comments/313905.html</wfw:comment><comments>http://www.aygfsteel.com/mlxlzc/articles/313905.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/mlxlzc/comments/commentRss/313905.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/mlxlzc/services/trackbacks/313905.html</trackback:ping><description><![CDATA[2) 启动 <br /> #service vsftpd start 启动 <br /> <br /> #service vsftpd stop 停止 <br /> <br /> #service vsftpd restart 重启 <br /> 3) 配置 <br /> <br />    主配|文?/etc/vsftpd/vsftpd.conf <br /> <br /> 用户控制文g /etc/vsftpd.ftpusers <br /> <br /> <br /> 实验一、设|Chroot——用户不能切换目? <br /> <br /> 因ؓ默认情况下是可以切换目录的,所以是很不安全的。? <br /> <br /> 1、限制所有用户不能切换目? <br /> <br /> chroot_local_user=YES <br /> <span style="background-color: yellow;"><br /> <strong>2、设|指定的用户不能切换目录 </strong><br /> </span><br /> chroot_local_user=NO <br /> <br /> chroot_list_enable=YES <br /> <br /> chroot_list_file=/etc/vsftpd.chroot_list <br /> <br /> 实验二、用Vsftp.user_list讉K控制 <br /> <br /> 利用/etc/vsftpd.user_list <br /> <br /> A、设|在/etc/vsftpd.user_list文g中用户不能访问,其它用户可以讉K <br /> <br /> userlist_enable=YES <br /> <br /> userlist_deny=YES <br /> <br /> <br /> userlist_file=/etc/vsftpd.user_list <br /> <br /> B、设|在/etc/vsftpd.user_list文g中的用户能访问国Q其它用户不可以讉K? <br /> <br /> userlist_enable=YES <br /> <br /> userlist_deny=NO <br /> <br /> userlist_file=/etc/vsftpd.user_list <br /> <br /> <strong>防止用户用ssh telnet{登?/strong><br /> <br /> vi /etc/passwd<br /> ydzf:x:501:501::/home/ydzf:/bin/false<br /> <br /> 再修?etc/shells文gQ将/bin/falseq个文g加进? <img src ="http://www.aygfsteel.com/mlxlzc/aggbug/313905.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/mlxlzc/" target="_blank">goto</a> 2010-02-25 16:46 <a href="http://www.aygfsteel.com/mlxlzc/articles/313905.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE查看数据库的SQLhttp://www.aygfsteel.com/mlxlzc/articles/290506.htmlgotogotoMon, 10 Aug 2009 03:23:00 GMThttp://www.aygfsteel.com/mlxlzc/articles/290506.htmlhttp://www.aygfsteel.com/mlxlzc/comments/290506.htmlhttp://www.aygfsteel.com/mlxlzc/articles/290506.html#Feedback0http://www.aygfsteel.com/mlxlzc/comments/commentRss/290506.htmlhttp://www.aygfsteel.com/mlxlzc/services/trackbacks/290506.html1、查看表I间的名U及大小

  select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
from dba_tablespaces t, dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name;

  2、查看表I间物理文g的名U及大小

  select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;

  3、查看回滚段名称及大?/p>

  select segment_name, tablespace_name, r.status,
(initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,
max_extents, v.curext CurExtent
From dba_rollback_segs r, v$rollstat v
Where r.segment_id = v.usn(+)
order by segment_name ;

  4、查看控制文?/p>

  select name from v$controlfile;

  5、查看日志文?/p>

  select member from v$logfile;

  6、查看表I间的用情?/p>

  select sum(bytes)/(1024*1024) as free_space,tablespace_name
from dba_free_space
group by tablespace_name;

  SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,
(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C
WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;

  7、查看数据库库对?/p>

  select owner, object_type, status, count(*) count# from all_objects group by owner, object_type, status;

  8、查看数据库的版本 

  Select version FROM Product_component_version
Where SUBSTR(PRODUCT,1,6)='Oracle';

  9、查看数据库的创建日期和归档方式

  Select Created, Log_Mode, Log_Mode From V$Database;



goto 2009-08-10 11:23 发表评论
]]>
又大了一岁了http://www.aygfsteel.com/mlxlzc/articles/283245.htmlgotogotoFri, 19 Jun 2009 08:24:00 GMThttp://www.aygfsteel.com/mlxlzc/articles/283245.htmlhttp://www.aygfsteel.com/mlxlzc/comments/283245.htmlhttp://www.aygfsteel.com/mlxlzc/articles/283245.html#Feedback0http://www.aygfsteel.com/mlxlzc/comments/commentRss/283245.htmlhttp://www.aygfsteel.com/mlxlzc/services/trackbacks/283245.html
人懒?br />
现实?br />
当年的理x志么?br />
我怎么?br />
定位也没?br />
我该走向何方



goto 2009-06-19 16:24 发表评论
]]>
L路由表和静态\?/title><link>http://www.aygfsteel.com/mlxlzc/articles/263655.html</link><dc:creator>goto</dc:creator><author>goto</author><pubDate>Fri, 03 Apr 2009 00:52:00 GMT</pubDate><guid>http://www.aygfsteel.com/mlxlzc/articles/263655.html</guid><wfw:comment>http://www.aygfsteel.com/mlxlzc/comments/263655.html</wfw:comment><comments>http://www.aygfsteel.com/mlxlzc/articles/263655.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/mlxlzc/comments/commentRss/263655.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/mlxlzc/services/trackbacks/263655.html</trackback:ping><description><![CDATA[<h1><a name="路由表和静态\? id="路由表和静态\?>路由表和静态\?/a></h1> <div> <div left="" round="" style="width: 60%;"> <div> <p>内容提要</p> <div> <ol> <li> <div> 查看 Linux 内核路由?/div> </li> <li> <div> 使用 route 命o讄静态\?/div> </li> <li> <div> 讄包{?/div> </li> </ol> </div> </div> </div> </div> <h2><a name="linux_内核路由? id="linux_内核路由?>Linux 内核路由?/a></h2> <h3><a name="查看_linux_内核路由? id="查看_linux_内核路由?>查看 Linux 内核路由?/a></h3> <div> <p> 使用下面?route 命o可以查看 Linux 内核路由表? </p> <pre># route</pre> <pre>Destination Gateway Genmask Flags Metric Ref Use Iface<br /> 192.168.0.0 * 255.255.255.0 U 0 0 0 eth0<br /> 169.254.0.0 * 255.255.0.0 U 0 0 0 eth0<br /> default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0</pre> <p> route 命o的输出项说明 </p> <table> <tbody> <tr> <th centeralign=""> 输出? </th><th centeralign=""> 说明 </th> </tr> <tr> <td> Destination </td> <td> 目标|段或者主?</td> </tr> <tr> <td> Gateway </td> <td> |关地址Q?#8221;*” 表示目标是本L所属的|络Q不需要\?</td> </tr> <tr> <td> Genmask </td> <td> |络掩码 </td> </tr> <tr> <td> Flags </td> <td> 标记。一些可能的标记如下Q?</td> </tr> <tr> <td> <br /> </td> <td> U ?路由是活动的 </td> </tr> <tr> <td> <br /> </td> <td> H ?目标是一个主?</td> </tr> <tr> <td> <br /> </td> <td> G ?路由指向|关 </td> </tr> <tr> <td> <br /> </td> <td> R ?恢复动态\׃生的表项 </td> </tr> <tr> <td> <br /> </td> <td> D ?p\q后台E序动态地安装 </td> </tr> <tr> <td> <br /> </td> <td> M ?p\q后台E序修改 </td> </tr> <tr> <td> <br /> </td> <td> ! ?拒绝路由 </td> </tr> <tr> <td> Metric </td> <td> 路由距离Q到达指定网l所需的中转数Qlinux 内核中没有用) </td> </tr> <tr> <td> Ref </td> <td> 路由引用次敎ͼlinux 内核中没有用) </td> </tr> <tr> <td> Use </td> <td> 此\由项被\pY件查扄ơ数 </td> </tr> <tr> <td> Iface </td> <td> 该\p对应的输出接口 </td> </tr> </tbody> </table> </div> <h3><a name="U\q? id="U\q?>3 U\q?/a></h3> <h4><a name="L路由" id="L路由">L路由</a></h4> <div> <p> L路由是\由选择表中指向单个IP地址或主机名的\p录。主\qFlags字段为H。例如,在下面的CZ中,本地L通过IP地址192.168.1.1的\由器到达IP地址?0.0.0.10的主机? </p> <pre>Destination Gateway Genmask Flags Metric Ref Use Iface<br /> ----------- ------- ------- ----- ------ --- --- -----<br /> 10.0.0.10 192.168.1.1 255.255.255.255 UH 0 0 0 eth0</pre> </div> <h4><a name="|络路由" id="|络路由">|络路由</a></h4> <div> <p> |络路由是代表主机可以到辄|络。网l\qFlags字段为N。例如,在下面的CZ中,本地L发送到|络192.19.12的数据包转发到IP地址?92.168.1.1的\由器? </p> <pre>Destination Gateway Genmask Flags Metric Ref Use Iface<br /> ----------- ------- ------- ----- ----- --- --- -----<br /> 192.19.12 192.168.1.1 255.255.255.0 UN 0 0 0 eth0</pre> </div> <h4><a name="默认路由" id="默认路由">默认路由</a></h4> <div> <p> 当主Z能在路由表中查找到目标主机的IP地址或网l\由时Q数据包p发送到默认路由Q默认网养I上。默认\qFlags字段为G。例如,在下面的CZ中,默认路由是IP地址?92.168.1.1的\由器? </p> <pre>Destination Gateway Genmask Flags Metric Ref Use Iface<br /> ----------- ------- ------- ----- ------ --- --- -----<br /> default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0</pre> </div> <h2><a name="配置静态\? id="配置静态\?>配置静态\?/a></h2> <h3><a name="route_命o" id="route_命o">route 命o</a></h3> <div> <p> 讄和查看\p都可以用 route 命oQ设|内核\p的命令格式是Q? </p> <pre># route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]</pre> <p> 其中Q? </p> <ul> <li> <div> add : d一条\p?/div> </li> <li> <div> del : 删除一条\p?/div> </li> <li> <div> -net : 目的地址是一个网l?/div> </li> <li> <div> -host : 目的地址是一个主?/div> </li> <li> <div> target : 目的|络或主?/div> </li> <li> <div> netmask : 目的地址的网l掩?/div> </li> <li> <div> gw : 路由数据包通过的网?/div> </li> <li> <div> dev : \由指定的|络接口</div> </li> </ul> </div> <h3><a name="route_命o使用举例" id="route_命o使用举例">route 命o使用举例</a></h3> <div> <p> dC机的路由 </p> <pre># route add -host 192.168.1.2 dev eth0:0<br /> # route add -host 10.20.30.148 gw 10.20.30.40</pre> <p> d到网l的路由 </p> <pre># route add -net 10.20.30.40 netmask 255.255.255.248 eth0<br /> # route add -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41<br /> # route add -net 192.168.1.0/24 eth1</pre> <p> d默认路由 </p> <pre># route add default gw 192.168.1.1</pre> <p> 删除路由 </p> <pre># route del -host 192.168.1.2 dev eth0:0<br /> # route del -host 10.20.30.148 gw 10.20.30.40<br /> # route del -net 10.20.30.40 netmask 255.255.255.248 eth0<br /> # route del -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41<br /> # route del -net 192.168.1.0/24 eth1<br /> # route del default gw 192.168.1.1</pre> </div> <h3><a name="讄包{? id="讄包{?>讄包{?/a></h3> <div> <p> ?CentOS 中默认的内核配置已经包含了\由功能,但默认ƈ没有在系l启动时启用此功能。开?Linux 的\由功能可以通过调整内核的网l参数来实现。要配置和调整内核参数可以?sysctl 命o。例如:要开?Linux 内核的数据包转发功能可以使用如下的命令? </p> <pre># sysctl -w net.ipv4.ip_forward=1</pre> <p> q样讄之后Q当前系l就能实现包转发Q但下次启动计算机时失效。ؓ了在下ơ启动计机时仍然有效,需要将下面的行写入配置文g/etc/sysctl.conf? </p> <pre># vi /etc/sysctl.conf</pre> <pre>net.ipv4.ip_forward = 1</pre> <p> 用户q可以用如下的命o查看当前pȝ是否支持包{发? </p> <pre># sysctl net.ipv4.ip_forward</pre> </div> <img src ="http://www.aygfsteel.com/mlxlzc/aggbug/263655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/mlxlzc/" target="_blank">goto</a> 2009-04-03 08:52 <a href="http://www.aygfsteel.com/mlxlzc/articles/263655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">Ҷ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">뽭</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˰</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ľ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">׼</a>| <a href="http://" target="_blank">ͩ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ٲ</a>| <a href="http://" target="_blank">ȫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͷ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͬ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">괨</a>| <a href="http://" target="_blank">ͤ</a>| <a href="http://" target="_blank">ƽԭ</a>| <a href="http://" target="_blank">ľ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ǿ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ȩ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̨</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>