⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linux环境进程间通信(一) 管道及有名管道.htm

📁 本资源中含有有关LINUX进程通信的一些文章
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                <LI>nbr 1000 
                <LI>bwg </LI></UL>
              <LI>当请求写入的数据量不大于PIPE_BUF时的原子性: 
              <UL class=n01>
                <LI>nbr 1000 
                <LI>bw </LI></UL></LI></OL>
            <P>验证非阻塞写操作:</P>
            <OL class=n01>
              <LI>当请求写入的数据量大于PIPE_BUF时的非原子性: 
              <UL class=n01>
                <LI>nbr 1000 
                <LI>nbwg </LI></UL>
              <LI>请求写入的数据量不大于PIPE_BUF时的原子性: 
              <UL class=n01>
                <LI>nbr 1000 
                <LI>nbw </LI></UL></LI></OL>
            <P>不管写打开的阻塞标志是否设置,在请求写入的字节数大于4096时,都不保证写入的原子性。但二者有本质区别:</P>
            <P>对于阻塞写来说,写操作在写满FIFO的空闲区域后,会一直等待,直到写完所有数据为止,请求写入的数据最终都会写入FIFO;</P>
            <P>而非阻塞写则在写满FIFO的空闲区域后,就返回(实际写入的字节数),所以有些数据最终不能够写入。</P>
            <P>对于读操作的验证则比较简单,不再讨论。</P>
            <P><SPAN class=atitle3>2.5有名管道应用实例</SPAN></P>
            <P>在验证了相应的读写规则后,应用实例似乎就没有必要了。</P>
            <P><A name=3><SPAN class=atitle2>小结:</SPAN></A></P>
            <P>管道常用于两个方面:(1)在shell中时常会用到管道(作为输入输入的重定向),在这种应用方式下,管道的创建对于用户来说是透明的;(2)用于具有亲缘关系的进程间通信,用户自己创建管道,并完成读写操作。</P>
            <P>FIFO可以说是管道的推广,克服了管道无名字的限制,使得无亲缘关系的进程同样可以采用先进先出的通信机制进行通信。</P>
            <P>管道和FIFO的数据是字节流,应用程序之间必须事先确定特定的传输"协议",采用传播具有特定意义的消息。</P>
            <P>要灵活应用管道及FIFO,理解它们的读写规则是关键。</P>
            <P><A name=a></A>附1:kill -l 的运行结果,显示了当前系统支持的所有信号:</P>
            <P>
            <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
            border=1>
              <TBODY>
              <TR>
                <TD><PRE><CODE>
1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL
5) SIGTRAP	 6) SIGABRT	 7) SIGBUS	 8) SIGFPE
9) SIGKILL	10) SIGUSR1	11) SIGSEGV	12) SIGUSR2
13) SIGPIPE	14) SIGALRM	15) SIGTERM	17) SIGCHLD
18) SIGCONT	19) SIGSTOP	20) SIGTSTP	21) SIGTTIN
22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO
30) SIGPWR	31) SIGSYS	32) SIGRTMIN	33) SIGRTMIN+1
34) SIGRTMIN+2	35) SIGRTMIN+3	36) SIGRTMIN+4	37) SIGRTMIN+5
38) SIGRTMIN+6	39) SIGRTMIN+7	40) SIGRTMIN+8	41) SIGRTMIN+9
42) SIGRTMIN+10	43) SIGRTMIN+11	44) SIGRTMIN+12	45) SIGRTMIN+13
46) SIGRTMIN+14	47) SIGRTMIN+15	48) SIGRTMAX-15	49) SIGRTMAX-14
50) SIGRTMAX-13	51) SIGRTMAX-12	52) SIGRTMAX-11	53) SIGRTMAX-10
54) SIGRTMAX-9	55) SIGRTMAX-8	56) SIGRTMAX-7	57) SIGRTMAX-6
58) SIGRTMAX-5	59) SIGRTMAX-4	60) SIGRTMAX-3	61) SIGRTMAX-2
62) SIGRTMAX-1	63) SIGRTMAX	
</CODE></PRE></TD></TR></TBODY></TABLE></P>
            <P>除了在此处用来说明管道应用外,接下来的专题还要对这些信号分类讨论。</P>
            <P><A name=b></A>附2:对FIFO打开规则的验证(主要验证写打开对读打开的依赖性)</P>
            <P>
            <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
            border=1>
              <TBODY>
              <TR>
                <TD><PRE><CODE>
