您的位置: 主页 > 管道修复 > 正文

管道修复

linux管道pipe详解(linux 管道)

本文目录

  • linux管道是干什么用的?
  • linux Write failed: Broken pipe一般都是什么原因导致的错误?
  • linuxC程序中如何获取shell的脚本输出呢?
  • 一天一点学习Linux之文件类型和后缀名?
  • 什么是无名管道?
  • fifo规则?

linux管道是干什么用的?

管道(pipe)是进程间通信的一种实现方式。在 Linux 系统中,管道本质上是一种特殊的文件,它的主要用途是实现进程间的通信。文中演示所用环境为 Ubuntu . desktop。

在 shell 中执行下面的命令:

$ echo abc | cat

echo 命令的输出通过管道作为了 cat 命令的输入。这里面的具体操作是由 shell 程序完成的。

管道的一个显著特点是:创建一个管道后,会获得两个文件描述符,分别用于对管道进行读取和写入操作。通常将这两个文件描述符称为管道的读取端和写入端,从写入端写入管道的任何数据都可以从读取端读取。

linux Write failed: Broken pipe一般都是什么原因导致的错误?

很多种原因:

1、网络通讯中,连接意外中断,比如被人拔了网线;

2、进程间通讯中管道断裂,譬如管道某一端进程僵死;

3、文件描述符终端,多见于*Nix,当退出登录时,虚拟终端断开,导致文件描述符1和2消失;

linuxC程序中如何获取shell的脚本输出呢?

你说的是Linux C程序获取shell脚本(命令)输出吧,这里简单介绍3种方式,分别是临时文件、匿名管道和popen函数,感兴趣的朋友可以尝试一下:

临时文件

这种方式最容易实现,基本思想是调用C语言标准库的system函数,运行shell命令或脚本,将输出结果重定向到一个临时文件中,然后读取临时文件,获取shell执行结果,测试代码如下,非常简单,输入参数分别为shell命令(脚本)和临时文件名,最终结果保存在临时文件中:

匿名管道

这种方式主要是管道,先pipe创建一个匿名管道,然后fork创建一个子进程,子进程运行shell命令或脚本,并将标准输出dup到匿名管道的写端,父进程再从匿名管道读端读取数据即可,测试代码如下,非常简单,子进程对应写端,父进程对应读端:

popen函数

这种方式最简单,C标准库专门提供了一个popen函数,可以非常简单的处理调用shell,基本思想创建一个管道,fork一个进程,然后执行shell,而shell的输出可以采用读取文件的方式获得,这种方式既避免了创建临时文件,又不受输出字符数的限制,推荐使用:

目前,就分享这3种Linux C程序获取shell脚本(命令)输出的方式吧,对于日常开发应用来说,完全够用了,只要你有一定的C语言基础,熟悉一下上面的代码,很快就能掌握的,网上也有相关教程和资料,介绍的非常详细,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言进行补充。

"

一天一点学习Linux之文件类型和后缀名?

linux常见的文件类型

一般的文件

这个就是我们通过ls -l列出来,第一栏第一个字符是-的文件,根据文件的内容也可以分几类:

纯文本文件(ASCII):这个就相当于记事本一样,称为纯文本文件,我们可以直接读取文件里面的内容。这种文件在linux系统中占很多。

二进制文件(binary):linux系统中的可执行文件(scripts)就是一个二进制的文件,而且这个文件要有x权限才能被执行。我们系统中的一些命令就是这类型的文件。

数据格式文件(data): 在linux系统中,有些程序在运行的时候会读取某些特定的数据库,这些文件就是数据文件。如我们前面讲的last命令,调用的就是/var/log/wtmp,如果我们用cat命令来查看/var/log/wtmp这个文件,你发现全是乱码。

关于一些其他的文件类型,如连接文件、设备文件、数据接口文件(sockets)、管道文件(pipe)等等,这些也是一些特殊的文件类型,我们只需要了解就OK了,在后面的学习中,见到的时候,你要知道他是什么东西就可以了。如果想更深入的学习,那就找相关的资料,慢慢研究,如,如何查看一个数据文件等。

linux文件的后缀名

