<?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; dup函数</title>
	<atom:link href="http://www.linuxqq.net/archives/tag/dup%e5%87%bd%e6%95%b0/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>
	</channel>
</rss>

