<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[问system返回值]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Thu, 03 Apr 2008 11:00:37 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	#include &lt;stdio.h&gt;;<br/>#include &lt;stdlib.h&gt;;<br/>#include &lt;sys/wait.h&gt;;<br/>#include &lt;sys/types.h&gt;;<br/><br/>int main()<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pid_t status ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errno = 0 ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status = system(&quot;cp hello.c hello.c.bak&quot;) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (status == -1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;system error!&quot;) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (WIFEXITED(status)){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;cp exit normal![%d]&#92;n&quot;, errno) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;exit staus = [%X]&#92;n&quot;, WEXITSTATUS(status)) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;cp exit illegal![%d]&#92;n&quot;, errno) ;<br/>}<br/><br/>[/code]<br/><br/>测试了一把.结果如下<br/>如果hello.c存在,cp也成功将hello.c拷贝到了hello.c.bak则打印<br/>cp exit normal![0]<br/>exit status = [0]<br/>如果hello.c不存在,则打印<br/>cp exit normal![0]<br/>exit status = [1]<br/><br/>我的问题是.<br/>1.在何种情况下会打印cp exit illegal!<br/>2.如果是exit normal,那么exit status的值是否和system调用执行的进程紧密相关(如本例中的cp)<br/>3.如果上个问题的回答是肯定的,那我该如何得到关于cp的各种退出状态.cp的手册页里好象没有相关说明. <br/><br/>老调重弹－－问system返回值<br/><br/>第二个问题我测试了一下,回答是肯定的.<br/>exit status等于被调用程序的用exit(n)或者return n<br/>给出的值.<br/><br/>第一个问题还是不知道.<br/>我在被调用程序运行过程中将他kill掉.<br/>程序还是打印exit normal!可是status取到的值明显是不对的.<br/>faint <br/><br/>老调重弹－－问system返回值<br/><br/>UP <br/><br/>老调重弹－－问system返回值<br/><br/>WIFEXITED(status)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returns true if the child terminated normally, that is, by call-<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ing exit() or _exit(), or by returning from main(). <br/><br/>老调重弹－－问system返回值<br/><br/>楼上的兄弟谢谢了.<br/>我不明白的正是这个问题.<br/><br/>按照上面的描述,我把被调用的进程kill掉.按照我的理解<br/>WIFEXITED(status)不应该返回真才对. <br/><br/>老调重弹－－问system返回值<br/><br/>没有人知道吗? <br/><br/>老调重弹－－问system返回值<br/><br/>man里面说--&gt;<br/><br/>不管你有没有hello.c文件。你的system都会正常结束，也就都不会返回-1，区别只是cp动作的结束状态不同。 <br/><br/>老调重弹－－问system返回值<br/><br/>--&gt;<br/><br/>是的,这个我知道,<br/>我现在想知道的是什么情况下<br/>WIFEXITED(status)不会返回真.<br/>我不明白为什么我把被调用的进程中间KILL掉这个宏的值还是真.<br/>但是WEXITSTATUS(status)的值明显不是被调用进程的返回值. <br/><br/>老调重弹－－问system返回值<br/><br/>你怎么kill掉的呢？cp之间你kill它？^_^，我也不太明白。 <br/><br/>老调重弹－－问system返回值<br/><br/>[code]<br/><br/>#include &lt;stdio.h&gt;; <br/>#include &lt;stdlib.h&gt;; <br/>#include &lt;sys/wait.h&gt;; <br/>#include &lt;sys/types.h&gt;; <br/><br/>int main() <br/>{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp; pid_t status ; <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp; errno = 0 ; <br/>&nbsp;&nbsp; status = system(&quot;./hi&quot;) ; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp; if (status == -1) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;system error!&quot;) ; <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp; if (WIFEXITED(status)){ <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;process exit normal!&#91;%d&#93;&#92;n&quot;, errno) ; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;exit staus = &#91;%X&#93;&#92;n&quot;, WEXITSTATUS(status)) ; <br/>&nbsp;&nbsp; }else <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;process exit illegal!&#91;%d&#93;&#92;n&quot;, errno) ; <br/>} <br/><br/>[/code]<br/><br/>[code]<br/>int main()<br/>{<br/>&nbsp;&nbsp; printf(&quot;HI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&#92;n&quot;) ;<br/>&nbsp;&nbsp; sleep(20) ;<br/>&nbsp;&nbsp; return 4 ;<br/>}<br/><br/><br/>[/code]<br/><br/>这样就可以做到在运行中把进程&quot;hi&quot;kill掉了.<br/>如过是正常退出WEXITSTATUS(status)的值是4<br/>如果是KILL掉<br/>WIFEXITED(status)J还是真,但是WEXITSTATUS(status)的值却是86<br/>这个86真让人faint. <br/><br/>
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 问system返回值]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>