通過execve實現不同程序間檔案描述符的共享

2021-09-30 12:37:35 字數 1818 閱讀 7216

環境:vmware workstation;centos-6.4-x86_64

程式的實現原理:

在myexecve中得到檔案的描述符,通過execve函式,傳遞檔案的描述符到程式other中,隨後通過程式other替換程式myexecve,最後實現不同程序之間完成共享檔案描述符的操作。

步驟:

1、編寫makefile檔案:

.suffixes:.c .o

cc=gcc

srcs1=main.c

objs1=$(srcs1:.c=.o)

exec1=main

srcs2=other.c

objs2=$(srcs2:.c=.o)

exec2=other

start: $(objs1) $(objs2)

$(cc) -o $(exec1) $(objs1)

$(cc) -o $(exec2) $(objs2)

@echo "-----------------------------ok-----------------------"

.c.o:

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

clean:

rm -rf $(exec1) $(objs1)

rm -rf $(exec2) $(objs2)this is some words.

3、編寫原始檔other.c:

#include #include #include #include int main(int arg, char *args)

4、編寫原始檔main.c:

#include #include #include #include #include #include #include int main(void)

// 定義乙個字元陣列用來儲存檔案描述符

char file_tar[10];

// 初始化字元陣列

memset(file_tar, 0, sizeof(file_tar));

// 將檔案描述符轉成字串

sprintf(file_tar, "%d", fd);

// 定義乙個字元指標陣列,作為execve函式的引數

// 設定字元指標陣列的第乙個引數是程式的名字

// 設定字元指標陣列的第二個引數是檔案操作符

// 設定字元指標陣列的第三個引數是null

char *char_str[3] = ;

// 通過函式execve呼叫程式other

execve("other", char_str, null);

// 關閉檔案描述符

close(fd);

return 0;

}

5、編譯並執行程式:

[negivup@negivup mycode]$ make

gcc -wall -o main.o -c main.c

gcc -wall -o other.o -c other.c

gcc -o main main.o

gcc -o other other.o

-----------------------------ok-----------------------

[negivup@negivup mycode]$ ./main

this is some words.

可以從程式的執行效果中看出,兩個程序之間共享了檔案描述符。

不同進製間的轉換

1 其他進製到十進位制 係數 就是每乙個位上的數值 基數 x進製的基數就是x 權 對每乙個位上的資料,從右,並且從0開始編號,對應的編號就是該資料的權。結果 係數 基數 權次冪之和。2 十進位製到其他進製 除基取餘,直到商為0,餘數反轉。3 進製轉換的快速轉換法 a 十進位制和二進位制間的轉換 84...

使用有名管道在不同程序間複製檔案

複製端,開啟檔案,並將檔案中資料 寫入管道檔案中 include include include include include include define cpy tmp cpy int main int argc,char const argv while 1 printf 寫入完成 n re...

程序間通訊之協同程序

unix系統過濾程式從標準輸入讀取資料,對其進行適當處理後寫到標準輸出。幾個過濾程式通常在shell管道命令列中線性地連線。當乙個程式產生某個過濾程式的輸入,同時又讀取該過濾程式的輸出時,則該過濾程式就成為協同程序 coprocess korn shell提供了協同程序。bourne shell b...