日韩在线免费播放-日韩在线免费av-日韩在线免费-日韩在线毛片-国产高清不卡视频-国产高清不卡

Hi,歡迎來(lái)到嵌入式培訓(xùn)高端品牌 - 華清遠(yuǎn)見(jiàn)教育科技集團(tuán)<北京總部官網(wǎng)>,專(zhuān)注嵌入式工程師培養(yǎng)15年!
當(dāng)前位置: > 華清遠(yuǎn)見(jiàn)教育科技集團(tuán) > 嵌入式學(xué)習(xí) > 講師博文 > 命名管道的簡(jiǎn)單使用
命名管道的簡(jiǎn)單使用
時(shí)間:2017-01-05作者:華清遠(yuǎn)見(jiàn)

區(qū)別于無(wú)名管道,命名管道可以用于沒(méi)有親緣關(guān)系的進(jìn)程之間進(jìn)行通信,且命名管道在一些特點(diǎn)上更類(lèi)似于文件,其具有文件名,文件屬性及存放路徑等信息,也就是說(shuō)利用命名管道進(jìn)行操作后,我們可以在相應(yīng)的路徑下查找到它,更方便編程的需要和操作,且命名管道嚴(yán)格地遵循先進(jìn)先出原則。

命名管道在創(chuàng)建成功后,就可以與普通文件的開(kāi)發(fā)設(shè)置一樣了,下面通過(guò)一個(gè)例子我們來(lái)說(shuō)明一下命名管道的使用及注意事項(xiàng),假設(shè)情境:我們需要兩個(gè)進(jìn)程進(jìn)行數(shù)據(jù)的交換,那么創(chuàng)建命名管道后,一個(gè)進(jìn)程負(fù)責(zé)向管道內(nèi)寫(xiě)入數(shù)據(jù),另一個(gè)進(jìn)程負(fù)責(zé)由管道讀出數(shù)據(jù)。代碼段如下:

//寫(xiě)端代碼
        #include <stdio.h>
        #include <stdlib.h>
        #include <sys/types.h>
        #include <sys/stat.h>
        #include <fcntl.h>

int main()
        {
                int ret;
                int fd;

                ret=mkfifo("fifo",0644);        //創(chuàng)建命名管道
                if(ret<0)                                //管道是否創(chuàng)建成功,不成功則退出程序
                {
                        perror("fifo error\n"); 
                        exit(-1);
                }

                fd = open("fifo",O_WRONLY);        //打開(kāi)管道文件
                if(fd<0)                                        //打開(kāi)是否成功,不成功則退出程序
                {
                        perror("open error\n");
                        exit(-1);
                }

        write(fd,"hello",6);                //進(jìn)行寫(xiě)端操作
                close(fd);
                unlink("fifo");                        //刪除命名管道 *
                return 0;
        }

//讀端代碼
        #include <stdio.h>
        #include <stdlib.h>
        #include <sys/types.h>
        #include <sys/stat.h>
        #include <fcntl.h>

int main()
        {
                int fd;
                char str[20];

                fd = open("fifo",O_RDONLY);                //打開(kāi)管道文件
                if(fd<0)                                                //打開(kāi)是否成功,不成功則退出
                {
                        perror("open error\n");
                        exit(-1);
                }

        read(fd,str,sizeof(str));                 //進(jìn)行讀取操作
                printf("%s\n",str);                        //將讀取到的數(shù)據(jù)進(jìn)行打印輸出
                close(fd);
                return 0;
        }

上述兩個(gè)程序分別編譯鏈接成可執(zhí)行程序,且同時(shí)運(yùn)行于2個(gè)終端上,進(jìn)行執(zhí)行效果的觀察。

命名管道在使用時(shí),需要尤其注意以下3點(diǎn),大家可以對(duì)照上面的程序段體會(huì):

1、管道創(chuàng)建成功后,可以像操作普通文件一樣進(jìn)行操作,但是,兩個(gè)進(jìn)程打開(kāi)一個(gè)命名管道的時(shí)候,必須分別以”只“的方式打開(kāi),且必須相反,即一個(gè)進(jìn)程以只讀方式打開(kāi),另一進(jìn)程以只寫(xiě)方式打開(kāi)。

2、在終端上單獨(dú)運(yùn)行寫(xiě)端程序時(shí),會(huì)發(fā)現(xiàn),終端無(wú)任何反應(yīng),而讀端程序一旦開(kāi)始運(yùn)行,則兩個(gè)程序同時(shí)結(jié)束,說(shuō)明命名管道只打開(kāi)一端的話是無(wú)法成功的,此時(shí)open是無(wú)法正常返回的,也就是說(shuō)管道兩端需要同時(shí)打開(kāi),這也是命名管道的一個(gè)特點(diǎn)。

3、寫(xiě)端代碼中標(biāo)記為“*”的語(yǔ)句作用為刪除命名管道,可將該句暫時(shí)注釋掉,則在程序結(jié)束后,可在當(dāng)前路徑下可以找到一個(gè)名為“fifo”的文件,且其文件屬性為“p”,為管道類(lèi)型文件,這也是區(qū)別于無(wú)名管道的一大特點(diǎn),使用結(jié)束后可以找到具體文件,所以命名管道是可以應(yīng)用于無(wú)親緣關(guān)系的進(jìn)程間的。

另外,在創(chuàng)建管道的時(shí)候,如果指定路徑下存在一個(gè)與命名管道同名的文件,則編譯器提示命名管道未創(chuàng)建成功,為避免后期使用出現(xiàn)問(wèn)題,通常在使用命名管道后予以刪除操作。

發(fā)表評(píng)論
評(píng)論列表(網(wǎng)友評(píng)論僅供網(wǎng)友表達(dá)個(gè)人看法,并不表明本站同意其觀點(diǎn)或證實(shí)其描述)
主站蜘蛛池模板: 韩诗雅| 欧比旺·克诺比| 幸福年民乐合奏曲简谱| 十八岁在线观看| 卫途轮胎| 阴阳界 电影| 米娅华希科沃斯卡| douyin| 四大美人之貂蝉香港剧| 新人类男友会触电电视剧免费观看全集 | 朱莉安妮全集高清免费| mariaarredondo| 林美娇最惊艳的十部电影| 蜜桃成熟时在线看| 暗夜与黎明电视连续剧| 贵阳银行客服电话24小时人工服务| 迷宫法国电影| 头像图片2024最新款女| 王家卫作品| 挠丝袜| 视频爱爱| av电影网| 我的刺猬女孩大结局| 偏偏喜欢你演员表| 昆虫记读书笔记摘抄| 牛素云| 桑叶电影| 经济合同法| 红岩电影| 法尔| 流行歌简谱| 算24点| 江湖之社团风暴| 敬天法祖| 五上语文第六单元口语交际| 黑暗时刻| 敬天法祖| 搜狐视频官网| 男上女下动态视频| 色女在线| 女人香韩国电影|