我们在刚开始的时候也说过,在linux系统上,对这个后缀名要求并不像微软的win系统一样严格,只是为了方便确认文件是什么样的文件,才在后面加上了相应的后缀。如果一个文件能用cat命令读取里面的内容,我们改了后缀后,同样还是能用cat读取出来。

我们也知道,在微软的win系统上,常用的可执行文件一般就是以.com、.bat、.exe来结尾。而在我们的linux系统上就不一样了,什么样的文件我都可以给他加上X(可执行)权限,但能不能执行成功,就要看文件本身的内容了。这里面有重要的一点,就是可以被执行和可以执行成功是不一样的。例如,我们在root用户的家目录里面有个install.log文件,我们给他加上X权限,虽然是可以执行的文件,但执行后,没有什么结果,因为这个文件里面内容不是我们系统所能执行的,当然他是执行不成功啦!

所以说,为了方便我们认识系统中的文件是干吗的。linux系统还是会以相应的后缀名来表示文件的种类的。下面我们就看看一些常见的后缀

.sh : 这个通常是我们自己写的一些脚本(scripts)文件,一般都是通过shell写的,所以以.sh来表示。

.z,.tar,.tar,.gz,.zip,.tgz :这一类的文件就是压缩文件,只是采用的压缩方式不同而已。

.log : 这一类文件,就是一些日志文件。

.conf : 这类文件就是一些配置文件,这个在linux系统上见到的最多。

.rpm : 这是红帽的软件包,当然,不同的linux发行版本,他们使用的软件包的后缀是不一样的。

.php,.jsp,.html,.css : 这一类,都是网站类型的文件。

当然还有一些其它的后缀,没有什么太大的意义,只是为了我们方便识别,我们简单的了解一下。

这个长度已经很长了,足够我们用了。在后面的学习中,你会发现,linux系统上,很多软件的名字都很长,如果一个字一个字的打会很浪费时间,而且有时还会打错,这是不是太不方便了?当然不是啦,长文件名,有利于我们知道这个文件是干吗的(我是这么认为的),其实是在方便我们。为了不让我们打那么多的字,在linux系统上,有一个重要的功能键,那就是TAB,这个有补全作用,只要打前几个字,再按TAB,就补全了,如果按两次的话,会显示和这几个字相关的内容。哈哈,使用linux的朋友不知道这个功能,或不用会这个的话,那就太失败了!

linux系统中文件的命名规则

我们知道,在linux系统上,基本上都是用命令来操作的,我们所用的shell,自身就有很多的特殊字符,如果我们的文件名和这个shell里面的特殊字符一样的话,那就不好办了,所以我们在给文件起名的时候,在方便识别的同时,也要避免一些特殊字符,下面我们列举出来,代大家参考(并非不能命令这些字符,只是建议避免)。

什么是无名管道?

无名管道:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)。

单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。

数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。(有点像队列哈)

#include <unistd.h>

int pipe(int fd[2])

该函数创建的管道的两端处于一个进程中间,在实际应用中没有太大意义,因此,一个进程在由 pipe()创建管道后,一般再fork一个子进程,然后通过管道实现父子进程间的通信(因此也不难推出,只要两个进程中存在亲缘关系,这里的亲缘关系指的是具有共同的祖先,都可以采用管道方式来进行通信)。

向管道中写入数据时,linux将不保证写入的原子性,管道缓冲区一有空闲区域,写进程就会试图向管道写入数据。如果读进程不读走管道缓冲区中的数据,那么写操作将一直阻塞。

fifo规则?

1.从FIFO中读取数据:

约定:如果一个进程为了从FIFO中读取数据而阻塞打开了FIFO,那么称该进程内的读操作为设置了阻塞标志的读操作。

(1)如果有进程写打开FIFO,且当前FIFO为空,则对于设置了阻塞标志的读操作来说,将一直阻塞下去,直到有数据可以读时才继续执行;对于没有设置阻塞标志的读操作来说,则返回0个字节,当前errno值为EAGAIN,提醒以后再试。

(2)对于设置了阻塞标志的读操作来说,造成阻塞的原因有两种:一、当前FIFO内有数据,但有其它进程在读这些数据;二、FIFO本身为空。

