<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>LINUXQQ &#187; C语言</title>
	<atom:link href="http://www.linuxqq.net/archives/category/c%e8%af%ad%e8%a8%80/feed" rel="self" type="application/rss+xml" />
	<link>http://www.linuxqq.net</link>
	<description>LINUXQQ狂人时代</description>
	<lastBuildDate>Tue, 10 Jan 2012 04:39:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>dup函数</title>
		<link>http://www.linuxqq.net/archives/107.html</link>
		<comments>http://www.linuxqq.net/archives/107.html#comments</comments>
		<pubDate>Tue, 01 Sep 2009 01:39:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C语言]]></category>
		<category><![CDATA[dup函数]]></category>

		<guid isPermaLink="false">http://www.linuxqq.net/?p=107</guid>
		<description><![CDATA[dup函数 ：复制文件描述符 相关头文件：#include &#60;unistd.h&#62; 函数表达式：int dup(int filedes); 参数说明：dup的函数参数filedes表示需要复制的文件的文件描述符 返回值说明：如果成功复制一个文件返回新的文件描述符，失败则返回-1 函数功能详解：dup函数总是找到进程文件表中的第一个可用的文件描述符 ，将参数指定的文件描述符 复制到该描述符后 ，返回这个描述符。 函数使用说明：         dup函数总是将复试的文件描述符复制到进程中第一个可用的文件描述符的位置 ，因此利用这一个特性可以知道进程中最小可用的文件描述符 。         dup函数复制的文件必须是一个已经打开的有效文件 。dup函数的参数不能是随便的一个整数，从而避免引起系统混乱。 利用函数dup，我们可以复制一个描述符。传给该函数一个既有的描述符，它就会返回一个新的描述符， 这个新的描述符是传给它的描述符的拷贝。这意味着，这两个描述符共享同一个数据结构。例如， 如果我们对一个文件描述符执行lseek操作，得到的第一个文件的位置和第二个是一样的。 需要注意的是，我们可以在调用fork之前建立一个描述符，这与调用dup建立描述符的效果是一样的， 子进程也同样会收到一个复制出来的描述符。 dup2函数跟dup函数相似，但dup2函数允许调用者规定一个有效描述符和目标描述符的id。dup2函数成功返回时，目标描述符（dup2函数的第二个参数）将变成源描述符（dup2函数的第一个参数）的复制品，换句话说， 两个文件描述符现在都指向同一个文件，并且是函数第一个参数指向的文件。下面我们用一段代码加以说明： ? int oldfd; oldfd = open(&#8220;app_log&#8221;, (O_RDWR &#124; O_CREATE), 0644 ); dup2( oldfd, 1 ); close( oldfd ); 注： dup()或者dup2()主要是将某个特定的文件描述字输出输出的重定向！ 他们保证将复制的文件描述字到当前未打开的最小描述字！ 标准输出对应着1， close(1); dup(fd); close(fd); 先关掉了标准输出，那么这个描述字就空闲着，你一旦dup就重定向到他了，他们两共享同一个打开的文件表项，然后你将输出标准流到它现在指定的地方，也就是那个文件！ 建议使用dup2(),上面的你那个改为 [...]]]></description>
		<wfw:commentRss>http://www.linuxqq.net/archives/107.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>信号屏蔽字</title>
		<link>http://www.linuxqq.net/archives/106.html</link>
		<comments>http://www.linuxqq.net/archives/106.html#comments</comments>
		<pubDate>Wed, 26 Aug 2009 08:06:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C语言]]></category>
		<category><![CDATA[信号屏蔽字]]></category>

		<guid isPermaLink="false">http://www.linuxqq.net/?p=106</guid>
		<description><![CDATA[  四、信号屏蔽字： 有时候我们希望进程正确的执行，而不想进程受到信号的影响，比如我们希望上面那个程序在1秒钟之后不结束。这个时候我们就要进行信号的操作了。 信号操作最常用的方法是信号屏蔽。信号屏蔽要用到下面的几个函数。 sigemptyset，sigfillset，sigaddset，sigdelset，sigismember，sigprocmask。下面对他们分别进行讲解。   8． 名称:： sigemptyset/sigfillset/sigaddset/sigdelset/sigismember 功能： 处理信号集 头文件： #include &#60;signal.h&#62; 函数原形： int sigemptyset(sigset_t *set); int sigfillset(sigset_t *set); int sigaddset(sigset_t *set,int signum); int sigdelset(sigset_t *set,int signum); int sigismember(const sigset_t *set,int signum); 参数： set 信号集 signum 信号 返回值： 若成功返回0，若出错返回-1。 若真返回1，若假返回0，若出错返回-1。 sigismember                         我们需要有一个能表示多个信号—信号集的数据类型。我们将在诸如sigprocmask之类的函数中使用这种数据类型，以便告诉内核不允许发生该信号集中的信号。上面的5个函数可以对信号集进行处理。 函数sigemptyset 初始化由set指向的信号集，清除其中所有信号。函数sigfillset初始化由set指向的信号集，使其包含所有信号。所以信号在使用信号集前，要对信号集调用sigemptyset或sigfillset一次。 [...]]]></description>
		<wfw:commentRss>http://www.linuxqq.net/archives/106.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux下C 文件操作</title>
		<link>http://www.linuxqq.net/archives/104.html</link>
		<comments>http://www.linuxqq.net/archives/104.html#comments</comments>
		<pubDate>Fri, 03 Jul 2009 02:39:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C语言]]></category>
		<category><![CDATA[linux下C 文件操作]]></category>

		<guid isPermaLink="false">http://www.linuxqq.net/?p=104</guid>
		<description><![CDATA[前言:      我们在这一节将要讨论linux下文件操作的各个函数.  1.文件的创建和读写  2.文件的各个属性  3.目录文件的操作  4.管道文件  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 1。文件的创建和读写      我假设你已经知道了标准级的文件操作的各个函数(fopen,fread,fwrite等等).当然如果你不清楚的话也不要着急.我们讨论的系统级的文件操作实际上是为标准级文件操作服务的.  当我们需要打开一个文件进行读写操作的时候,我们可以使用系统调用函数open.使用完成以后我们调用另外一个close函数进行关闭操作.  #include  #include  #include  #include  int open(const char *pathname,int flags); int open(const char *pathname,int flags,mode_t mode); int close(int fd); open函数有两个形式.其中pathname是我们要打开的文件名(包含路径名称,缺省是认为在当前路径下面).flags可以去下面的一个值或者是几个值的组合.  O_RDONLY:以只读的方式打开文件.  O_WRONLY:以只写的方式打开文件.  O_RDWR:以读写的方式打开文件.  O_APPEND:以追加的方式打开文件.  O_CREAT:创建一个文件.  O_EXEC:如果使用了O_CREAT而且文件已经存在,就会发生一个错误.  O_NOBLOCK:以非阻塞的方式打开一个文件.  O_TRUNC:如果文件已经存在,则删除文件的内容.  前面三个标志只能使用任意的一个.如果使用了O_CREATE标志,那么我们要使用open的第二种形式.还要指定mode标志,用来表示文件的访问权限.mode可以是以下情况的组合.  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; S_IRUSR 用户可以读 S_IWUSR 用户可以写 S_IXUSR 用户可以执行 S_IRWXU 用户可以读写执行 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; S_IRGRP 组可以读 S_IWGRP 组可以写 S_IXGRP 组可以执行 S_IRWXG 组可以读写执行 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; S_IROTH         其他人可以读    S_IWOTH         其他人可以写 S_IXOTH         其他人可以执行  S_IRWXO         其他人可以读写执行 &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; S_ISUID 设置用户执行ID  S_ISGID 设置组的执行ID &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; 我们也可以用数字来代表各个位的标志.Linux总共用5个数字来表示文件的各种权限. 00000.第一位表示设置用户ID.第二位表示设置组ID,第三位表示用户自己的权限位,第四位表示组的权限,最后一位表示其他人的权限. [...]]]></description>
		<wfw:commentRss>http://www.linuxqq.net/archives/104.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>fprintf函数</title>
		<link>http://www.linuxqq.net/archives/100.html</link>
		<comments>http://www.linuxqq.net/archives/100.html#comments</comments>
		<pubDate>Mon, 15 Jun 2009 02:27:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C语言]]></category>
		<category><![CDATA[fprintf函数]]></category>

		<guid isPermaLink="false">http://www.linuxqq.net/?p=100</guid>
		<description><![CDATA[查了一下man手册，fprintf函数的原型如下：      int fprintf(FILE *stream, const char *format, &#8230;);       FILE *fp=NULL;      fp=fopen(HTTP_CONF_FILE,&#8221;w&#8221;);      if (fp==NULL){          err(&#8220;fopen() error,file:%s!!!\n&#8221;,HTTP_CONF_FILE);          return FAILURE;      }      fprintf(fp,&#8221;ServerRoot \&#8221;%s\&#8221;\r\n&#8221;,HTTP_SERVER_ROOT);      fprintf(fp,&#8221;Listen %u\r\n&#8221;,http_setup-&#62;net.http_port);      fprintf(fp,&#8221;\r\n&#8221;); 首先是生命一个FILE类型的流文件指针，调用fopen打开文件并执行写的操作， 然后调用fprintf将配置文件按照Appweb规定的格式写入。]]></description>
		<wfw:commentRss>http://www.linuxqq.net/archives/100.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>文件I/O函数(fcntl)</title>
		<link>http://www.linuxqq.net/archives/98.html</link>
		<comments>http://www.linuxqq.net/archives/98.html#comments</comments>
		<pubDate>Sun, 14 Jun 2009 11:43:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C语言]]></category>
		<category><![CDATA[文件I/O函数(fcntl)]]></category>

		<guid isPermaLink="false">http://www.linuxqq.net/?p=98</guid>
		<description><![CDATA[fcntl函数：int fcntl(int filedes, int cmd, &#8230;/*int arg */); 返回：若成功则依赖于cmd，若出错为－1。 作用：可以改变已打开的文件的性质 下列三个命令有特定的返回值：F_DUPFD,F_GETFD以及F_GETOWN。第一个返回新的文件描述符，第二个返回相应标志，最后一个返回一个正的进程ID或负的进程组ID。 第三个参数总是一个整数，当然在作为记录锁用时，第三个参数则是指向一个结构的指针。 fcntl函数有五种功能： (1)复制一个现存的描述符(cmd=F_DUPFD) (2)获得/设置文件描述符标志(cmd=F_GETFD或F_SETFD) (3)获得/设置文件状态标志（cmd=F_GETFL或F_SETFL） (4)获得/设置异步I/O有权(cmd=F_GETOWN或F_SETOWN) (5)获得/设置记录锁(cmd=F_GETLK,F_SETLK或F_SETLKW) F_DUPFD：复制文件描述符filedes，新文件描述符作为函数值返回。它是尚未打开的各描述符中大于或等于第三个参数值中各值的最小值。新描述符与filedes共享同一文件表项。但是新描述符有它自己的一套文件描述符标志，其FD_CLOEXEC文件描述符标志被清除。 F_GETFD：对应于filedes的文件描述符标志作为函数值返回。当前只定义了一个文件描述符标志FD_CLOEXEC。 F_SETFD：对于filedes设置文件描述符标志。新标志值按第三个参数设置。 F_GETFL：对应于filedes的文件状态标志作为函数返回。在说明open函数时，已说明了文件状态标志。 F_SETFL：将文件状态标志设置为第三个参数的值(取整数值)，可以更改的几个标志：O_APPEND,O_NONBLOCK,O_SYNC和O_ASYNC。 F_GETOWN：取当前接受SIGIO和SIGURG信号的进程ID或进程组ID。 F_SETOWN：设置接受SIGIO和SIGURG信号的进程ID或进程组ID。正的arg指定一个进程ID，负的arg表示等于arg绝对值的一个进程组ID。 范例： #include #include #include #include int main(int argc, char **argv) { int fd; int var; if(argc!=2) { printf(&#8220;please input filename and one arg!\n&#8221;); exit(1); } if((var=fcntl(atoi(argv[1]),F_GETFL,0))==-1) { printf(&#8220;fcntl file error!\n&#8221;); [...]]]></description>
		<wfw:commentRss>http://www.linuxqq.net/archives/98.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux下的管道编程技术-dup函数和dup2函数</title>
		<link>http://www.linuxqq.net/archives/97.html</link>
		<comments>http://www.linuxqq.net/archives/97.html#comments</comments>
		<pubDate>Sun, 14 Jun 2009 09:25:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C语言]]></category>
		<category><![CDATA[Linux下的管道编程技术-dup函数和dup2函数]]></category>

		<guid isPermaLink="false">http://www.linuxqq.net/?p=97</guid>
		<description><![CDATA[       dup和dup2也是两个非常有用的调用，它们的作用都是用来复制一个文件的描述符。它们经常用来重定向进程的stdin、stdout和stderr。这两个函数的原型如下所示： #include int dup( int oldfd ); int dup2( int oldfd, int targetfd ) 利用函数dup，我们可以复制一个描述符。传给该函数一个既有的描述符，它就会返回一个新的描述符，这个新的描述符是传给它的描述符的拷贝。这意味着，这两个描述符共享同一个 数据结构 。例如，如果我们对一个文件描述符执行lseek操作，得到的第一个文件的位置和第二个是一样的。下面是用来说明dup函数使用方法的代码片段： int fd1, fd2; &#8230; fd2 = dup( fd1 ); 需要注意的是，我们可以在调用fork之前建立一个描述符，这与调用dup建立描述符的效果是一样的，子进程也同样会收到一个复制出来的描述符。 dup2函数跟dup函数相似，但dup2函数允许调用者规定一个有效描述符和目标描述符的id。dup2函数成功返回时，目标描述符（dup2函数的第 二个参数）将变成源描述符（dup2函数的第一个参数）的复制品，换句话说，两个文件描述符现在都指向同一个文件，并且是函数第一个参数指向的文件。下面 我们用一段代码加以说明：     int oldfd; oldfd = open(&#8220;app_log&#8221;, (O_RDWR &#124; O_CREATE), 0644 ); dup2( oldfd, 1 ); close( oldfd ); 本例中，我们打开了一个新文件，称为“app_log”，并收到一个文件描述符，该描述符叫做fd1。我们调用dup2函数，参数为oldfd和1，这会 导致用我们新打开的文件描述符替换掉由1代表的文件描述符（即stdout，因为标准输出文件的id为1）。任何写到stdout的东西，现在都将改为写 入名为“app_log”的文件中。需要注意的是，dup2函数在复制了oldfd之后，会立即将其关闭，但不会关掉新近打开的文件描述符，因为文件描述 符1现在也指向它。 下面我们介绍一个更加深入的示例代码。回忆一下本文前面讲的命令行管道，在那里，我们将ls –1命令的标准输出作为标准输入连接到wc [...]]]></description>
		<wfw:commentRss>http://www.linuxqq.net/archives/97.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C 指针和数组地址笔记</title>
		<link>http://www.linuxqq.net/archives/92.html</link>
		<comments>http://www.linuxqq.net/archives/92.html#comments</comments>
		<pubDate>Thu, 21 May 2009 03:44:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C语言]]></category>
		<category><![CDATA[C 指针和数组地址笔记]]></category>

		<guid isPermaLink="false">http://www.linuxqq.net/?p=92</guid>
		<description><![CDATA[#include&#60;stdio.h&#62;  int main()     {       int a[5]={1,2,3,4,5];       int *ptr=(int *)(&#38;a+1)       printf(&#8220;%d,%d\n&#8221;,*(a+1),*(prt-1); } ~ 一定很绕吧，我也糊涂了 琢磨了一早上 C语言里面规定a是数组的首地址是代表整个数组 但&#38;a+1不等价于&#38;a[0]+1, &#38;a是首地址 &#38;a+1就是取a 的地址在加1直接指向下一个内存区域  也就是指向到了ptr[0]的地址是地址上面    然后在把&#38;a+1 的地址复制给ptr指针 这时候ptr变指向了a[5] ,ptr-1=a[4]          最后结果2，5]]></description>
		<wfw:commentRss>http://www.linuxqq.net/archives/92.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C语言笔记  指针类型转换</title>
		<link>http://www.linuxqq.net/archives/86.html</link>
		<comments>http://www.linuxqq.net/archives/86.html#comments</comments>
		<pubDate>Wed, 15 Apr 2009 03:08:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C语言]]></category>
		<category><![CDATA[指针类型转换]]></category>

		<guid isPermaLink="false">http://www.linuxqq.net/?p=86</guid>
		<description><![CDATA[我们初始化一个指针或给一个指针赋值时，赋值号的左边是一个指针，赋 值号的右边是一个指针表达式。在我们前面所举的例子中，绝大多数情况下，指 针的类型和指针表达式的类型是一样的，指针所指向的类型和指针表达式所指向 的类型是一样的。 例十四： 1。 float f=12.3; 2。 float *fptr=&#38;f; 3。 int *p; 在上面的例子中，假如我们想让指针p指向实数f，应该怎么搞？是用下面的 语句吗？ p=&#38;f; 不对。因为指针p的类型是int*，它指向的类型是int。表达式&#38;f的结果是一 个指针，指针的类型是float*,它指向的类型是float。两者不一致，直接赋值的 方法是不行的。至少在我的MSVC++6.0上，对指针的赋值语句要求赋值号两边的类 型一致，所指向的类型也一致，其它的编译器上我没试过，大家可以试试。为了 实现我们的目的，需要进行“强制类型转换”： p=(int*)&#38;f; 如果有一个指针p，我们需要把它的类型和所指向的类型改为TYEP*和TYPE， 那么语法格式是： (TYPE*)p； 这样强制类型转换的结果是一个新指针，该新指针的类型是TYPE*，它指向的 类型是TYPE，它指向的地址就是原指针指向的地址。而原来的指针p的一切属性都 没有被修改。一个函数如果使用了指针作为形参，那么在函数调用语句的实参和形参的结 合过程中，也会发生指针类型的转换。 例十五： void fun(char*); int a=125,b; fun((char*)&#38;a); &#8230; &#8230; void fun(char*s) { char c; c=*(s+3);*(s+3)=*(s+0);*(s+0)=c; c=*(s+2);*(s+2)=*(s+1);*(s+1)=c; } } 注意这是一个32位程序，故int类型占了四个字节，char类型占一个字节。函 数fun的作用是把一个整数的四个字节的顺序来个颠倒。注意到了吗？在函数调用 语句中，实参&#38;a的结果是一个指针，它的类型是int *，它指向的类型是int。形 参这个指针的类型是char*，它指向的类型是char。这样，在实参和形参的结合过 程中，我们必须进行一次从int*类型到char*类型的转换。结合这个例子，我们可 以这样来想象编译器进行转换的过程：编译器先构造一个临时指针 char*temp， [...]]]></description>
		<wfw:commentRss>http://www.linuxqq.net/archives/86.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>字节对齐</title>
		<link>http://www.linuxqq.net/archives/85.html</link>
		<comments>http://www.linuxqq.net/archives/85.html#comments</comments>
		<pubDate>Tue, 14 Apr 2009 16:47:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C语言]]></category>
		<category><![CDATA[C字节对齐]]></category>

		<guid isPermaLink="false">http://www.linuxqq.net/?p=85</guid>
		<description><![CDATA[VC字节对齐全攻略 VC中下面几个结构体大小分别是多少呢 struct MyStruct {     double m4;     char m1;     int  m3； }; struct MyStruct {     char m1;     double m4;     int m3; }; #pragma pack(push)//保存对齐状态 #pragma pack(16)  //设置为16字节对齐 struct test {    char m1;    int m3;     double m4;     }; #pragma pack(pop)//恢复对齐状态 如果你的答案不是16，24和16，相信下面的内容对你很有帮助。 1、 sizeof应用在结构上的情况 请看下面的结构： struct MyStruct { [...]]]></description>
		<wfw:commentRss>http://www.linuxqq.net/archives/85.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>文件描述符</title>
		<link>http://www.linuxqq.net/archives/84.html</link>
		<comments>http://www.linuxqq.net/archives/84.html#comments</comments>
		<pubDate>Tue, 31 Mar 2009 14:09:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C语言]]></category>
		<category><![CDATA[文件描述符]]></category>

		<guid isPermaLink="false">http://www.linuxqq.net/?p=84</guid>
		<description><![CDATA[文件描述符就是一个表示 内核可以根据这个文件描述符 操作你需要操作的文件！用文件描述符可以方便的操作文件。 文件描述符是   Unix   系统内核中用于表示特定进程打开的特定文件的方式，通常是一个   int   类型的变量。当进程打开一个文件的时候，内核生成一个文件描述符，传递给调用进程；当进程需要操作这个文件的时候只要向内核传递这个描述符，内核就可以找到对应的文件执行响应操作]]></description>
		<wfw:commentRss>http://www.linuxqq.net/archives/84.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

