亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 11.html

?? 介紹linux下文件和設(shè)備編程
?? HTML
?? 第 1 頁 / 共 5 頁
字號:
FILE*pipein_fp,*pipeout_fp;<br>charreadbuf[80];<br>/*Createonewaypipelinewithcalltopopen()*/<br>if((pipein_fp=popen(&quot;ls&quot;,&quot;r&quot;))==NULL)<br>{<br>perror(&quot;popen&quot;);<br>exit(1);<br>}<br>/*Createonewaypipelinewithcalltopopen()*/<br>if((pipeout_fp=popen(&quot;sort&quot;,&quot;w&quot;))==NULL)<br>{<br>perror(&quot;popen&quot;);<br>exit(1);<br>}<br>/*Processingloop*/<br>while(fgets(readbuf,80,pipein_fp))<br>fputs(readbuf,pipeout_fp);<br>/*Closethepipes*/<br>pclose(pipein_fp);<br>pclose(pipeout_fp);<br>return(0);<br>}<br>最后,我們再看一個使用popen()的例子。此程序用于創(chuàng)建一個命令和文件之間的管道:<br>#include&lt;stdio.h&gt;<br>intmain(intargc,char*argv[])<br>{<br>FILE*pipe_fp,*infile;<br>charreadbuf[80];<br>if(argc!=3){<br>fprintf(stderr,&quot;USAGE:popen3[command][filename]\n&quot;);<br>exit(1);<br>}<br>/*Open up input file*/<br>if((infile=fopen(argv[2],&quot;rt&quot;))==NULL)<br>{<br>perror(&quot;fopen&quot;);<br>exit(1);<br>}<br>/*Create one way pipe line with call topopen()*/<br>if((pipe_fp=popen(argv[1],&quot;w&quot;))==NULL)<br>{<br>perror(&quot;popen&quot;);<br>exit(1);<br>}<br>/*Processingloop*/<br>do{<br>fgets(readbuf,80,infile);<br>if(feof(infile))break;<br>fputs(readbuf,pipe_fp);<br>}while(!feof(infile));<br>fclose(infile);<br>pclose(pipe_fp);<br>return(0);<br>}<br>下面是使用此程序的例子:<br>popen3sortpopen3.c<br>popen3catpopen3.c<br>popen3morepopen3.c<br>popen3catpopen3.c|grepmain<p><p><p><center><A HREF="#Content">[目錄]</A></center><hr><br><A NAME="I242" ID="I242"></A><center><b><font size=+2>命名管道</font></b></center><br>&nbsp;&nbsp;&nbsp; 命名管道和一般的管道基本相同,但也有一些顯著的不同:<p>*命名管道是在文件系統(tǒng)中作為一個特殊的設(shè)備文件而存在的。<br>*不同祖先的進(jìn)程之間可以通過管道共享數(shù)據(jù)。<br>*當(dāng)共享管道的進(jìn)程執(zhí)行完所有的I/O操作以后,命名管道將繼續(xù)保存在文件系統(tǒng)中以便以后使用。<p>&nbsp;&nbsp;&nbsp; 一個管道必須既有讀取進(jìn)程,也要有寫入進(jìn)程。如果一個進(jìn)程試圖寫入到一個沒有讀取進(jìn)程的管道中,那么系統(tǒng)內(nèi)核將會產(chǎn)生SIGPIPE信號。當(dāng)兩個以上的進(jìn)程同時使用管道時,這一點尤其重要。<p><center><A HREF="#Content">[目錄]</A></center><hr><br><A NAME="I243" ID="I243"></A><center><b><font size=+2>創(chuàng)建FIFO</font></b></center><br>&nbsp;&nbsp;&nbsp; 可以有幾種方法創(chuàng)建一個命名管道。頭兩種方法可以使用shell。<p>mknodMYFIFOp<br>mkfifoa=rwMYFIFO<br>&nbsp;&nbsp;&nbsp; 上面的兩個命名執(zhí)行同樣的操作,但其中有一點不同。命令mkfifo提供一個在創(chuàng)建之后直接改變FIFO文件存取權(quán)限的途徑,而命令mknod需要調(diào)用命令chmod。<br>&nbsp;&nbsp;&nbsp; 一個物理文件系統(tǒng)可以通過p指示器十分容易地分辨出一個FIFO文件。<p>$ls-lMYFIFO<br>prw-r--r--1rootroot0Dec1422:15MYFIFO|<p>&nbsp;&nbsp;&nbsp; 請注意在文件名后面的管道符號“|”。<br>&nbsp;&nbsp;&nbsp; 我們可以使用系統(tǒng)調(diào)用mknod()來創(chuàng)建一個FIFO管道:<p>庫函數(shù):mknod();<br>原型:intmknod(char*pathname,mode_tmode,dev_tdev);<br>返回值:如果成功,返回0<br>如果失敗,返回-1:errno=EFAULT(無效路徑名)<br>EACCES(無存取權(quán)限)<br>ENAMETOOLONG(路徑名太長)<br>ENOENT(無效路徑名)<br>ENOTDIR(無效路徑名)<p>&nbsp;&nbsp;&nbsp; 下面看一個使用C語言創(chuàng)建FIFO管道的例子:<p>mknod(&quot;/tmp/MYFIFO&quot;,S_IFIFO|0666,0);<p>&nbsp;&nbsp;&nbsp; 在這個例子中,文件/tmp/MYFIFO是要創(chuàng)建的FIFO文件。它的存取權(quán)限是0666。存取權(quán)限<br>也可以使用umask修改:<p>final_umask=requested_permissions&amp;~original_umask<p>&nbsp;&nbsp;&nbsp; 一個常用的使用系統(tǒng)調(diào)用umask()的方法就是臨時地清除umask的值:<br>umask(0);<br>mknod(&quot;/tmp/MYFIFO&quot;,S_IFIFO|0666,0);<p>&nbsp;&nbsp;&nbsp; 另外,mknod()中的第三個參數(shù)只有在創(chuàng)建一個設(shè)備文件時才能用到。它包括設(shè)備文件的<br>主設(shè)備號和從設(shè)備號。<br>}<br>}<p><p><p><br><center><A HREF="#Content">[目錄]</A></center><hr><br><A NAME="I244" ID="I244"></A><center><b><font size=+2>操作FIFO</font></b></center><br>&nbsp;&nbsp;&nbsp; FIFO上的I/O操作和正常管道上的I/O操作基本一樣,只有一個主要的不同。系統(tǒng)調(diào)用open用來在物理上打開一個管道。在半雙工的管道中,這是不必要的。因為管道在系統(tǒng)內(nèi)核中,而不是在一個物理的文件系統(tǒng)中。在我們的例子中,我們將像使用一個文件流一樣使用管道,也就是使用fopen()打開管道,使用fclose()關(guān)閉它。<br>&nbsp;&nbsp;&nbsp; 請看下面的簡單的服務(wù)程序進(jìn)程:<br>#include&lt;stdio.h&gt;<br>#include&lt;stdlib.h&gt;<br>#include&lt;sys/stat.h&gt;<br>#include&lt;unistd.h&gt;<br>#include&lt;linux/stat.h&gt;<br>#defineFIFO_FILE&quot;MYFIFO&quot;<br>intmain(void)<br>{<br>FILE*fp;<br>charreadbuf[80];<br>/*CreatetheFIFOifitdoesnotexist*/<br>umask(0);<br>mknod(FIFO_FILE,S_IFIFO|0666,0);<br>while(1)<br>{<br>fp=fopen(FIFO_FILE,&quot;r&quot;);<br>fgets(readbuf,80,fp);<br>printf(&quot;Receivedstring:%s\n&quot;,readbuf);<br>fclose(fp);<br>return(0);<br>&nbsp;&nbsp;&nbsp; 因為FIFO管道缺省時有阻塞的函數(shù),所以你可以在后臺運行此程序:<br>$fifoserver&amp;<br>&nbsp;&nbsp;&nbsp; 再來看一下下面的簡單的客戶端程序:<br>#include&lt;stdio.h&gt;<br>#include&lt;stdlib.h&gt;<br>#defineFIFO_FILE&quot;MYFIFO&quot;<br>intmain(int argc,char* argv[])<br>{<br>FILE*fp;<br>if(argc!=2){<br>printf(&quot;USAGE:fifoclient[string]\n&quot;);<br>exit(1);<br>}<br>if((fp=fopen(FIFO_FILE,&quot;w&quot;))==NULL){<br>perror(&quot;fopen&quot;);<br>exit(1);<br>}<br>fputs(argv[1],fp);<br>fclose(fp);<br>return(0);<br>}<p><p><center><A HREF="#Content">[目錄]</A></center><hr><br><A NAME="I245" ID="I245"></A><center><b><font size=+2>阻塞FIFO</font></b></center><br>&nbsp;&nbsp;&nbsp; 一般情況下,F(xiàn)IFO管道上將會有阻塞的情況發(fā)生。也就是說,如果一個FIFO管道打開供讀取的話,它將一直阻塞,直到其他的進(jìn)程打開管道寫入信息。這種過程反過來也一樣。如果你不需要阻塞函數(shù)的話,你可以在系統(tǒng)調(diào)用open()中設(shè)置O_NONBLOCK標(biāo)志,這樣可以取消缺省的阻塞函數(shù)。<p><p><p><center><A HREF="#Content">[目錄]</A></center><hr><br><A NAME="I246" ID="I246"></A><center><b><font size=+2>消息隊列</font></b></center><br>&nbsp;&nbsp;&nbsp; 在UNIX的SystemV版本,AT&amp;T引進(jìn)了三種新形式的IPC功能(消息隊列、信號量、以及共享內(nèi)存)。但BSD版本的UNIX使用套接口作為主要的IPC形式。Linux系統(tǒng)同時支持這兩個版本。<br><center><A HREF="#Content">[目錄]</A></center><hr><br><A NAME="I247" ID="I247"></A><center><b><font size=+2>msgget()</font></b></center><br>系統(tǒng)調(diào)用msgget()<p>&nbsp;&nbsp;&nbsp; 如果希望創(chuàng)建一個新的消息隊列,或者希望存取一個已經(jīng)存在的消息隊列,你可以使用系統(tǒng)調(diào)用msgget()。<p>系統(tǒng)調(diào)用:msgget();<br>原型:intmsgget(key_t key,int msgflg);<br>返回值:如果成功,返回消息隊列標(biāo)識符<br>如果失敗,則返回-1:errno=EACCESS(權(quán)限不允許)<br>EEXIST(隊列已經(jīng)存在,無法創(chuàng)建)<br>EIDRM(隊列標(biāo)志為刪除)<br>ENOENT(隊列不存在)<br>ENOMEM(創(chuàng)建隊列時內(nèi)存不夠)<br>ENOSPC(超出最大隊列限制)<p>&nbsp;&nbsp;&nbsp; 系統(tǒng)調(diào)用msgget()中的第一個參數(shù)是關(guān)鍵字值(通常是由ftok()返回的)。然后此關(guān)鍵字值將會和其他已經(jīng)存在于系統(tǒng)內(nèi)核中的關(guān)鍵字值比較。這時,打開和存取操作是和參數(shù)msgflg中的內(nèi)容相關(guān)的。<br>IPC_CREAT如果內(nèi)核中沒有此隊列,則創(chuàng)建它。<br>IPC_EXCL當(dāng)和IPC_CREAT一起使用時,如果隊列已經(jīng)存在,則失敗。<p>&nbsp;&nbsp;&nbsp; 如果單獨使用IPC_CREAT,則msgget()要么返回一個新創(chuàng)建的消息隊列的標(biāo)識符,要么返回具有相同關(guān)鍵字值的隊列的標(biāo)識符。如果IPC_EXCL和IPC_CREAT一起使用,則msgget()要么創(chuàng)建一個新的消息隊列,要么如果隊列已經(jīng)存在則返回一個失敗值-1。IPC_EXCL單獨使用是沒有用處的。<br>下面看一個打開和創(chuàng)建一個消息隊列的例子:<br>intopen_queue(key_t keyval)<br>{<br>intqid;<br>if((qid=msgget(keyval,IPC_CREAT|0660))==-1)<br>{<br>return(-1);<br>}<br>return(qid);<br>}<p><p><p><center><A HREF="#Content">[目錄]</A></center><hr><br><A NAME="I248" ID="I248"></A><center><b><font size=+2>msgsnd()</font></b></center><br>系統(tǒng)調(diào)用msgsnd()<p>&nbsp;&nbsp;&nbsp; 一旦我們得到了隊列標(biāo)識符,我們就可以在隊列上執(zhí)行我們希望的操作了。如果想要往隊列中發(fā)送一條消息,你可以使用系統(tǒng)調(diào)用msgsnd():<p>系統(tǒng)調(diào)用:msgsnd();<br>原型:intmsgsnd(int msqid,struct msgbuf*msgp,int msgsz,int msgflg);<br>返回值:如果成功,0。<br>如果失敗,-1:errno=EAGAIN(隊列已滿,并且使用了IPC_NOWAIT)<br>EACCES(沒有寫的權(quán)限)<br>EFAULT(msgp地址無效)<br>EIDRM(消息隊列已經(jīng)刪除)<br>EINTR(當(dāng)?shù)却龑懖僮鲿r,收到一個信號)<br>EINVAL(無效的消息隊列標(biāo)識符,非正數(shù)的消息類型,或<br>者無效的消息長度)<br>ENOMEM(沒有足夠的內(nèi)存復(fù)制消息緩沖區(qū))<p>&nbsp;&nbsp;&nbsp; 系統(tǒng)調(diào)用msgsnd()的第一個參數(shù)是消息隊列標(biāo)識符,它是由系統(tǒng)調(diào)用msgget返回的。第二個參數(shù)是msgp,是指向消息緩沖區(qū)的指針。參數(shù)msgsz中包含的是消息的字節(jié)大小,但不包括消息類型的長度(4個字節(jié))。<br>&nbsp;&nbsp;&nbsp; 參數(shù)msgflg可以設(shè)置為0(此時為忽略此參數(shù)),或者使用IPC_NOWAIT。<p>&nbsp;&nbsp;&nbsp; 如果消息隊列已滿,那么此消息則不會寫入到消息隊列中,控制將返回到調(diào)用進(jìn)程中。如果沒有指明,調(diào)用進(jìn)程將會掛起,直到消息可以寫入到隊列中。<br>&nbsp;&nbsp;&nbsp; 下面是一個發(fā)送消息的程序:<p>intsend_message(int qid,struct mymsgbuf *qbuf)<br>{<br>intresult,length;<br>/*The length is essentially the size of the structure minus sizeof(mtype)*/<br>length=sizeof(structmymsgbuf)-sizeof(long);<br>if((result=msgsnd(qid,qbuf,length,0))==-1)<br>{<br>return(-1);<br>}<br>return(result);<br>}<p>&nbsp;&nbsp;&nbsp; 這個小程序試圖將存儲在緩沖區(qū)qbuf中的消息發(fā)送到消息隊列qid中。下面的程序是結(jié)合了上面兩個程序的一個完整程序:<p>#include&lt;stdio.h&gt;<br>#include&lt;stdlib.h&gt;<br>#include&lt;linux/ipc.h&gt;<br>#include&lt;linux/msg.h&gt;<br>main()<br>{<br>intqid;<br>key_t msgkey;<br>struct mymsgbuf{<br>longmtype;/*Message type*/<br>intrequest;/*Work request number*/<br>doublesalary;/*Employee's salary*/<br>}msg;<br>/*Generateour IPC key value*/<br>msgkey=ftok(&quot;.&quot;,'m');<br>/*Open/createthequeue*/<br>if((qid=open_queue(msgkey))==-1){<br>perror(&quot;open_queue&quot;);<br>exit(1);<br>}<br>/*Load up the message with a r bitrary test data*/<br>msg.mtype=1;/*Messagetypemustbeapositivenumber!*/<br>msg.request=1;/*Dataelement#1*/<br>msg.salary=1000.00;/*Data element #2(my yearly salary!)*/<br>/*Bombsaway!*/<br>

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线视频国产一区| 99久久婷婷国产精品综合| 欧美精品日韩综合在线| 亚洲成人av免费| 91精品国产综合久久婷婷香蕉| 视频一区中文字幕国产| 欧美一区二区三区成人| 国产又黄又大久久| 国产欧美日韩精品一区| 欧洲av一区二区嗯嗯嗯啊| 亚洲精选免费视频| 欧美日韩一区二区电影| 久久91精品久久久久久秒播| 久久久国产精品午夜一区ai换脸| 成人黄色av电影| 亚洲综合精品自拍| 精品免费视频一区二区| 99久久久无码国产精品| 日韩电影在线一区| 国产欧美日本一区视频| 欧美午夜电影网| 精品一区二区三区在线视频| 国产精品无圣光一区二区| 91福利国产精品| 久久99这里只有精品| 亚洲欧洲另类国产综合| 欧美一区二区三区在线视频| 高清不卡一区二区在线| 香蕉成人啪国产精品视频综合网 | 中文字幕va一区二区三区| 色拍拍在线精品视频8848| 免费观看在线综合色| 中文字幕在线观看一区| 日韩一级黄色片| 91福利资源站| 国产成人精品网址| 亚洲va韩国va欧美va精品| 国产午夜精品福利| 欧美日韩国产综合一区二区| 国产成人午夜高潮毛片| 亚洲成人午夜电影| 国产精品免费丝袜| 337p日本欧洲亚洲大胆精品| 91国产精品成人| 国产91富婆露脸刺激对白| 午夜精品久久久久久不卡8050| 中文久久乱码一区二区| 欧美成人综合网站| 欧美午夜片在线观看| 国产高清久久久| 精品制服美女久久| 亚洲第一会所有码转帖| 最新成人av在线| 国产日韩欧美激情| 26uuu精品一区二区三区四区在线| 在线中文字幕不卡| av亚洲产国偷v产偷v自拍| 国产高清久久久久| 国内精品伊人久久久久av影院 | 性久久久久久久久| 亚洲欧美日韩一区二区| 国产精品乱码一区二三区小蝌蚪| 日韩精品一区二| 日韩精品一区二区在线观看| 欧美高清视频不卡网| 欧美午夜精品一区| 91福利视频网站| 在线一区二区三区| 色婷婷av一区| 欧美性一区二区| 在线一区二区三区做爰视频网站| av网站免费线看精品| 波多野结衣中文一区| 成人亚洲精品久久久久软件| 国产99久久久国产精品潘金网站| 国产精品中文字幕日韩精品| 国产一区在线不卡| 国产成人精品影视| 高清日韩电视剧大全免费| 国产suv精品一区二区三区| 国产成人午夜99999| 成人一区二区三区视频| 成人av电影免费观看| 97aⅴ精品视频一二三区| 色综合久久中文综合久久97| 日本高清视频一区二区| 欧美狂野另类xxxxoooo| 欧美电影免费观看高清完整版在| 精品国产乱码久久久久久免费| 精品国产欧美一区二区| 国产人伦精品一区二区| 一色桃子久久精品亚洲| 亚洲最色的网站| 丝袜脚交一区二区| 久久精品国产一区二区| 国产精品一区二区三区四区| av中文字幕一区| 欧美亚洲高清一区| 日韩一卡二卡三卡四卡| 久久久久国色av免费看影院| 国产精品色哟哟网站| 亚洲午夜私人影院| 国产一区二区三区在线看麻豆| 成人激情午夜影院| 欧美午夜视频网站| www久久精品| 一区二区久久久| 麻豆91免费观看| av网站免费线看精品| 欧美二区三区的天堂| 国产日韩欧美精品综合| 亚洲一区在线免费观看| 国产真实精品久久二三区| www.66久久| 91精品国产综合久久精品app| 久久综合九色欧美综合狠狠 | 亚洲资源在线观看| 蜜臀久久99精品久久久久久9| 国产+成+人+亚洲欧洲自线| 91丨国产丨九色丨pron| 日韩欧美一二三| 亚洲精品视频免费看| 麻豆91免费观看| 欧美丝袜丝nylons| 日本一区二区综合亚洲| 日本成人在线一区| 91婷婷韩国欧美一区二区| 日韩欧美第一区| 一区二区三区欧美视频| 狠狠久久亚洲欧美| 欧美色倩网站大全免费| 欧美国产精品一区二区三区| 水野朝阳av一区二区三区| 不卡视频在线观看| 欧美电影免费提供在线观看| 亚洲综合视频网| 成人精品电影在线观看| 欧美成人三级电影在线| 亚洲国产成人porn| av不卡免费电影| 国产欧美一区二区三区沐欲| 久久爱另类一区二区小说| 欧美网站一区二区| 亚洲精品国产高清久久伦理二区| 国产一区二区三区高清播放| 日韩一级免费观看| 天天av天天翘天天综合网| 色综合咪咪久久| 综合婷婷亚洲小说| 不卡一二三区首页| 中文字幕精品在线不卡| 国产麻豆精品在线| 精品国产伦一区二区三区观看方式 | 99re热这里只有精品视频| 国产女人18水真多18精品一级做| 极品少妇xxxx偷拍精品少妇| 欧美一区二区视频观看视频| 日精品一区二区三区| 日本道精品一区二区三区| 日韩毛片视频在线看| www.欧美日韩| 国产精品国产馆在线真实露脸 | 亚洲少妇中出一区| 成人avav在线| 亚洲欧洲精品一区二区三区| 成人免费毛片高清视频| 欧美国产精品v| eeuss鲁片一区二区三区| 亚洲欧洲性图库| 91网站最新地址| 亚洲男人都懂的| 欧美亚洲综合一区| 日韩精品一级二级 | 亚洲自拍偷拍麻豆| 在线观看www91| 视频一区中文字幕国产| 日韩一区二区三区在线| 精品一区二区三区在线观看| 精品国产3级a| 成人午夜在线免费| 亚洲欧美经典视频| 欧美日韩综合不卡| 久久精品噜噜噜成人88aⅴ| 精品国产一区二区三区久久影院| 国产乱码字幕精品高清av| 欧美国产精品一区| 在线观看网站黄不卡| 天堂成人国产精品一区| 日韩美一区二区三区| 国产精品一区二区久激情瑜伽| 中文字幕中文字幕一区二区| 色拍拍在线精品视频8848| 午夜天堂影视香蕉久久| 欧美成人一区二区| 成人国产精品免费观看视频| 一区二区三区蜜桃| 欧美tickle裸体挠脚心vk| 不卡欧美aaaaa| 日本不卡视频一二三区| 精品国内片67194|