<?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>奶牛博客</title>
	<atom:link href="http://www.nenew.net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.nenew.net</link>
	<description>关注操作系统和互联网的IT技术博客</description>
	<lastBuildDate>Wed, 16 May 2012 14:35:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>linux c编程open() read() write()函数的使用方法及实例</title>
		<link>http://www.nenew.net/linux-c-program-open-read-write-example.html</link>
		<comments>http://www.nenew.net/linux-c-program-open-read-write-example.html#comments</comments>
		<pubDate>Wed, 16 May 2012 14:35:35 +0000</pubDate>
		<dc:creator>奶牛</dc:creator>
				<category><![CDATA[C Program]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Linux C]]></category>
		<category><![CDATA[Linux c编程]]></category>
		<category><![CDATA[文件备份程序]]></category>

		<guid isPermaLink="false">http://www.nenew.net/?p=2865</guid>
		<description><![CDATA[&#160;
今天把文件IO操作的一些东东整理下.基本的,对于锁机制下次再整理.常用的文件IO函数有标题的三个open() read() write() .首先打开一个文件使用open()函数,然后可以获取到一个文件描述符,这个... ]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>今天把文件IO操作的一些东东整理下.基本的,对于锁机制下次再整理.常用的文件IO函数有标题的三个open() read() write() .首先打开一个文件使用open()函数,然后可以获取到一个文件描述符,这个就是程序中调用这个打开文件的一个链接,当函数要求到文件描述符fd的时候就把这个返回值给函数即可.read跟write都差不多,格式:read(文件描述符,参数,权限) write(文件描述符,参数,权限),返回值是读取或写入的字符数.其中的权限可以省略,文件描述符就是open()函数的返回值,而参数呢有O_RDONLY(只读) O_WRONLY(只写) O_RDWR(读写) O_CREAT(若不存在则新建) O_TRUNC(若不为空则清空文件)等.对函数想有更多了解可以察看linux下c编程的函数手册.</p>
<p>有些程序还是得自己动手写一下,自己不写就很难知道问题错在哪里,不知道自己是不是真的可以写出来.</p>
<p>写个小例子:文件备份程序</p>
<p>功能:输入一个&quot;文件名&quot;,将生成&quot;文件名.backup&quot;的备份文件.若输入量超过两个或者无输入量,报错,若文件不存在或无权限,报错.成功返回提示.</p>
<pre>
<ol class="dp-xml">
<li class="alt"><span><span>#include&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">stdio.h</span><span class="tag">&gt;</span><span>&nbsp;</span></span></li>
<li><span>#include&nbsp;<span class="tag">&lt;</span><span class="tag-name">stdlib.h</span><span class="tag">&gt;</span><span>&nbsp;</span></span></li>
<li class="alt"><span>#include&nbsp;<span class="tag">&lt;</span><span class="tag-name">string.h</span><span class="tag">&gt;</span><span>&nbsp;</span></span></li>
<li><span>#include&nbsp;<span class="tag">&lt;</span><span class="tag-name">fcntl.h</span><span class="tag">&gt;</span><span>&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;</span></li>
<li><span>int&nbsp;main(int&nbsp;argc,char&nbsp;*args[])&nbsp;{&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;buff[1024];&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;fd1,fd2,i;&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;<span class="attribute">baksize</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">sizeof</span><span>(args[1])+7;&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;bakfile[baksize];&nbsp;</span></li>
<li class="alt"><span>//&nbsp;input&nbsp;one&nbsp;file&nbsp;only&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;if(argc&nbsp;!=&nbsp;2){&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Input&nbsp;one&nbsp;file&nbsp;a&nbsp;time!\n&quot;);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li><span>//<span class="attribute">bakfile</span><span>=</span><span class="attribute-value">&quot;XXX.backup&quot;</span><span>设置备份文件名称&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(bakfile,args[1]);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;strcat(bakfile,&quot;.backup&quot;);&nbsp;</span></li>
<li class="alt"><span>//open()&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">fd1</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">open</span><span>(args[1],O_RDONLY,0644);&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">fd2</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">open</span><span>(bakfile,O_RDWR|O_CREAT|O_TRUNC);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;if((fd1&nbsp;<span class="tag">&lt;</span><span>&nbsp;</span><span class="tag-name">0</span><span>)||(fd2&nbsp;</span><span class="tag">&lt;</span><span>&nbsp;</span><span class="tag-name">0</span><span>)){&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Open&nbsp;Error!Check&nbsp;if&nbsp;the&nbsp;file&nbsp;is&nbsp;exist&nbsp;and&nbsp;you&nbsp;have&nbsp;the&nbsp;permission!\n&quot;);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
<li><span>//read&nbsp;from&nbsp;fd1&nbsp;and&nbsp;write&nbsp;buff&nbsp;to&nbsp;fd2&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;while((<span class="attribute">i</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">read</span><span>(fd1,buff,sizeof(buff)))&nbsp;</span><span class="tag">&gt;</span><span>&nbsp;0)&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;write(fd2,buff,i);//这里需要用读取到的字符数,否则会出错,因为buff数组有可能未被全覆盖&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;close(fd1);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;close(fd2);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;Backup&nbsp;done!\n&quot;);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;exit(0);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
<li class="alt"><span>}&nbsp;</span></li>
</ol>
</pre>
<p>&nbsp;</p>
<div style="margin-top: 15px; font-style: normal">
<p><br/><strong>本文链接地址:</strong> <a href="http://www.nenew.net/linux-c-program-open-read-write-example.html">linux c编程open() read() write()函数的使用方法及实例</a></p>
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://www.nenew.net/">奶牛博客</a></p>
<p><embed width="565" height="150" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://img.uu1001.cn/wrappler_swf2/2012-05-12/48/be/30100166_47c2d4d876007814d2e9a834f40875e6_565x150.swf"></embed></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.nenew.net/linux-c-program-open-read-write-example.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux c编程main函数的参数以及带参实例</title>
		<link>http://www.nenew.net/linux-c-program-main-parameter-example.html</link>
		<comments>http://www.nenew.net/linux-c-program-main-parameter-example.html#comments</comments>
		<pubDate>Tue, 15 May 2012 05:31:01 +0000</pubDate>
		<dc:creator>奶牛</dc:creator>
				<category><![CDATA[C Program]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Linux C]]></category>
		<category><![CDATA[Linux c编程]]></category>
		<category><![CDATA[main函数参数]]></category>

		<guid isPermaLink="false">http://www.nenew.net/?p=2862</guid>
		<description><![CDATA[&#160;
写c程序,让用户一次又一次的输入参数输入回车是很不友好也很不明智的方法.所以为了更好的用户体验,参数应该可以在执行程序的时候直接就可以把参数都设定完成.好吧,说下main函数的参... ]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>写c程序,让用户一次又一次的输入参数输入回车是很不友好也很不明智的方法.所以为了更好的用户体验,参数应该可以在执行程序的时候直接就可以把参数都设定完成.好吧,说下main函数的参数.</p>
<p>一般我们就给main两个参数,写成如下形式:</p>
<p>main (int argc,char *argv[])</p>
<p>其中argc是统计的参数个数,默认为1.因为执行文件的文件名就是一个参数.</p>
<p>理所当然,argv[0]也是默认就有的,内容就是文件名.</p>
<p>当然,这个argc跟argv是可以更换为其它名称的,只要数据类型对就ok的.</p>
<p>解释这些估计就了解了个差不多了.然后直接看个实例就应该可以理解了.</p>
<p>实例:调用wget来下载一个文件.要求可以直接输入下载地址,如果输入两个参数则报错,提示使用方法:</p>
<pre>
<ol class="dp-c">
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;stdio.h&gt;</span><span>&nbsp;</span></span></li>
<li><span><span class="preprocessor">#include&nbsp;&lt;stdlib.h&gt;</span><span>&nbsp;</span></span></li>
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;unistd.h&gt;</span><span>&nbsp;</span></span></li>
<li><span>&nbsp;</span></li>
<li class="alt"><span><span class="keyword">int</span><span>&nbsp;main&nbsp;(</span><span class="keyword">int</span><span>&nbsp;argc,</span><span class="keyword">char</span><span>&nbsp;*args[]){&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(argc&nbsp;&gt;&nbsp;2){&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;Error&nbsp;input!\nUsages:wget&nbsp;[http/ftp&nbsp;url]\n&quot;</span><span>);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">char</span><span>&nbsp;*url&nbsp;=&nbsp;args[1];&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;The&nbsp;URL&nbsp;is:%s\n&quot;</span><span>,url);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;execlp(<span class="string">&quot;wget&quot;</span><span>,</span><span class="string">&quot;wget&quot;</span><span>,</span><span class="string">&quot;-c&quot;</span><span>,url,NULL);&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;exit(0);&nbsp;</span></li>
<li><span>}&nbsp;</span></li>
</ol>
</pre>
<p>&nbsp;</p>
<div style="margin-top: 15px; font-style: normal">
<p><br/><strong>本文链接地址:</strong> <a href="http://www.nenew.net/linux-c-program-main-parameter-example.html">linux c编程main函数的参数以及带参实例</a></p>
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://www.nenew.net/">奶牛博客</a></p>
<p><embed width="565" height="150" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://img.uu1001.cn/wrappler_swf2/2012-05-12/48/be/30100166_47c2d4d876007814d2e9a834f40875e6_565x150.swf"></embed></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.nenew.net/linux-c-program-main-parameter-example.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>linux下daemon守护进程的编写实例</title>
		<link>http://www.nenew.net/linux-c-program-daemon-example.html</link>
		<comments>http://www.nenew.net/linux-c-program-daemon-example.html#comments</comments>
		<pubDate>Mon, 14 May 2012 15:21:13 +0000</pubDate>
		<dc:creator>奶牛</dc:creator>
				<category><![CDATA[C Program]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[daemon]]></category>
		<category><![CDATA[daemon守护进程]]></category>
		<category><![CDATA[daemon守护进程编写]]></category>
		<category><![CDATA[Linux C]]></category>
		<category><![CDATA[Linux c编程]]></category>

		<guid isPermaLink="false">http://www.nenew.net/?p=2860</guid>
		<description><![CDATA[&#160;
对于daemon守护进程,可能大多数朋友了解不多.对于守护进程,也就是说它由init直接来管理.举个例子:当我们打开一个terminal,输入gedit,然后编辑一些字,不要关闭gedit,这时候回到终端terminal,按ctr... ]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>对于daemon守护进程,可能大多数朋友了解不多.对于守护进程,也就是说它由init直接来管理.举个例子:当我们打开一个terminal,输入gedit,然后编辑一些字,不要关闭gedit,这时候回到终端terminal,按ctrl+c,这时候你看到了什么,gedit关闭了对不对.因为gedit可以看成是一个进程哇,而且这时候终端并没有显示$或者#,结束的肯定是gedit的进程哇.如果我们想让这些进程在我们的后台运行,不受到terminal的限制,就需要来写一个daemon守护进程了.</p>
<p>这里说一下具体的方法:</p>
<p>1.fork()一个子进程</p>
<p>2.把父进程exit(0)退出,这时候子进程成为了一个孤立的进程,由init接管</p>
<p>3.setsid(),脱离控制终端，登录会话和进程组</p>
<p>介绍一下Linux中的进程与控制终端，登录会话和进程组之间的关系：进程属于一个进程组，进程组号（GID）就是进程组长的进程号 （PID）。登录会话可以包含多个进程组。这些进程组共享一个控制终端。这个控制终端通常是创建进程的登录终端。  控制终端，登录会话和进程组通常是从父进程继承下来的。我们的目的就是要摆脱它们，使之不受它们的影响。方法是在第1点的基础上，调用setsid()使 进程成为会话组长.当进程是会话组长时setsid()调用失败。但第一点已经保证进程不是会话组长。setsid()调用成功后，进程成为新的会话组长和新的进程组长，并与原来的登录会话和进程组脱离。由于会话过程对控制终端的独占性，进程同时与控制终端脱离。</p>
<p>4.close(i) ,关闭文件描述符</p>
<p>进程从创建它的父进程那里继承了打开的文件描述符。如不关闭，将会浪费系统资源，造成进程所在的文件系统无法卸下以及引起无法预料的错误。</p>
<p>5.umask(0);重置文件权限掩码</p>
<p>6.更改当前的工作目录chdir(),这个可选</p>
<p>ok,这样子一个daemon就差不多了.</p>
<p>下面写了一个编程的实例,用wget 后台执行一个下载,然后把下载信息记录到info.txt文件中以便察看下载结果.</p>
<p>&nbsp;</p>
<pre>
<ol class="dp-c">
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;stdio.h&gt;</span><span>&nbsp;</span></span></li>
<li><span><span class="preprocessor">#include&nbsp;&lt;stdlib.h&gt;</span><span>&nbsp;</span></span></li>
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;string.h&gt;</span><span>&nbsp;</span></span></li>
<li><span><span class="preprocessor">#include&nbsp;&lt;fcntl.h&gt;</span><span>&nbsp;</span></span></li>
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;sys/types.h&gt;</span><span>&nbsp;</span></span></li>
<li><span><span class="preprocessor">#include&nbsp;&lt;sys/wait.h&gt;</span><span>&nbsp;</span></span></li>
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;unistd.h&gt;</span><span>&nbsp;</span></span></li>
<li><span>&nbsp;</span></li>
<li class="alt"><span><span class="keyword">int</span><span>&nbsp;main(){&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;pid_t&nbsp;daemon;&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;i,fd;&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;daemon&nbsp;=&nbsp;fork();&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(daemon&nbsp;&lt;&nbsp;0){&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;Fork&nbsp;Error!&quot;</span><span>);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>&nbsp;(daemon&nbsp;&gt;&nbsp;0&nbsp;)&nbsp;{&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;Father&nbsp;process&nbsp;exited!&quot;</span><span>);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(0);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;setsid();&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;umask(0);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>&nbsp;(i&nbsp;=&nbsp;0;i&nbsp;&lt;&nbsp;getdtablesize();i++){&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(i);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;system(<span class="string">&quot;wget&nbsp;-c&nbsp;http://cdimage.ubuntu.com/daily-live/current/quantal-desktop-amd64.iso&nbsp;&gt;info.txt&nbsp;2&gt;&amp;1&quot;</span><span>);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;exit(0);&nbsp;</span></li>
<li class="alt"><span>&nbsp;</span></li>
<li><span>}&nbsp;</span></li>
</ol>
</pre>
<p>&nbsp;</p>
<div style="margin-top: 15px; font-style: normal">
<p><br/><strong>本文链接地址:</strong> <a href="http://www.nenew.net/linux-c-program-daemon-example.html">linux下daemon守护进程的编写实例</a></p>
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://www.nenew.net/">奶牛博客</a></p>
<p><embed width="565" height="150" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://img.uu1001.cn/wrappler_swf2/2012-05-12/48/be/30100166_47c2d4d876007814d2e9a834f40875e6_565x150.swf"></embed></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.nenew.net/linux-c-program-daemon-example.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>linux c编程信号处理的一些实例signal sigaction</title>
		<link>http://www.nenew.net/linux-c-signal-sigaction-examples.html</link>
		<comments>http://www.nenew.net/linux-c-signal-sigaction-examples.html#comments</comments>
		<pubDate>Sat, 12 May 2012 13:32:33 +0000</pubDate>
		<dc:creator>奶牛</dc:creator>
				<category><![CDATA[C Program]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Linux C]]></category>
		<category><![CDATA[Linux c编程]]></category>

		<guid isPermaLink="false">http://www.nenew.net/?p=2858</guid>
		<description><![CDATA[&#160;
&#160;刚接触linux下的c编程,记录一下吧.对于信号,就是我们经常用的那个kill,kill可以发送很多信号,当然,我们也可以通过程序来实现,我们甚至可以来定义对于不同的信号的处理,比如ctrl+c可能... ]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>&nbsp;刚接触linux下的c编程,记录一下吧.对于信号,就是我们经常用的那个kill,kill可以发送很多信号,当然,我们也可以通过程序来实现,我们甚至可以来定义对于不同的信号的处理,比如ctrl+c可能并不能退出我们的程序,因为我们可以监视ctrl+c发送的SIGINT信号,并且用我们自己的功能来进行处理.PS:发现写代码也是个需要手感的事儿,意识到该多看看vim的配置鸟~~~自动不全一定要强大才行哇~~~</p>
<p>先把课本上的两个小实例放上来,记录下:</p>
<p>1.signal()的使用</p>
<p>捕捉ctrl+c发送的SIGINT与ctrl+\发送的SIGQUIT信号</p>
<pre>
<ol class="dp-cpp">
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;stdio.h&gt;</span><span>&nbsp;</span></span></li>
<li><span><span class="preprocessor">#include&nbsp;&lt;stdlib.h&gt;</span><span>&nbsp;</span></span></li>
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;signal.h&gt;</span><span>&nbsp;</span></span></li>
<li><span>&nbsp;</span></li>
<li class="alt"><span><span class="keyword">void</span><span>&nbsp;my_func(</span><span class="datatypes">int</span><span>&nbsp;sign_no)&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(sign_no&nbsp;==&nbsp;SIGINT)&nbsp;{&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;I&nbsp;have&nbsp;get&nbsp;SIGINT\n&quot;</span><span>);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>&nbsp;(sign_no&nbsp;==&nbsp;SIGQUIT)&nbsp;{&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;I&nbsp;have&nbsp;get&nbsp;SIGQUIT\n&quot;</span><span>);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li class="alt"><span>}&nbsp;</span></li>
<li><span>&nbsp;</span></li>
<li class="alt"><span><span class="datatypes">int</span><span>&nbsp;main()&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;waiting&nbsp;for&nbsp;signal&nbsp;SIGINT&nbsp;or&nbsp;SIGQUIT&nbsp;...&nbsp;\n&quot;</span><span>);&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;signal(SIGINT,&nbsp;my_func);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;signal(SIGQUIT,&nbsp;my_func);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;pause();&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;exit(0);&nbsp;</span></li>
<li class="alt"><span>}&nbsp;</span></li>
</ol>
</pre>
<p>2.sigaction()的使用&lt;&#8212;感觉是signal的一个变种</p>
<p>同样是捕捉ctrl+c发送的SIGINT与ctrl+\发送的SIGQUIT信号</p>
<pre>
<ol class="dp-cpp">
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;stdio.h&gt;</span><span>&nbsp;</span></span></li>
<li><span><span class="preprocessor">#include&nbsp;&lt;stdlib.h&gt;</span><span>&nbsp;</span></span></li>
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;signal.h&gt;</span><span>&nbsp;</span></span></li>
<li><span>&nbsp;</span></li>
<li class="alt"><span><span class="keyword">void</span><span>&nbsp;my_func(</span><span class="datatypes">int</span><span>&nbsp;sign_no)&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(sign_no&nbsp;==&nbsp;SIGINT)&nbsp;{&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;I&nbsp;have&nbsp;get&nbsp;SIGINT\n&quot;</span><span>);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>&nbsp;(sign_no&nbsp;==&nbsp;SIGQUIT)&nbsp;{&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;I&nbsp;have&nbsp;get&nbsp;SIGQUIT\n&quot;</span><span>);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li class="alt"><span>}&nbsp;</span></li>
<li><span>&nbsp;</span></li>
<li class="alt"><span><span class="datatypes">int</span><span>&nbsp;main()&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">struct</span><span>&nbsp;sigaction&nbsp;action;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;waiting&nbsp;for&nbsp;signal&nbsp;SIGINT&nbsp;or&nbsp;SIGQUIT&nbsp;...&nbsp;\n&quot;</span><span>);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;action.sa_handler&nbsp;=&nbsp;my_func;&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sigemptyset(&amp;action.sa_mask);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;action.sa_flags&nbsp;=&nbsp;0;&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;sigaction(SIGINT,&nbsp;&amp;action,&nbsp;0);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;sigaction(SIGQUIT,&nbsp;&amp;action,&nbsp;0);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;pause();&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;exit(0);&nbsp;</span></li>
<li class="alt"><span>}&nbsp;</span></li>
</ol>
</pre>
<p>3.信号集</p>
<p>默认对信号进行状态阻塞,此时输入任何信号都不执行,ctrl+c 与ctrl+\都不会被执行,但是当输入任意字符并回车后,原来的信号就会被立即执行.可以先输入任意字符解除SIG_BLOCK状态,然后执行SIG_INT与SIG_QUIT,SIG_INT调用我们自己的函数my_func,所以程序会一直不退出,但是SIG_QUIT仍旧是系统的函数,因此可以正常表达</p>
<pre>
<ol class="dp-cpp">
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;stdio.h&gt;</span><span>&nbsp;</span></span></li>
<li><span><span class="preprocessor">#include&nbsp;&lt;stdlib.h&gt;</span><span>&nbsp;</span></span></li>
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;sys/types.h&gt;</span><span>&nbsp;</span></span></li>
<li><span><span class="preprocessor">#include&nbsp;&lt;unistd.h&gt;</span><span>&nbsp;</span></span></li>
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;signal.h&gt;</span><span>&nbsp;</span></span></li>
<li><span>&nbsp;</span></li>
<li class="alt"><span><span class="keyword">void</span><span>&nbsp;my_func(</span><span class="datatypes">int</span><span>&nbsp;signum)&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;If&nbsp;you&nbsp;want&nbsp;to&nbsp;quit&nbsp;,please&nbsp;try&nbsp;SIGQUIT\n&quot;</span><span>);&nbsp;</span></span></li>
<li class="alt"><span>}&nbsp;</span></li>
<li><span>&nbsp;</span></li>
<li class="alt"><span><span class="datatypes">int</span><span>&nbsp;main()&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;sigset_t&nbsp;set,&nbsp;pendset;&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">struct</span><span>&nbsp;sigaction&nbsp;action1,&nbsp;action2;&nbsp;</span></span></li>
<li><span>&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(sigemptyset(&amp;set)&nbsp;&lt;&nbsp;0)&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(<span class="string">&quot;sigemptyset&quot;</span><span>);&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li class="alt"><span>&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(sigaddset(&amp;set,&nbsp;SIGQUIT)&nbsp;&lt;&nbsp;0)&nbsp;{&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(<span class="string">&quot;sigaddset&quot;</span><span>);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li><span>&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(sigaddset(&amp;set,&nbsp;SIGINT)&nbsp;&lt;&nbsp;0)&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(<span class="string">&quot;sigaddset&quot;</span><span>);&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li class="alt"><span>&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(sigismember(&amp;set,&nbsp;SIGINT))&nbsp;{&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sigemptyset(&amp;action1.sa_mask);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;action1.sa_handler&nbsp;=&nbsp;my_func;&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;action1.sa_flags&nbsp;=&nbsp;0;&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sigaction(SIGINT,&nbsp;&amp;action1,&nbsp;0);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li><span>&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(sigismember(&amp;set,&nbsp;SIGQUIT))&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sigemptyset(&amp;action2.sa_mask);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;action2.sa_handler&nbsp;=&nbsp;SIG_DFL;&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;action2.sa_flags&nbsp;=&nbsp;0;&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sigaction(SIGQUIT,&nbsp;&amp;action2,&nbsp;0);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li class="alt"><span>&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(sigprocmask(SIG_BLOCK,&nbsp;&amp;set,&nbsp;NULL)&nbsp;&lt;&nbsp;0)&nbsp;{&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(<span class="string">&quot;sigprocmask&quot;</span><span>);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">else</span><span>&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;Signal&nbsp;set&nbsp;was&nbsp;blocked,Press&nbsp;any&nbsp;key!&quot;</span><span>);&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getchar();&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(sigprocmask(SIG_UNBLOCK,&nbsp;&amp;set,&nbsp;NULL)&nbsp;&lt;&nbsp;0)&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror(<span class="string">&quot;sigprocmask&quot;</span><span>);&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">else</span><span>&nbsp;{&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;Signal&nbsp;set&nbsp;is&nbsp;unblock&nbsp;state\n&quot;</span><span>);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">while</span><span>&nbsp;(1)&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;exit(0);&nbsp;</span></li>
<li><span>}&nbsp;</span></li>
</ol>
</pre>
<p>&nbsp;</p>
<div style="margin-top: 15px; font-style: normal">
<p><br/><strong>本文链接地址:</strong> <a href="http://www.nenew.net/linux-c-signal-sigaction-examples.html">linux c编程信号处理的一些实例signal sigaction</a></p>
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://www.nenew.net/">奶牛博客</a></p>
<p><embed width="565" height="150" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://img.uu1001.cn/wrappler_swf2/2012-05-12/48/be/30100166_47c2d4d876007814d2e9a834f40875e6_565x150.swf"></embed></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.nenew.net/linux-c-signal-sigaction-examples.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Linux C编程&#8212;fork子程序以及fifo有名管道的使用</title>
		<link>http://www.nenew.net/linux-c-program-fork-fifo-usage.html</link>
		<comments>http://www.nenew.net/linux-c-program-fork-fifo-usage.html#comments</comments>
		<pubDate>Sat, 12 May 2012 09:35:06 +0000</pubDate>
		<dc:creator>奶牛</dc:creator>
				<category><![CDATA[C Program]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[fifo]]></category>
		<category><![CDATA[fork]]></category>
		<category><![CDATA[Linux C]]></category>
		<category><![CDATA[Linux c编程]]></category>

		<guid isPermaLink="false">http://www.nenew.net/?p=2853</guid>
		<description><![CDATA[&#160;
写一个程序,创建一个fifo有名管道,然后利用程序与子程序完成程序间的信息传输实例.
功能：输入什么，输出什么
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 输入q或者Q程序退出
调用fif... ]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>写一个程序,创建一个fifo有名管道,然后利用程序与子程序完成程序间的信息传输实例.<!--[if gte mso 9]><xml><w:WordDocument><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:DocumentKind>DocumentNotSpecified</w:DocumentKind><w:DrawingGridVerticalSpacing>7.8</w:DrawingGridVerticalSpacing><w:View>Normal</w:View><w:Compatibility></w:Compatibility><w:Zoom>0</w:Zoom></w:WordDocument></xml><![endif]--></p>
<p>功能：输入什么，输出什么</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输入q或者Q程序退出</p>
<p>调用fifo文件：/tmp/fifo</p>
<pre>
<ol class="dp-c">
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;stdio.h&gt;</span><span>&nbsp;</span></span></li>
<li><span><span class="preprocessor">#include&nbsp;&lt;stdlib.h&gt;</span><span>&nbsp;</span></span></li>
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;unistd.h&gt;</span><span>&nbsp;</span></span></li>
<li><span><span class="preprocessor">#include&nbsp;&lt;sys/types.h&gt;</span><span>&nbsp;</span></span></li>
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;sys/stat.h&gt;</span><span>&nbsp;</span></span></li>
<li><span><span class="preprocessor">#include&nbsp;&lt;errno.h&gt;</span><span>&nbsp;</span></span></li>
<li class="alt"><span><span class="preprocessor">#include&nbsp;&lt;fcntl.h&gt;</span><span>&nbsp;</span></span></li>
<li><span><span class="preprocessor">#include&nbsp;&lt;limits.h&gt;</span><span>&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;</span></li>
<li><span><span class="preprocessor">#define&nbsp;FIFO_FILE&nbsp;&quot;/tmp/fifo&quot;</span><span>&nbsp;</span></span></li>
<li class="alt"><span><span class="preprocessor">#define&nbsp;BUFFER_SIZE&nbsp;PIPE_BUF</span><span>&nbsp;</span></span></li>
<li><span>&nbsp;</span></li>
<li class="alt"><span><span class="keyword">int</span><span>&nbsp;main(</span><span class="keyword">void</span><span>)&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">char</span><span>&nbsp;buff[BUFFER_SIZE];&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(access(FIFO_FILE,&nbsp;F_OK)&nbsp;==&nbsp;-1)&nbsp;{&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;((mkfifo(FIFO_FILE,&nbsp;0666)&nbsp;&lt;&nbsp;0)&nbsp;&amp;&amp;&nbsp;(errno&nbsp;!=&nbsp;EEXIST))&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;Filo&nbsp;file&nbsp;create&nbsp;error!\n&quot;</span><span>);&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;pid_t&nbsp;newfork&nbsp;=&nbsp;fork();&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(newfork&nbsp;&lt;&nbsp;0)&nbsp;{&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;Fork&nbsp;error!\n&quot;</span><span>);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>&nbsp;(newfork&nbsp;==&nbsp;0)&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;fd1&nbsp;=&nbsp;open(FIFO_FILE,&nbsp;O_RDONLY);&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;reader;&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(fd1&nbsp;&lt;&nbsp;0)&nbsp;{&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;child&nbsp;process&nbsp;fd&nbsp;error!\n&quot;</span><span>);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">while</span><span>&nbsp;(1)&nbsp;{&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader&nbsp;=&nbsp;read(fd1,&nbsp;buff,&nbsp;BUFFER_SIZE);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;((buff[0]&nbsp;==&nbsp;</span><span class="string">'q'</span><span>&nbsp;&amp;&amp;&nbsp;buff[1]&nbsp;==&nbsp;</span><span class="string">'\0'</span><span>)&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;(buff[0]&nbsp;==&nbsp;<span class="string">'Q'</span><span>&nbsp;&amp;&amp;&nbsp;buff[1]&nbsp;==&nbsp;</span><span class="string">'\0'</span><span>))&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;Get&nbsp;EXIT&nbsp;message&nbsp;and&nbsp;quit!\n&quot;</span><span>);&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(fd1);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(0);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(reader&nbsp;&gt;&nbsp;0)&nbsp;{&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;Read&nbsp;from&nbsp;FIFO:%s\n&quot;</span><span>,&nbsp;buff);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">else</span><span>&nbsp;{&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;fd2&nbsp;=&nbsp;open(FIFO_FILE,&nbsp;O_WRONLY);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;writer;&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(fd2&nbsp;&lt;&nbsp;0)&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(<span class="string">&quot;Father&nbsp;process&nbsp;fd&nbsp;error!\n&quot;</span><span>);&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">while</span><span>&nbsp;(1)&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;((buff[0]&nbsp;==&nbsp;</span><span class="string">'q'</span><span>&nbsp;&amp;&amp;&nbsp;buff[1]&nbsp;==&nbsp;</span><span class="string">'\0'</span><span>)&nbsp;</span></span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;(buff[0]&nbsp;==&nbsp;<span class="string">'Q'</span><span>&nbsp;&amp;&amp;&nbsp;buff[1]&nbsp;==&nbsp;</span><span class="string">'\0'</span><span>))&nbsp;{&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(fd2);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(0);&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(<span class="string">&quot;%s&quot;</span><span>,&nbsp;buff);&nbsp;</span></span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer&nbsp;=&nbsp;write(fd2,&nbsp;buff,&nbsp;BUFFER_SIZE);&nbsp;</span></li>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></li>
<li class="alt"><span>}&nbsp;</span></li>
</ol>
</pre>
<p><!--[if gte mso 9]><xml><w:WordDocument><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:DocumentKind>DocumentNotSpecified</w:DocumentKind><w:DrawingGridVerticalSpacing>7.8</w:DrawingGridVerticalSpacing><w:View>Normal</w:View><w:Compatibility></w:Compatibility><w:Zoom>0</w:Zoom></w:WordDocument></xml><![endif]--></p>
<p>&nbsp;</p>
<div style="margin-top: 15px; font-style: normal">
<p><br/><strong>本文链接地址:</strong> <a href="http://www.nenew.net/linux-c-program-fork-fifo-usage.html">Linux C编程&#8212;fork子程序以及fifo有名管道的使用</a></p>
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://www.nenew.net/">奶牛博客</a></p>
<p><embed width="565" height="150" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://img.uu1001.cn/wrappler_swf2/2012-05-12/48/be/30100166_47c2d4d876007814d2e9a834f40875e6_565x150.swf"></embed></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.nenew.net/linux-c-program-fork-fifo-usage.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>分享Ubuntu Linux鼠标主题TheCandyman2</title>
		<link>http://www.nenew.net/share-ubuntu-linux-x11-mouse-theme-thecandyman2.html</link>
		<comments>http://www.nenew.net/share-ubuntu-linux-x11-mouse-theme-thecandyman2.html#comments</comments>
		<pubDate>Wed, 09 May 2012 12:05:59 +0000</pubDate>
		<dc:creator>奶牛</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Linux鼠标主题]]></category>
		<category><![CDATA[TheCandyman2鼠标主题]]></category>
		<category><![CDATA[Ubuntu鼠标主题]]></category>

		<guid isPermaLink="false">http://www.nenew.net/?p=2850</guid>
		<description><![CDATA[&#160;
今天为大家分享的是奶牛比较喜欢的一款鼠标主题TheCandyman的第二版TheCandyman2.鼠标主题的效果可以看下图:

主题的安装也很简单.下载TheCandyman2的压缩包,解压缩后执行
sudo cp -r TheCandyman02 /us... ]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>今天为大家分享的是奶牛比较喜欢的一款鼠标主题TheCandyman的第二版TheCandyman2.鼠标主题的效果可以看下图:</p>
<p style="text-align: center;"><img width="480" src="http://ww1.sinaimg.cn/large/6fb0e6d3gw1dssbiiv5ooj.jpg" alt="ubuntu鼠标主题 linux鼠标主题" /></p>
<p style="text-align: left;">主题的安装也很简单.下载TheCandyman2的压缩包,解压缩后执行</p>
<p style="text-align: left;">sudo cp -r TheCandyman02 /usr/share/icons/ </p>
<p style="text-align: left;">即可正常安装.然后设置启用鼠标主题即可.</p>
<p style="text-align: left;">点此<a href="http://yfdisk.com/file/nenew/ef6781d4/" target="_blank">下载TheCandyman2 linux鼠标主题</a></p>
<div style="margin-top: 15px; font-style: normal">
<p><br/><strong>本文链接地址:</strong> <a href="http://www.nenew.net/share-ubuntu-linux-x11-mouse-theme-thecandyman2.html">分享Ubuntu Linux鼠标主题TheCandyman2</a></p>
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://www.nenew.net/">奶牛博客</a></p>
<p><embed width="565" height="150" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://img.uu1001.cn/wrappler_swf2/2012-05-12/48/be/30100166_47c2d4d876007814d2e9a834f40875e6_565x150.swf"></embed></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.nenew.net/share-ubuntu-linux-x11-mouse-theme-thecandyman2.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ubuntu12.04桌面指南离线中文版下载</title>
		<link>http://www.nenew.net/ubuntu-12-04-desktop-guide-offline-download.html</link>
		<comments>http://www.nenew.net/ubuntu-12-04-desktop-guide-offline-download.html#comments</comments>
		<pubDate>Mon, 07 May 2012 13:28:23 +0000</pubDate>
		<dc:creator>奶牛</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[ubuntu 12.04桌面指南下载]]></category>
		<category><![CDATA[ubuntu12.04桌面指南下载]]></category>
		<category><![CDATA[ubuntuo]]></category>
		<category><![CDATA[友帮拓]]></category>

		<guid isPermaLink="false">http://www.nenew.net/?p=2848</guid>
		<description><![CDATA[&#160;
今天微博上看到有网友已经做好了Ubuntu12.04桌面指南离线版，并且提供了下载，奶牛也就借花献佛也转过来了。记得去年的时候奶牛也自己把ubuntu10.10的桌面指南做成了离线版（虽然官方后... ]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>今天微博上看到有网友已经做好了Ubuntu12.04桌面指南离线版，并且提供了下载，奶牛也就借花献佛也转过来了。记得去年的时候奶牛也自己把ubuntu10.10的桌面指南做成了离线版（虽然官方后来也出了），感兴趣想知道如何做到的，可以man wget获取详细的介绍，wget有r选项可以递归，还有转换为本地链接的选项，很强大哦。</p>
<p>废话又说多了，这个Ubuntu12.04桌面指南奶牛也大体看了一下，还是比较适合桌面用户的，大部分你可能遇到的问题在这里都可以找到合理的解释与提供的方法，新踏入ubuntu阵营的朋友还是可以好好学习一下的。</p>
<p>文件下载好后直接打开index.html阅读即可。<a href="http://yfdisk.com/file/nenew/838abf85/" target="_blank">Ubuntu12.04桌面指南离线中文版下载</a></p>
<p>在线阅读可以访问：http://people.ubuntu.com/~happyaron/ubuntu-docs/precise-html/</p>
<p>最近奶牛也想做个ubuntu wiki，个人不是很喜欢ubuntu官方的那个，感觉索引不够清晰，还是更喜欢arch的wiki风格。打算启用新域名<a href="http://www.ubuntuo.com" target="_blank">www.ubuntuo.com</a> ,也就是<a href="http://www.ubuntuo.com" target="_blank">友帮拓</a>啦，不知道朋友们有什么好建议，或者哪些比较好用的wiki架构可以推荐给奶牛。</p>
<p>&nbsp;</p>
<div style="margin-top: 15px; font-style: normal">
<p><br/><strong>本文链接地址:</strong> <a href="http://www.nenew.net/ubuntu-12-04-desktop-guide-offline-download.html">Ubuntu12.04桌面指南离线中文版下载</a></p>
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://www.nenew.net/">奶牛博客</a></p>
<p><embed width="565" height="150" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://img.uu1001.cn/wrappler_swf2/2012-05-12/48/be/30100166_47c2d4d876007814d2e9a834f40875e6_565x150.swf"></embed></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.nenew.net/ubuntu-12-04-desktop-guide-offline-download.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>动态磁盘无法写入grub问题介绍</title>
		<link>http://www.nenew.net/dynamic-disks-made-grub-write-error.html</link>
		<comments>http://www.nenew.net/dynamic-disks-made-grub-write-error.html#comments</comments>
		<pubDate>Sat, 05 May 2012 13:12:33 +0000</pubDate>
		<dc:creator>奶牛</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[grub]]></category>
		<category><![CDATA[动态磁盘]]></category>
		<category><![CDATA[动态磁盘转基本磁盘]]></category>
		<category><![CDATA[无损数据转换动态磁盘到基本磁盘]]></category>

		<guid isPermaLink="false">http://www.nenew.net/?p=2846</guid>
		<description><![CDATA[&#160;
昨天帮小远装linux，发现正常安装后grub无法写入，而且最强大的是mbr中的windows引导还顽强的存在。当时分区的时候就感觉怪怪的，因为没有主分区跟扩展分区，刚开始也没多想，只是觉得... ]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>昨天帮小远装linux，发现正常安装后grub无法写入，而且最强大的是mbr中的windows引导还顽强的存在。当时分区的时候就感觉怪怪的，因为没有主分区跟扩展分区，刚开始也没多想，只是觉得怪怪的，后来经过很久的排错，终于知道了，原来是由于windows的动态磁盘造成的。</p>
<p>查了下百科，介绍如下：Windows 2000起引入了基本磁盘和动态磁盘的概念，并且把它们添加到Windows系统管理员的工具之中。无论是基本磁盘还是动态磁盘，你都可以使用任何文件系统，包括FAT和NTFS。而且你可以在动态磁盘改变卷而不需要重启系统。你可以把一个基本磁盘转换 成动态磁盘。但是你必须了解这并不是一个双向的过程。一旦你从基本磁盘变成了动态磁盘，除非你重新创建卷，否则你不能将它转变回去。</p>
<p>我们平时用的是基本磁盘，有主分区跟扩展分区之分，而动态磁盘默认都是简单卷，还有其它的卷模式。这里我们就不讨论了，我们只要知道这个grub无法写入的问题是由于动态磁盘造成的就ok鸟。</p>
<p>看了网上的一些文章，其实是有无损把动态磁盘转换为基本磁盘的程序跟方法的，但是这里只是针对简单卷的哦，有其它卷的就不好处理了。</p>
<p>资料我已经都整理到文件中了，朋友们有需要的可以直接下载<a ref="nofollow" href="http://yfdisk.com/file/nenew/7743681d/" target="_blank">无损转换动态分区工具包</a> （请先备份数据再使用，以防万一）</p>
<p>教程可以看下图：点击可以看大图</p>
<p style="text-align: center;"><a href="http://ww4.sinaimg.cn/large/6fb0e6d3gw1dsnr0jx0i6j.jpg" target="_blank"><img width="480" src="http://ww4.sinaimg.cn/large/6fb0e6d3gw1dsnr0jx0i6j.jpg" alt="怎么无损数据地转换动态磁盘到基本磁盘" /></a></p>
<p>&nbsp;</p>
<div style="margin-top: 15px; font-style: normal">
<p><br/><strong>本文链接地址:</strong> <a href="http://www.nenew.net/dynamic-disks-made-grub-write-error.html">动态磁盘无法写入grub问题介绍</a></p>
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://www.nenew.net/">奶牛博客</a></p>
<p><embed width="565" height="150" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://img.uu1001.cn/wrappler_swf2/2012-05-12/48/be/30100166_47c2d4d876007814d2e9a834f40875e6_565x150.swf"></embed></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.nenew.net/dynamic-disks-made-grub-write-error.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Airdroid很好用,管理Android设备很方便</title>
		<link>http://www.nenew.net/airdroid-is-a-great-app-to-manage-android-devices.html</link>
		<comments>http://www.nenew.net/airdroid-is-a-great-app-to-manage-android-devices.html#comments</comments>
		<pubDate>Wed, 02 May 2012 10:42:30 +0000</pubDate>
		<dc:creator>奶牛</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[airdroid]]></category>
		<category><![CDATA[android 4.0]]></category>
		<category><![CDATA[Touchpad]]></category>

		<guid isPermaLink="false">http://www.nenew.net/?p=2842</guid>
		<description><![CDATA[&#160;
Android2.3的时候一直用ftp来做文件管理,到了hp touchpad升级到android 4.0了,最近也没在本机搭ftp,想用usb,发现mtp并没有想象中的好用,虽然在ubuntu等linux下可以挂载上,但是写入读取速度真的不怎么... ]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Android2.3的时候一直用ftp来做文件管理,到了hp touchpad升级到android 4.0了,最近也没在本机搭ftp,想用usb,发现mtp并没有想象中的好用,虽然在ubuntu等linux下可以挂载上,但是写入读取速度真的不怎么让人满意.然后搜索的时候发现有人推荐了airdroid这款android应用.</p>
<p>1.免费</p>
<p>木有发现airdroid有收费的提示,也没有看到广告</p>
<p>2.便捷</p>
<p>只要android设备直接安装上就可以了,然后直接就可以通过android设备的ip来访问,特别适合在无线路由wifi环境下.传送速度还是很不错的.</p>
<p>3.使用</p>
<p>打开android设备上的airdroid,可以设置密码,也可以用默认的密码,如果设置可以在setting里面选择predefined password为on,然后设置即可.默认的访问方式是打开你的浏览器,浏览网址:</p>
<p>http://设备的ip:8888</p>
<p>然后输入密码即可进行管理.上传文件可以在files里面选择import导入即可.注意文件名哦,不要有空格.</p>
<p>下载地址:<a ref="nofollow" target="_blank" href="http://yfdisk.com/file/nenew/a517c324/">http://yfdisk.com/file/nenew/a517c324/</a></p>
<div style="margin-top: 15px; font-style: normal">
<p><br/><strong>本文链接地址:</strong> <a href="http://www.nenew.net/airdroid-is-a-great-app-to-manage-android-devices.html">Airdroid很好用,管理Android设备很方便</a></p>
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://www.nenew.net/">奶牛博客</a></p>
<p><embed width="565" height="150" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://img.uu1001.cn/wrappler_swf2/2012-05-12/48/be/30100166_47c2d4d876007814d2e9a834f40875e6_565x150.swf"></embed></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.nenew.net/airdroid-is-a-great-app-to-manage-android-devices.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Ubuntu12.04新手入门指南</title>
		<link>http://www.nenew.net/ubuntu-1204-new-hand-guide.html</link>
		<comments>http://www.nenew.net/ubuntu-1204-new-hand-guide.html#comments</comments>
		<pubDate>Sat, 28 Apr 2012 14:32:27 +0000</pubDate>
		<dc:creator>奶牛</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Ubuntu入门指南]]></category>
		<category><![CDATA[Ubuntu新手教程]]></category>

		<guid isPermaLink="false">http://www.nenew.net/?p=2838</guid>
		<description><![CDATA[写一篇新手入门指南吧,可能总结的不够全面,再补充吧~有些点可能写的不够明确,希望朋友们可以好好借助google&#160;baidu等搜索引擎来寻找更详细的介绍.
1.系统安装
对于Ubuntu系统的安装,方法真... ]]></description>
			<content:encoded><![CDATA[<p>写一篇新手入门指南吧,可能总结的不够全面,再补充吧~有些点可能写的不够明确,希望朋友们可以好好借助google&nbsp;baidu等搜索引擎来寻找更详细的介绍.</p>
<p>1.系统安装</p>
<p>对于Ubuntu系统的安装,方法真的很多.比如在windows下就可以进行的wubi安装,正常推荐的光盘安装(哪里有光盘?自己把iso镜像文件刻录为光盘就可以了哇),U盘安装以及奶牛前篇介绍过的硬盘安装.如果采用wubi方式安装,请尽量将系统放在一个ntfs分区上,否则可能会因为文件大小限制造成一些问题.奶牛更推荐的是直装方式,但是需要你有一定的了解跟基础.</p>
<p>Ubuntu的安装,你首先要了解linux下的分区以及引导方式的一些知识,奶牛在这里简单的说一下:</p>
<p>Ubuntu等linux操作系统一般不要求你安装在主分区上,不像windows要求那样子苛刻,就算全是逻辑分区也是没有任何问题的.一般对于新手,分配一个分区给根目录(/)+一个交换分区(swap).交换分区的概念也许在windows下并没有怎么被提到,不过如果你了解比较多,一定听说过页面缓存文件,一个跟交换分区差不多的东西,都是用作交换时候用的,弥补内存不足造成的一些问题,就相当于一个速度不高的内存区域,一般设置为内存的1~1.5倍,不过内存超过4G的PC就可以不设置了.</p>
<p>引导呢,linux主流系统现在都是用grub来做引导,此处所说的grub是grub2,从前几个版本就开始一直在用,因为使用Ubuntu的grub引导可以轻松实现对于windows的引导,所以一般我们都选择由grub来做引导,如果安装完成后发现没有windows的开机启动选项,可以直接执行命令update-grub来寻找windows的引导的.</p>
<p>2.配置工具ubuntu-tweak</p>
<p>对于一个操作系统,配置很关键,如果你已经顺利的安装完成,那么就要用一些配置工具来帮你配置好一个你更习惯更喜欢的桌面环境了.这里奶牛首推的是ubuntu-tweak.国人编写,功能较为完善的ubuntu配置工具,涵盖了从系统桌面环境配置到源的修改,以及垃圾清理.使用ubuntu-tweak几乎可以完成对于ubuntu的常用配置,如果你还觉得不够过瘾,想对于特效有更详细的配置,可以使用ccsm,compiz的高级配置工具.</p>
<p>3.驱动问题</p>
<p>驱动问题估计是个老大难,因为奶牛只有一台Y450笔记本,没有遇到太大问题,除了此次六屏幕问题(已经解决),并没有遇到过其它问题.不过奶牛没遇到并不代表其他朋友不会遇到,这里奶牛说一下.显卡驱动一般分为开源驱动跟闭源驱动,奶牛一般直接去官方网站下载官方驱动(也就是闭源驱动,总体性能上还是不错的),对于显卡驱动的安装,一般会下载一个.run的驱动,然后关闭lightgdm服务,sh xxx.run来安装驱动.如果你用开源驱动没啥问题,就继续用也没关系的.</p>
<p>声音驱动一般用alsa来配置就可以搞定的.而无线网卡呢,linux下有一个可以安装windows无线驱动的工具ndiswrapper,如果无线无法搞定可以试试这个工具.</p>
<p>4.软件</p>
<p>牛X的应用程序,linux下很多都有相应的版本,如果没有,也会有很多功能类似的替代软件可以使用.比如office有open office&nbsp;跟libre office,现在永中跟wps也加入到linux环境下的office工具开发当中了.</p>
<p>影音播放只要解码没啥问题也都可以正常使用,一般装个vlc,装个totem+gstream那个系列的解码就ok搞定99%了.</p>
<p>上网呢,mozilla&nbsp;firefox&nbsp;chrome&nbsp;opera等各种主流浏览器也都完美支持.</p>
<p>一些拨号的客户端可以通过wine的方法来搞定.</p>
<p>IM软件:QQ可以直接用webQQ,skype有linux的客户端,功能很强大,gtalk哇msn哇可以直接用自带的集成软件去实现.</p>
<p>更多软件尽在:ubuntu的软件中心</p>
<p>5.建议买本书学起</p>
<p>可以看奶牛的介绍文章:<a target="_blank" href="http://www.nenew.net/ubuntu-linux-guide-books.html">Ubuntu Linux 入门书籍教程推荐</a></p>
<p>6.一些思想</p>
<p>开放:不要局限在windows的点点鼠标,你应该更加深入了解系统</p>
<p>共享:把好的东西分享给需要的人</p>
<p>自由:让自己充满想法,要geek一些,不要被局限</p>
<p>友帮拓:虽然很多人说这个中文名很烂,但是奶牛觉得它的含义很明确:友好互爱,互帮互助,开拓进取</p>
<div style="margin-top: 15px; font-style: normal">
<p><br/><strong>本文链接地址:</strong> <a href="http://www.nenew.net/ubuntu-1204-new-hand-guide.html">Ubuntu12.04新手入门指南</a></p>
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://www.nenew.net/">奶牛博客</a></p>
<p><embed width="565" height="150" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://img.uu1001.cn/wrappler_swf2/2012-05-12/48/be/30100166_47c2d4d876007814d2e9a834f40875e6_565x150.swf"></embed></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.nenew.net/ubuntu-1204-new-hand-guide.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.427 seconds -->
<!-- Cached page served by WP-Cache -->

