1. 程式人生 > >基礎I/O口和動靜態庫的生成

基礎I/O口和動靜態庫的生成

一·動靜態庫

1.先編寫原始檔和標頭檔案:add.c ,sub.c,mul.c,div.c,math.h

 
math.h
  1 #ifndef __MYMATH_H__
  2 #define __MYMATH_H__
  3 int add(int x,int y);
  4
  5 int sub(int x,int y);
  6
  7 int mul(int x,int y);
  8
  9 int div(int x,int y);
 10 #endif //__MYMATH_H__

2.動靜態庫的生成

(1)將所有的.c檔案生成.o檔案

(2)makefile自動生成動靜態庫

  1 libmymath.a libmy.so:add.o sub.o mul.o div.o
  2     ar -rc libmymath.a $^
  3     gcc -fPIC -shared -o libmy.so $^
  4 add.o sub.o mul.o div.o:add.c sub.c mul.c div.c
  5     gcc -c add.c -o add.o -g
  6     gcc -c sub.c -o sub.o -g
  7         gcc -c mul.c -o mul.o -g
  8   gcc -c div.c -o div.o -g

3.使用libmymath.alibmy.so的方法

先編寫一個test.c檔案,裡邊用到該靜態庫中的函式

靜態庫(mymath.a):  gcc  test.c  -I./   -L./  -lmymath  

說明:-I  後邊跟標頭檔案的路徑,如果不寫,預設在當前目錄下搜尋

           -L  後邊跟庫的路徑 ,如果不寫,預設在系統指定的目錄下搜尋

           -l  後邊跟庫名,指定要用哪個庫

動態庫(my.so):   生成庫後,首先設定環境變數  export  LD_LIBRARY_PATH=動態庫的搜尋路徑

                             gcc  test.c  -I./   -L./  -lmy

二·基礎I/O

1.系統呼叫介面:open,close,read,write,lseek等

如果檔案不存在,需要open建立,則第三個引數表示建立檔案的預設許可權,否則,使用兩個引數

2.檔案描述符fd

   本質:一個從0開始的小整數,就是files_struct這個指標陣列的下標,這個陣列指向該程序開啟的檔案。所以只要拿到下標就可以找到該檔案

3.重定向

本質:將該程序開啟的1號檔案關閉,再開啟目標檔案,則這個目標檔案的fd就是1,即要輸出到顯示器上的檔案輸出到了目標檔案中