在linux中,如果要把幾個可執行程式結合起來使用,一般是採用shell或者perl,當然,python也可以。
這裡說一下在perl裡嵌入shell命令的情形。
一般來說,最簡單的方式就是採用「(qx//)就可以執行命令
12
$cmd = "du * sh";`$cmd
`;
這樣命令就執行了,但是卻並沒有輸出。要輸入的話,簡單的可以這麼處理:
1
print `$cmd
`;
這裡,如果程式有輸入,那就不行了,後面再細說。
下面看看另外一種方式,即system執行命令,它可以返回程式的退出狀態,也就是說它可以判斷程式執行是否成功,我們也可以拿它來做個有趣的東西,看下面的程式:
1234567
8
#include
using
namespace std;
int main(
int argt, char
* argv)
這是乙個c++程式,我們把程式的退出狀態設定為輸入引數的第1和第2個引數的第乙個字元代表的數字的和。通過g++,我們把它編譯為add程式: g++ add.cc -o add
那麼利用perl的system函式,就可以捕獲這一退出狀態:
1234
#!/usr/bin/perl $a=1;$b=
3;print
system
("./add $a $b"
);
輸出4也就是說我們可以利用其他程式來為perl做計算,這個是不是有點像dll的味道? :)
但是這裡有個缺點,就是程式的退出狀態必須是整數。
那麼perl是不是就沒辦法做這件事了呢? 我要說是,很多perl的fans肯定不樂意了,既然perl強大,我們就見識一下它怎麼來做這件事吧
我們把那個c++程式改一改:
123456
#include
using
namespace std;
int main(
int argt, char
* argv)
我們用這個程式來輸出第乙個引數的第乙個字元的ascii碼,在perl裡我們這麼來使用:
12345
#!/usr/bin/perl$a="a";$b=
`./add $a`
;print$a,
":",$b,
"n";
輸出 a:97
怎麼樣,是不是更有dll的味道了?
最後來說一下如果呼叫的程式裡有輸入,又該怎麼處理呢? 我們再把c++程式改一改
1234567
89
#include
using
namespace std;
int main(
)
這個程式讓使用者手動輸入字元,列印字元的ascii碼,來看在perl中的呼叫
12345
#!/usr/bin/perl$cmd
="./add"
;open
(cmd,
"($cmd) |");
while()
#一行一行地輸出
close(cmd);
輸出:
input a char:解釋一下為什麼第乙個endl很重要,因為在輸出的時候,無法同時處理輸入和輸出,所以加換行,讓輸入單獨在一行。a97
在C 程式中嵌入Perl
perl 庫一般在這樣的資料夾下 usr local lib perl5 your architecture here core 可以這樣得到它的位置 perl mconfig e print config 編譯的時候要這樣 gcc o2 dbool char dhas bool i usr loc...
在Perl中使用shell命令和管道
在perl中使用shell命令有三種方法 第一種方法,system函式格式如下 system command 若命令正常執行則返回0,否則返回非零值 此方法的缺點是不能將shell命令的輸出直接捕獲到perl程式中來 第二種方法,使用反引號 可直接將shell命令的輸出捕獲到perl程式中 即其返回...
Perl呼叫shell命令方法小結
一 system perl也可以用system呼叫shell的命令,它和awk的system一樣,返回值也是它呼叫的命令的退出狀態.複製 如下 root ax3sp2 cat aa.pl usr bin perl w file wt.pl system ls l wt.pl result syste...