解阻塞的原因是:FIFO中有新的数据写入,不论写入数据量的大小,也不论读操作请求多少数据量,只要有数据写入即可。

(3)读打开的阻塞标志只对本进程第一个读操作施加作用,如果本进程中有多个读操作序列,则在第一个读操作被唤醒并完成读操作后,其它将要执行的读操作将不再阻塞,即使在执行读操作时,FIFO中没有数据也一样(此时,读操作返回0)。

(4)如果没有进程写打开FIFO,则设置了阻塞标志的读操作会阻塞。

(5)如果FIFO中有数据,则设置了阻塞标志的读操作不会因为FIFO中的字节数少于请求的字节数而阻塞,此时,读操作会返回FIFO中现有的数据量。

2.从FIFO中写入数据:

约定:如果一个进程为了向FIFO中写入数据而阻塞打开FIFO,那么称该进程内的写操作为设置了阻塞标志的写操作。

FIFO的长度是需要考虑的一个很重要因素。系统对任一时刻在一个FIFO中可以存在的数据长度是有限制的。它由#define PIPE_BUF定义,在头文件limits.h中。在Linux和许多其他类UNIX系统中,它的值通常是字节,Red Hat Fedora9下是,但在某些系统中它可能会小到字节。

虽然对于只有一个FIFO写进程和一个FIFO的读进程而言,这个限制并不重要,但只使用一个FIFO并允许多个不同进程向一个FIFO读进程发送请求的情况是很常见的。如果几个不同的程序尝试同时向FIFO写数据,能否保证来自不同程序的数据块不相互交错就非常关键了à也就是说,每个写操作必须“原子化”。



本文目录

  • kk鲨鱼通渠水对管道有腐蚀作用吗?
  • kk鲨鱼疏通剂能家用吗?
  • kk鲨鱼管道疏通剂成分?
  • 英语的狗怎么读?

kk鲨鱼通渠水对管道有腐蚀作用吗?

适量的通渠水不会腐蚀管道,如果使用太多或者经常使用通渠水,就会腐蚀管道了。通渠水成分是哥士的,属碱性但具腐蚀性,通常遇水后会产生高热,溶解积聚渠内凝固油渍或其他淤积物。一般用来疏通管道、厕所和堵塞的下水通道等。

kk鲨鱼疏通剂能家用吗?

根据我的了解,KK鲨鱼疏通剂是一种专业的管道疏通剂,主要用于清除堵塞的管道。虽然它可能在家庭使用中起到一定的效果,但由于其强力的化学成分,使用时需要非常小心。建议在使用之前仔细阅读产品说明,并按照说明进行操作。此外,如果遇到严重的管道堵塞问题,最好还是请专业的管道疏通服务人员进行处理,以确保安全和有效性。

kk鲨鱼管道疏通剂成分?

它的主要成分有氢氧化物、碳酸钠、次氯酸钠、铝粉、三聚磷酸钠和表面活性剂等。

一般在使用管道疏通剂时,需要把g疏通剂和g的水混合,搅匀后等待十分钟让其充分反应,接着再倒入g疏通剂和g的水,再等待十分钟,就可以倒入下水道中。

英语的狗怎么读?

dog

KK: []

DJ: []

n.[C]

1. 狗

He keeps a dog to guard the house.

他养一条狗看家。

2. 雄狗;(狐、狼等的)雄兽

3. 【口】家伙

He is a lucky dog.

他是一个幸运的家伙。

4. 【口】无赖,流氓

5. 【美】【俚】失败;失望

6. 【美】【俚】蹩脚货;丑女人

vt.

1. (灾难等)缠住

Injuries dogged the football team all season.

这个橄榄球队整个赛季都为队员受伤而困扰。

2. 尾随,跟踪

The police dogged the suspected thief.

警察跟踪偷窃嫌疑犯。

ad.

1. 极度地,非常

你是不是需要动物的英语名称啊?

我想应该很全了的!!!

adder, viper 蝰蛇

albatross 信天翁

alligator 短吻鳄, 美洲鳄

alpaca 羊驼

anchovy 凤尾鱼

anglerfish 安康鱼

anopheles 按蚊,疟蚊

ant 蚂蚁

anteater 食蚁兽

antilope 羚羊

armadillo 犰狳

