本文目录
管道(pipe)是进程间通信的一种实现方式。在 Linux 系统中,管道本质上是一种特殊的文件,它的主要用途是实现进程间的通信。文中演示所用环境为 Ubuntu . desktop。
在 shell 中执行下面的命令:
$ echo abc | cat
echo 命令的输出通过管道作为了 cat 命令的输入。这里面的具体操作是由 shell 程序完成的。
管道的一个显著特点是:创建一个管道后,会获得两个文件描述符,分别用于对管道进行读取和写入操作。通常将这两个文件描述符称为管道的读取端和写入端,从写入端写入管道的任何数据都可以从读取端读取。
很多种原因:
1、网络通讯中,连接意外中断,比如被人拔了网线;
2、进程间通讯中管道断裂,譬如管道某一端进程僵死;
3、文件描述符终端,多见于*Nix,当退出登录时,虚拟终端断开,导致文件描述符1和2消失;
你说的是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常见的文件类型
一般的文件
这个就是我们通过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将不保证写入的原子性,管道缓冲区一有空闲区域,写进程就会试图向管道写入数据。如果读进程不读走管道缓冲区中的数据,那么写操作将一直阻塞。
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鲨鱼疏通剂是一种专业的管道疏通剂,主要用于清除堵塞的管道。虽然它可能在家庭使用中起到一定的效果,但由于其强力的化学成分,使用时需要非常小心。建议在使用之前仔细阅读产品说明,并按照说明进行操作。此外,如果遇到严重的管道堵塞问题,最好还是请专业的管道疏通服务人员进行处理,以确保安全和有效性。
它的主要成分有氢氧化物、碳酸钠、次氯酸钠、铝粉、三聚磷酸钠和表面活性剂等。
一般在使用管道疏通剂时,需要把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 斑马
本文目录