我的linux 環境是windows8.1 + vmware6.5.1+ fedora14,參考書籍:第六章
我利用乙個ssh軟體ssh secure file transfer client 來從linux傳輸檔案
來張虛擬機器執行fedora的圖:
下面步入正題:
io最基本操作:
1檔案的訪問涉及到程序間同步、互斥問題,採用linux的fcntl()函式來加鎖。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 }
1下面演示a程序給檔案上"寫入鎖",然後b程序給檔案上"讀鎖"的實驗現象://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 }
souce code of a :
1souce code of b:即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 }
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 的奇妙之處在於它被呼叫一...