#include &lt;sys/types.h&gt;
#include &lt;sys/stat.h&gt;
#include &lt;errno.h&gt;
#include &lt;fcntl.h&gt;
#define FIFO_SERVER "/tmp/fifoserver"

int handle_client(char*);
main(int argc,char** argv)
{
	int r_rd;
	int w_fd;
	pid_t pid;

	if((mkfifo(FIFO_SERVER,O_CREAT|O_EXCL)&lt;0)&amp;&amp;(errno!=EEXIST))
		printf("cannot create fifoserver\n");
	handle_client(FIFO_SERVER);
	
}

int handle_client(char* arg)
{
int ret;
ret=w_open(arg);
switch(ret)
{
	case 0:
	{	
	printf("open %s error\n",arg);
	printf("no process has the fifo open for reading\n");
	return -1;
	}
	case -1:
	{
		printf("something wrong with open the fifo except for ENXIO");
		return -1;
	}
	case 1:
	{
		printf("open server ok\n");
		return 1;
	}
	default:
	{
		printf("w_no_r return ????\n");
		return 0;
	}
}		
unlink(FIFO_SERVER);
}

int w_open(char*arg)
//0  open error for no reading
//-1 open error for other reasons
//1  open ok
{
	if(open(arg,O_WRONLY|O_NONBLOCK,0)==-1)
	{	if(errno==ENXIO)
		{
			return 0;
		}
		else
		return -1;
	}
	return 1;
	
}
</CODE></PRE></TD></TR></TBODY></TABLE></P>
            <P><A name=resources><SPAN class=atitle2>参考文献:</SPAN></A></P>
            <OL class=n01>
              <LI>UNIX网络编程第二卷:进程间通信,作者:W.Richard 
              Stevens,译者:杨继张,清华大学出版社。丰富的UNIX进程间通信实例及分析,对Linux环境下的程序开发有极大的启发意义。 
              <LI>linux内核源代码情景分析(上、下),毛德操、胡希明著,浙江大学出版社,当要验证某个结论、想法时,最好的参考资料; 
              <LI>UNIX环境高级编程,作者:W.Richard 
              Stevens,译者:尤晋元等,机械工业出版社。具有丰富的编程实例,以及关键函数伴随Unix的发展历程。 
              <LI><A 
              href="http://www.linux.org.tw/CLDP/gb/Secure-Programs-HOWTO/x346.html">http://www.linux.org.tw/CLDP/gb/Secure-Programs-HOWTO/x346.html</A> 
              点明linux下sigaction的实现基础,linux源码../kernel/signal.c更说明了问题; 
              <LI>pipe手册,最直接而可靠的参考资料 
              <LI>fifo手册,最直接而可靠的参考资料 </LI></OL>
            <P><A name=author1><SPAN class=atitle2>关于作者</SPAN></A></P>
            <P>郑彦兴,男,现攻读国防科大计算机学院网络方向博士学位。您可以通过电子邮件 <A 
            href="mailto:mlinux@163.com">mlinux@163.com</A>和他联系。</P><!-- END PAPER BODY-->
            <P></P></TD></TR>
        <TR class=left_tdbgall align=right>
          <TD colSpan=2 height=24>【字体:<A class=top_UserLogin 
            href="javascript:fontZoomA();">小</A> <A class=top_UserLogin 
            href="javascript:fontZoomB();">大</A>】【<A 
            href="http://study.feloo.com/computer/Comment.asp?ArticleID=39159" 
            target=_blank>发表评论</A>】【<A 
            href="http://study.feloo.com/User/User_Favorite.asp?Action=Add&amp;ChannelID=25&amp;InfoID=39159" 
            target=_blank>加入收藏</A>】【<A 
            href="http://study.feloo.com/computer/SendMail.asp?ArticleID=39159" 
            target=_blank>告诉好友</A>】【<A 
            href="http://study.feloo.com/computer/Print.asp?ArticleID=39159" 
            target=_blank>打印此文</A>】【<A 
            href="javascript:window.close();">关闭窗口</A>】 </TD></TR>
        <TR>
          <TD class=left_tdbgall align=right colSpan=2 
            height=24>电脑文章录入:admin&nbsp;&nbsp;&nbsp;&nbsp;责任编辑:admin&nbsp; 
