Linux 應用程式 之 IO程式設計(一)

2022-02-23 05:28:43 字數 2901 閱讀 4603

我的linux 環境是windows8.1 + vmware6.5.1+  fedora14,參考書籍:第六章

我利用乙個ssh軟體ssh secure file transfer client 來從linux傳輸檔案

來張虛擬機器執行fedora的圖:

下面步入正題:

io最基本操作:

1

2 #include 3 #include 4 #include 5 #include 6 #include 7 #include

8 #include 9

#define maxsize

10int main(void)11

else

21

24if((size = write( fd, buf,len))<0

)//寫固定長度資料,buf

25else

2932 lseek(fd,0

,seek_set);//檔案指標定位到檔案頭

33if((size = read(fd,buf_r,10))<0

)//讀10個位元組的資料,這裡沒有考慮字串最後乙個位元組為'\0',要完善

34else38

41if( close(fd) < 0

)//別忘記關閉

42else

4649 exit(0

);50 }

檔案的訪問涉及到程序間同步、互斥問題,採用linux的fcntl()函式來加鎖。

1

//function lock_set

2void lock_set(int fd,int

type)

321 fcntl(fd, f_getlk,&lock

);//上鎖失敗說明檔案被鎖住,則用"f_getlk"來獲取該鎖的型別,包括上鎖執行緒id

22if(lock.l_type !=f_unlck)

2332

}33 }

下面演示a程序給檔案上"寫入鎖",然後b程序給檔案上"讀鎖"的實驗現象:

souce code  of a :

1

即a 程序

2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8

//function lock_set 9//

...10

int main(void)11

19//

lock "write"

20lock_set(fd, f_wrlck);//給"hello3.txt"檔案上"寫入鎖"

21getchar();//等待,(按回車繼續執行程式)

22//

then unlock

23lock_set(fd,f_unlck);//去鎖

24getchar();

25close(fd);

26 exit(0

);27 }

souce code  of b:

1

即b程序

2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8

//function lock_set 9//

...10

int main(void)11

19//

lock "read"

20lock_set(fd,f_rdlck);//給我檔案hello3.txt上"讀鎖"

21getchar();

22//

then unlock

23lock_set(fd,f_unlck);

24getchar();

25close(fd);

26 exit(0

);27 }

執行效果,

step1:執行a程序(./hello3):

step2:開啟另一終端,執行b程序(./hello4):

step3:a程序對應終端中按下回車鍵:

step4:b程序終端中按下回車鍵:

ok,讀寫鎖實驗結束。

下面再了解下io多路復用(用select),這個對我來說有點難理解,貼上**和效果圖,以後斟酌。

1

2 #include 3 #include 4 #include 5 #include 6 #include 7

int main(void)8

else

42 perror("

read");

43}44if(fd_isset(fds[1],&inset2))

45else

52 perror("

write");

53 sleep(10

);54}55

}56}57 exit(0

);58 }

效果圖:

Linux 應用程式程式設計基礎

乙個計算機應用程式在記憶體中可以分成兩個部分 存放 的 段和存放資料的資料段。段存放使用者編寫的 資料段存放棧和堆。相關記憶體管理函式 include void malloc size t size 申請size大小的空間 void free void ptr 釋放ptr指向的空間 void cal...

Linux應用程式設計之程序程式設計

程序同步 一組併發的程序按照一定的順序執行的過程稱為程序間的同步。獲取id include pid t getpid void 獲取本程序id pid t getppid void 在子程序中獲取父程序id 程序建立 include pid t fork void fork 的奇妙之處在於它被呼叫一...

Linux應用程式設計之程序程式設計

程序同步 一組併發的程序按照一定的順序執行的過程稱為程序間的同步。獲取id include pid t getpid void 獲取本程序id pid t getppid void 在子程序中獲取父程序id 程序建立 include pid t fork void fork 的奇妙之處在於它被呼叫一...