ass, donkey 驴

badger 獾

bald eagle 白头鹰

bat 蝙蝠

bear 熊

beaver 河狸

bedbug, bug 臭虫

bee, honeybees 蜜蜂

beetle 甲虫, 金龟子

billy 雄山羊

bird of paradise 极乐鸟, 天堂鸟

bison 美洲野牛

bitch 雌狗

blackbird 乌鸫

boa 王蛇

boar 雄猪, 种猪

brood 鸡的统称

buck 公兔

buffalo 水牛

bull, ox 雄牛

bullfrog 牛蛙

bullock, steer 小阉牛

bumble bee 大黄蜂

butterfly 蝴蝶

cabbage butterfly 纹白蝶

caiman, cayman 凯门鳄

calf 小牛, 牛犊

calf( pl. calves) 年幼的牛

camel 骆驼

canary 金丝雀

carp 鲤鱼

cat 猫

caterpillar 毛虫

catta 雌猫

cattle 牛

centipede 蜈蚣

chaffinch 苍头燕雀

chameleon 变色龙,避役

chick 小鸡

chicken 鸡, 雏鸡

chimpanzee 黑猩猩

chinchilla 南美栗鼠

chub 鲢鱼

cicada 蝉

clam 蚌

cob 雄天鹅

cobra 眼镜蛇

cock 公鸡

cock,rooster 公鸡

cockatoo 大葵花鹦鹉

cockle 鸟蛤

cockroach 蟑螂

cod 鳕鱼

colt, foal 马驹,小马

condor 秃鹰

copperhead 美洲腹蛇

coral snake 银环蛇

cormorant 鸬鹚

cow 雌牛, 母牛

crab 蟹

crayfish 小龙虾, 喇蛄

cricket 蟋蟀

crocodile 鳄鱼, 非洲鳄

crow 乌鸦

crucian 鲫鱼

cuckoo 杜鹃,布谷鸟

cuttloefish 乌贼

cygnet 小天鹅

deer 鹿

dog 狗

dog 雄狗

dolphin 河豚

donkey, ass 驴

dormouse 睡鼠

dove 鸽

dragonfly 蜻蜓

dromedary 单峰驼

drone 雄蜂

duck 鸭

duckbill, platypus 鸭嘴兽

eagle 鹰

eel 鳗鱼

elephant 象

ewe 母羊

ferret 雪貂

flea 跳蚤

flock 绵羊的统称

fly 苍蝇

foal, colt, filly 幼马

fox 狐

frog 青蛙

gaggle 鹅的统称

gander 雄鹅

gander, wild goose 雁

gannet 塘鹅

gavial 印度鳄

gazelle 小羚羊

gelding 阉割的马

giant salamander 娃娃鱼, 鲵

gibbon 长臂猿

gilt 小母猪

giraffe 长颈鹿

glowworm, firefly 萤火虫

goat 山羊

golden eagle 鹫

goldfinch 金翅雀

goose 雌鹅

goose 鹅

gopher 囊地鼠

gorilla 大猩猩

gosling 幼鹅

grass snake 草蛇

grasshopper 蚱蜢

grouse 松鸡

guanaco 原驼

Guinea pig 豚鼠

guinea, fowl 珍珠鸡

gull, seagull 海鸥

hake 无须鳕

hare 野兔

hawk, falcon 隼

hedgehog 刺猬

heifer 小母牛

hen 母鸡

herd 牛的统称

herd 猪的统称

hermit crab 寄居蟹

heron 苍鹰

herring 青鱼, 鲱

hinny 驴骡

hippopotamus 河马

hog 阉猪, 肥猪

horse 马

horsefly, gadfly 厩蝇,牛虻

hummingbird 蜂雀

hyena, hyaena 鬣狗

iguana 鬣蜥

Japanese beetle 日本金龟子

jenny ass 雌驴

kangaroo 袋鼠

kid 年幼的山羊

kingfisher 翠鸟

kite 鹞

kitten 小猫

kitten, kitty, pussy 小猫

koala 考拉, 树袋熊

ladybird 瓢虫

lamb 羊羔,羔羊

large prawn 大对虾

lark 百鸟,云雀

leopard 豹

lion 狮

lizard 蜥蜴

