您好,登錄后才能下訂單哦!
原子操作pread,pwirte
#include <unistd.h>
ssize_t pread(int fd, void *buf, size_t nbytes, off_t offset);//返回值:讀到的字節(jié)數(shù),若已到文件結(jié)尾則返回0,若出錯返回-1
ssize_t pwrite(int fd,const void *buf ,size_t nbytes, off_t offset);//返回值:若成功返回已寫的字節(jié)數(shù),若出錯返因-1
pread,pwirte,相當于順序調(diào)用lseek和read或write,但調(diào)用pread,pwrite時無法中斷其定位和讀寫操作,并且不能更新文件指針。
od -c file:查看file的實際內(nèi)容
文件共享:
文件描述符:每個進程在進程表中都有一個記錄項每個記錄項中有一張打開的文件描述符表(所以才有必要復(fù)制文件描述符),每個文件描述符表項關(guān)聯(lián):(a)文件描述符標志。(b)指向一個文件表項的指針。
文件表:內(nèi)核為所有打開的文件維護一張文件表,每個文件表項包含:(a)文件狀態(tài)標志(讀、寫、增寫、同步、非阻塞等)。(b)當前文件的偏移量。(c)指向該文件v節(jié)點表項的指針。
v節(jié)點:每個打開的文件(或設(shè)備)都有一個v節(jié)點結(jié)構(gòu)。包含了文件類型和對此文件進行各種操作的函數(shù)的指針信息。對于大多數(shù)文件,v節(jié)點還包含了該文件的i節(jié)點(索引節(jié)點)。這些信息是在打開文件時從盤上讀入內(nèi)存的,所以所有關(guān)于文件的信息都是快速可供使用的。例如,i節(jié)點包含了文件的所有者、文件長度、文件所在的設(shè)備、指向文件在盤上所使用的實際數(shù)據(jù)塊的指針等等。
fcntl函數(shù)可以改變已經(jīng)打開文件的性質(zhì)。
int fcntl(int filedes, int cmd ,....);
cmd:
F_DUPFD 復(fù)制一個現(xiàn)存的文件描述符。
F_GETFD or F_SETFD 獲得/設(shè)置文件描述符標志
F_GETFL or F_SETFL 獲得/設(shè)置文件狀態(tài)標志 即open函數(shù)中mode的幾種狀態(tài)
F_GETOWN or F_SETOWN 獲得/設(shè)置異步I/0權(quán)限
F_GETLK,F_SETLK or F_SETLKW 獲得/設(shè)置記錄鎖
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。