// 檔案demo.c
#include
#include
#include
#include
#include
#include
#include
intmain()
if(pid ==0)
}else
}return0;
}
//檔案changdata.c
#include
#include
#include
#include
#include
#include
#include
intmain
(int argc,
char
**ar**)
fdsrc =
open
("config.txt"
,o_rdwr)
;int size =
lseek
(fdsrc,0,
seek_end);
lseek
(fdsrc,0,
seek_set);
char
*readbuf =
(char*)
malloc
(sizeof
(char
)* size +8)
;read
(fdsrc,readbuf,size)
;char
*p =
strstr
(readbuf,
"leng=");
if(p ==
null)
p = p +
strlen
("leng=");
*p =
'5';
// 注意:寫到檔案裡的都是字元
lseek
(fdsrc,0,
seek_set);
write
(fdsrc,readbuf,
strlen
(readbuf));
close
(fdsrc)
;return0;
}
//檔案config.txt
speed=
3leng=
3score=
9level=
5
說明:我們先用gcc編譯changdata.c,生成可執行檔案changdata並放在當前路徑 下。檔案changdata.c的作用是修改配置檔案config.txt。然後再編譯demo.c並執行a.out可執行檔案。這樣就實現了當父程序檢測到輸入為1的時候,建立子程序把配置檔案的字段值改掉的功能 fork函式 exec函式
fork 會產生乙個和父程序完全相同的子程序,出於效率考慮,linux中引入了 寫時複製 技術,也就是只有程序空間的各段的內容要發生變化時,才會將父程序的內容複製乙份給子程序。在fork之後exec之前兩個程序用的是相同的物理空間 記憶體區 子程序的 段 資料段 堆疊都是指向父程序的物理空間,也就是...
exec函式族筆記
include extern char environ int execl const char path,const char arg,int execv const char path,char const argv int execle const char path,const char a...
exec族函式總結
1 execve為系統呼叫 其他的都是封裝的函式 l 引數列表 p 在環境變數path中尋找 v 引數陣列 e 替換環境變數列表 返回值 函式出錯 返回0 否則不反回 原來的使用者區已經被替換 只留下pcb所以沒有返回的地方 exec族函式只替換使用者區 但是對核心區的pcb也有一定的影響 詳見 a...