llama 大羊驼

lobster 龙虾

locust 蝗虫

louse, lice 虱子, 白虱

lynx 猞猁

macaw 金刚鹦鹉

mackerel 鲭,鲐

magpie 喜鹊

male ant 雄蚁

mallard 野鸭, 凫

mare 母马

marmot 土拨鼠

moccasin 嗜鱼蛇

mole 鼹鼠

monkey 猴子

mosquito 蚊

moth 蛾

mouse 家鼠

mule 骡

mullet 乌鱼, 黑鱼

mussel 淡菜,贻贝

mustang 野马

mutton 羊肉

nanny 雌山羊

nightingale 夜莺

Norway lobster 蝉虾

octopus 章鱼

orangutan 猩猩

ostrich 鸵鸟

otter 水獭

owl 枭,猫头鹰

ox 牛

oyster 牡蛎

pale clouded yellow 纹黄蝶

panther, puma 美洲豹

parakeet 长尾鹦鹉

parrot 鹦鹉

partridge 石鸡, 鹧鸪

peacock 孔雀

pelican 鹈鹕

penguin 企鹅

perch 鲈鱼

pheasant 雉, 野鸡

pig, swine 猪

pigeon 野鸽

piglet, shoat 年幼的猪

pike 梭子鱼

plaice 鲽

plover 千鸟

pony 矮马

porcupine 箭猪, 豪猪

porpoise 大西洋鼠海豚

poult 小火鸡

prawn 虾

praying mantis 螳螂

ptarmigan 雷鸟

pup 年幼的狗

python 蟒蛇

quail 鹌鹑

queen ant 蚁后

queen bee 蜂王

rabbit 兔

rabbit 兔子

ram 雄绵羊

rat 鼠

rattlesnake 响尾蛇

ray 鳐鱼

red mullet, surmullet 羊鱼

reindeer 驯鹿

rhinoceros 犀牛

robin 知更鸟

sailfish 旗鱼

salamander, triton, newt 蝾螈

salmon 鲑鱼

sardine 沙丁鱼

scallop 扇贝

scops owl 角枭,耳鸟

scorpion 蝎子

sea bream 海鲷

sea horse 海马

sea turtle 海龟

sea urchin 海胆

seal 海豹

shark 鲨鱼

sheep 绵羊

shrimp 对虾

silkworm moth 蚕蛾

silverfish 蠹虫

skipjack 鲣鱼

sloth 獭猴

snail 蜗牛

snake 蛇

snipe 鹬

sole 舌鳎

sow 雌猪

sparrow 麻雀

spider 蜘蛛

spider crab 蜘蛛蟹

spiny lobster, rock lobster 大螯虾

squid 枪乌贼,鱿鱼

squirrel 松鼠

stallion 雄马

starling 八哥

stink bug 椿象

stork 鹳

sturgeon 鲟鱼

sulphur butterfly 白蝴蝶

sunfish 翻车鱼

swallow 燕子

swallowtail 凤尾蝶

swan 天鹅

swift 褐雨燕

swordfish 剑鱼

tabby, she-cat, grimalkin 雌猫

tarantula 多毛毒蜘蛛

tarpon 大海鲢

teal 小野鸭

termite 蚁

thoroughbred 纯种马

thrush 画眉

tiger 虎

toad 蟾蜍

tom 雄火鸡

tomcat 雄猫

tomcat 雄猫, 公猫

tortoise 玳瑁

trout 鳟鱼

tuatara 古蜥蜴

tunny, tuna 金枪鱼

turbot 大菱鲆

turkey 火鸡

turtle 龟

turtle dove 斑鸠

vicuna 小羊驼

vole 田鼠

vulture 秃鹫

wall lizard 壁虎

walrus 海象

wasp 黄蜂, 胡蜂

water buffalo 水牛

weasel 鼬,黄鼠狼

whale 鲸

white ant 白蚁

whitethroat 白喉雀

whiting 小无须鳕

wiggler 孑孓

wildcat 野猫

wolf 狼

woodcock 山鹬

woodpecker 啄木鸟

worker ant 工蚁

yak 牦牛

yak 牦牛

zebra 斑马



本文目录

服务项目

电话
预约下单