</TD></TR><!--文章内容下部广告代码开始-->
        <TR>
          <TD align=middle colSpan=2>
            <SCRIPT src="Linux环境进程间通信(一) 管道及有名管道.files/wen-bot.js"></SCRIPT>
          </TD></TR><!--文章同容下部广告代码结束-->
        <TR>
          <TD class=left_tdbgall align=right colSpan=2 height=24><STRONG><FONT 
            color=#ff0000>百度搜索:<A 
            href="http://www.baidu.com/baidu?tn=study888&amp;word=Linux环境进程间通信(一): 管道及有名管道" 
            target=_blank>Linux环境进程间通信(一): 管道及有名管道</FONT></A></STRONG>
            <SCRIPT src=""></SCRIPT>
          </TD></TR>
        <TR>
          <TD width=5></TD>
          <TD width=787>
            <LI>上一篇电脑文章: <A 
            title="电脑文章标题:开发基于串口的PPP/IP/TCP/UDP/HTTP/WTP/WSP/MMS 等协议的理想工具&#13;&#10;作&nbsp;&nbsp;&nbsp;&nbsp;者:未知&#13;&#10;更新时间:2005-6-9 18:12:27" 
            href="http://study.feloo.com/computer/pro/vc/system/200506/39158.html">开发基于串口的PPP/IP/TCP/UDP/HTTP/WTP/WSP/MMS&nbsp;等协议的理想工具</A><BR>
            <LI>下一篇电脑文章: <A 
            title="电脑文章标题:Linux环境进程间通信(二):信号(上)&#13;&#10;作&nbsp;&nbsp;&nbsp;&nbsp;者:未知&#13;&#10;更新时间:2005-6-9 18:12:28" 
            href="http://study.feloo.com/computer/pro/vc/system/200506/39160.html">Linux环境进程间通信(二):信号(上)</A></LI></TD></TR><!--文章内容下部广告代码开始-->
        <TR>
          <TD align=middle colSpan=2>
            <SCRIPT src="Linux环境进程间通信(一) 管道及有名管道.files/wen-bot-2.js"></SCRIPT>
          </TD></TR><!--文章同容下部广告代码结束--></TBODY></TABLE><!--网页中部左栏文章内容代码结束-->
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
        <TBODY>
        <TR>
          <TD align=middle height=20></TD></TR></TBODY></TABLE></TD>
    <TD style="BORDER-LEFT: #a7a9a7 1px solid" vAlign=top width=180 
    bgColor=#f8f8f8><!--网页中部右栏代码开始-->
      <TABLE style="WORD-BREAK: break-all" cellSpacing=0 cellPadding=0 
      width="100%" border=0>
        <TBODY>
        <TR>
          <TD class=left_title><IMG height=28 
            src="Linux环境进程间通信(一) 管道及有名管道.files/ad_search.gif" width=174></TD></TR>
        <TR>
          <TD align=middle>
            <SCRIPT 
            src="Linux环境进程间通信(一) 管道及有名管道.files/ShowSearchForm_wen.js"></SCRIPT>
          </TD></TR>
        <TR>
          <TD align=middle>
            <SCRIPT src="Linux环境进程间通信(一) 管道及有名管道.files/right-1.js"></SCRIPT>
          </TD></TR>
        <TR>
          <TD class=left_title><IMG height=28 
            src="Linux环境进程间通信(一) 管道及有名管道.files/ad_ztlm.gif" width=174></TD></TR>
        <TR>
          <TD class=left_tdbg1>
            <SCRIPT language=javascript 
            src="Linux环境进程间通信(一) 管道及有名管道.files/com-tjlm.js"></SCRIPT>
          </TD></TR>
        <TR>
          <TD class=left_tdbg2></TD></TR>
        <TR>
          <TD class=left_title><A class=class 
            href="http://study.feloo.com/computer/ShowHot.asp"><IMG height=28 
            src="Linux环境进程间通信(一) 管道及有名管道.files/ad_zxrmwz.gif" width=174 
            border=0></A></TD></TR>
        <TR>
          <TD class=left_tdbg1 
          background="Linux环境进程间通信(一) 管道及有名管道.files/ad_bg2.gif">
            <TABLE cellSpacing=0 cellPadding=0 width="100%">
              <TBODY>
              <TR>
                <TD class=listbg vAlign=top width=10><IMG alt=普通电脑文章 
                  src="Linux环境进程间通信(一) 管道及有名管道.files/article_common.gif"></TD>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -