原子操作pread,pwirte
融水網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,融水網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為融水近千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的融水做網(wǎng)站的公司定做!
#include
ssize_t pread(int fd, void *buf, size_t nbytes, off_t offset);//返回值:讀到的字節(jié)數(shù),若已到文件結(jié)尾則返回0,若出錯(cuò)返回-1
ssize_t pwrite(int fd,const void *buf ,size_t nbytes, off_t offset);//返回值:若成功返回已寫的字節(jié)數(shù),若出錯(cuò)返因-1
pread,pwirte,相當(dāng)于順序調(diào)用lseek和read或write,但調(diào)用pread,pwrite時(shí)無法中斷其定位和讀寫操作,并且不能更新文件指針。
od -c file:查看file的實(shí)際內(nèi)容
文件共享:
文件描述符:每個(gè)進(jìn)程在進(jìn)程表中都有一個(gè)記錄項(xiàng)每個(gè)記錄項(xiàng)中有一張打開的文件描述符表(所以才有必要復(fù)制文件描述符),每個(gè)文件描述符表項(xiàng)關(guān)聯(lián):(a)文件描述符標(biāo)志。(b)指向一個(gè)文件表項(xiàng)的指針。
文件表:內(nèi)核為所有打開的文件維護(hù)一張文件表,每個(gè)文件表項(xiàng)包含:(a)文件狀態(tài)標(biāo)志(讀、寫、增寫、同步、非阻塞等)。(b)當(dāng)前文件的偏移量。(c)指向該文件v節(jié)點(diǎn)表項(xiàng)的指針。
v節(jié)點(diǎn):每個(gè)打開的文件(或設(shè)備)都有一個(gè)v節(jié)點(diǎn)結(jié)構(gòu)。包含了文件類型和對(duì)此文件進(jìn)行各種操作的函數(shù)的指針信息。對(duì)于大多數(shù)文件,v節(jié)點(diǎn)還包含了該文件的i節(jié)點(diǎn)(索引節(jié)點(diǎn))。這些信息是在打開文件時(shí)從盤上讀入內(nèi)存的,所以所有關(guān)于文件的信息都是快速可供使用的。例如,i節(jié)點(diǎn)包含了文件的所有者、文件長(zhǎng)度、文件所在的設(shè)備、指向文件在盤上所使用的實(shí)際數(shù)據(jù)塊的指針等等。
fcntl函數(shù)可以改變已經(jīng)打開文件的性質(zhì)。
int fcntl(int filedes, int cmd ,....);
cmd:
F_DUPFD 復(fù)制一個(gè)現(xiàn)存的文件描述符。
F_GETFD or F_SETFD 獲得/設(shè)置文件描述符標(biāo)志
F_GETFL or F_SETFL 獲得/設(shè)置文件狀態(tài)標(biāo)志 即open函數(shù)中mode的幾種狀態(tài)
F_GETOWN or F_SETOWN 獲得/設(shè)置異步I/0權(quán)限
F_GETLK,F_SETLK or F_SETLKW 獲得/設(shè)置記錄鎖