linux:exec族函数, exec族函数配合fork使用,system 函数,popen 函数
1、exec族函數(shù)
精彩博文: https://blog.csdn.net/u014530704/article/details/73848573
?
??
??
path:? ?比如說 ./a.out
arg:? 比如以前的cp demo11.c demo12.c
?首先在系統(tǒng)中編譯很多的可執(zhí)行程序
?
我希望呢,11運(yùn)行到一半的時(shí)候? ?或者? 發(fā)生某些情況的時(shí)候 11會(huì)去調(diào)用12,讓12去運(yùn)行
?
?./bin/echoarg :路徑名
第一個(gè)參數(shù)程序名:echoarg
真正的參數(shù)是 :abc
然后參數(shù)必須以NULL結(jié)尾
?
argc 是參數(shù)的個(gè)數(shù),把每個(gè)參數(shù)打出來
?
比如我們加file1? file2
?
??
?我希望編譯出來的a.out 在執(zhí)行一半的時(shí)候 會(huì)調(diào)用echoarg,怎么辦呢?
用下面的代碼
?
?執(zhí)行失敗返回值是-1;會(huì)打印execl failed!然后打印after execl?
執(zhí)行成功的話,后面那一句(after execl)根本就不會(huì)得到執(zhí)行
?
如何找到失敗的原因呢?
?
?根據(jù)返回值的特性
?
?
?(perror 的用法)
里面說了沒有這個(gè)文件或者目錄
./bin/echoarg
調(diào)用的是bin底下的
./當(dāng)前文件底下的bin文件夾底下的echoarg
echoarg 直接在當(dāng)前路徑
去掉bin就好啦
?
?
?after execl?在這里就不執(zhí)行啦
那可不可以調(diào)用ls 呢?(echoarg是可執(zhí)行程序,ls 也是可執(zhí)行程序)
?
?先找ls 的絕對(duì)路徑
?
等同于我們做了個(gè)ls
?
如果我們想調(diào)用ls -l 呢?只要在后面?zhèn)鲄⒕涂梢岳?/h3>
如果我們想調(diào)用ls -l 呢?只要在后面?zhèn)鲄⒕涂梢岳?/span>
?
?
好處是什么呢?
假如讓你用c 語言獲取系統(tǒng)的時(shí)間
你不會(huì)獲取系統(tǒng)的的時(shí)間怎么辦?
獲取時(shí)間有個(gè)指令date
?
代碼如下,先看date 的絕對(duì)路徑
?
??
??
?2、帶個(gè)p的exec族函數(shù)
假如我現(xiàn)在要用ps? ?可是還要whereis ps
?
?這樣很麻煩
?
??
我如果把絕對(duì)路徑去掉會(huì)發(fā)生什么事呢?
?
?找不到
??
但是加個(gè)p就可以啦
?
?
那加p是什么意思呢?
?
查找當(dāng)前的環(huán)境變量
?
比如我在當(dāng)前目錄,可以執(zhí)行rechoarg
?
換個(gè)目錄就不管用了
?
?那有什么辦法讓這個(gè)路徑下也運(yùn)行echoarg 呢?
我們可以把他配置到環(huán)境變量里面去
pwd顯示當(dāng)前路徑
修改環(huán)境變量?
原先的可以手動(dòng)copy進(jìn)來,也可以直接引用PATH后面加冒號(hào)
見證奇跡
都不需要用 ./ 了?
都不需要用 ./ 了?
我回到工作目錄并不在那個(gè)目錄底下
環(huán)境變量:
綠色的都可以執(zhí)行的
所以只寫一個(gè)ps 沒有關(guān)系 ,他會(huì)找到環(huán)境變量底下的ps
看這個(gè)環(huán)境變量
bin加進(jìn)來了 ,目錄bin底下
補(bǔ)充:
?3、帶個(gè)v的exec族函數(shù)
只不過把我們寫的參數(shù)放到上面來
?運(yùn)行的結(jié)果都是一樣的只不過使用的方式不一樣而已
如果用execv 呢?
v對(duì)比vp需要加個(gè)絕對(duì)路徑
????????
這是沒加的? ? ? ? ? ? ? ? ? ? ? ??
找不到文件
加完以后
?
4、exec配合fork使用
?先找到需要的內(nèi)容? ?用grep?
然后
?把上面這個(gè)代碼插入到下面
粘貼文件
太麻煩了,如果用exec族函數(shù)的話
復(fù)制的過程
復(fù)制的過程
? ? ? ? ? 代碼如下
這是開始的狀態(tài)? ? ? ? ? ? ??
這是運(yùn)行完的結(jié)果
5、system 函數(shù)
linux system函數(shù)詳解 - 南哥的天下 - 博客園
返回一個(gè)整型數(shù),參數(shù)是一個(gè)char 型的指針(字符串)
執(zhí)行一個(gè)shell 指令
之前我們都習(xí)慣./11 執(zhí)行這個(gè)文件
也可以sh -c ./11 執(zhí)行這個(gè)文件
?
再來弄一個(gè)
?原代碼
結(jié)果
system 還會(huì)返回原程序中,執(zhí)行后面的代碼
如果我寫錯(cuò)了呢?
6、popen函數(shù)
linux下popen的使用心得_libinbin_1014的專欄-CSDN博客_linux popen
?
如果想要把他的值保存到文件,或者她運(yùn)行的結(jié)果放到字符串里面,通過網(wǎng)絡(luò)發(fā)出去,怎么辦?
?
?數(shù)據(jù)都流失了
?
?
?那么如何讀取流中間的數(shù)據(jù)呢?
如果我不把結(jié)果輸出呢?
?什么都沒輸出
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的linux:exec族函数, exec族函数配合fork使用,system 函数,popen 函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 优盘属性怎么没找到安全选项 如何在优盘属
- 下一篇: 解压iso到u盘怎么做 ISO文件如何解