fork應用 子程序呼叫execve

2021-07-07 06:19:38 字數 1737 閱讀 1704

檔案

1.父程序中開啟乙個現有檔案123.c,fork出乙個子程序

2.子程序中呼叫execve函式,新的程序替換子程序

#include 

#include

#include

#include

#include

#include

#include

void main()

pid_t pid = fork();

if(pid == 0 )

;if( -1 == execve("read",argv,null))

}if(pid >0)

if(pid<0)

}

1.將fd 作為main 函式的引數傳遞給execve 呼叫的程序

2.讀取父程序中開啟的檔案123.c,由於fork出的子程序與父程序共享檔案描述符。只有父子程序中同時關閉fd才能真正關閉檔案,因為當前對檔案的引用計數為2。

#include 

#include

#include

#include

#include

int main(int argc,char* argv)

if(argv[1] == null)

int fd = atoi(argv[1]);

printf("file description is %d\n",fd);

char buf[1024];

memset(buf,0,sizeof(buf));

read(fd,buf,sizeof(buf));

printf("%s\n",buf);

close(fd);

return exit_success;

}

最後,附上makefile檔案

.suffixes

:.c .o

cc=gcc

srcs1=open.c

srcs2=read.c

objs1=$(

srcs1

:.c=.o)

objs2=$(

srcs2

:.c=.o)

exec1=open

exec2=read

start:

$(objs1) $(

objs2)

$(cc) -o $(

exec1) $(

objs1)

$(cc) -o $(

exec2) $(

objs2)

@echo

'---------------success---------------'

.c.o:

$(cc) -o $@ -c $<

.phony

: clean

clean:

-rm -f $(

objs1)

-rm -f $(

objs2)

-rm -f core*

說明1:.phony意思表示clean是乙個「偽目標」,。而在rm命令前面加了乙個小減號的意思就是,也許某些檔案出現問題,但不要管,繼續做後面的事。

說明2:clean的規則不要放在檔案的開頭,不然,這就會變成make的預設目標,不成文的規矩是——「clean從來都是放在檔案的最後」。

gdb 子程序 多程序 fork 除錯

標 題 faq 請問如何用gdb除錯子程序 發信站 bbs 水木清華站 mon may 19 18 17 02 2003 轉信 作個faq,在常見的x86平台上如何gdb除錯fork或者exec出來的子程序 1.在fork語句上設定斷點,修改fork返回的值。這種做法並沒有真正去 觸動已經存在的子程...

python程序之fork建立子程序

程式執 到os.fork 時,作業系統會建立 個新的程序 程序 然後複製 程序的所有資訊到 程序中 然後 程序和 程序都會從fork 函式中得到 個返回值,在 程序中這 個值 定是0,程序中是 程序的 id號 在unix linux作業系統中,提供了 個fork 系統函式,它 常特殊。普通的函式調 ...

使用fork迴圈建立子程序

假設父程序為 陽澄湖大龍蝦 那麼我接下來就建立5個子程序,分別為 皮皮蝦1號 皮皮蝦2號 皮皮蝦3號 皮皮蝦4號 皮皮蝦5號 陽澄湖大龍蝦這個主程序生了這麼多個兒子以後,有點累,需要休息一下 author kunshanpipixia include include include include ...