日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

UNIX环境高级编程 文件I/O

發(fā)布時間:2025/3/15 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UNIX环境高级编程 文件I/O 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

大多數(shù)文件I/O 只需要用到 5個函數(shù) : ? ?open , read , write , lseek , close?

本章描述的都是不帶緩沖的I/O(read write 都調(diào)用內(nèi)核中的一個系統(tǒng)調(diào)用)

?

文件描述符?

? ? ?對于內(nèi)核而言,所有文件都通過文件描述符引用。

? ? ?文件描述符是一個非負(fù)整數(shù)

? ? ?打開或創(chuàng)建一個新文件時,內(nèi)核都將返回一個文件描述符

? ? ?文件描述符的范圍是 0~OPEN_MAX-1

?

?

函數(shù) open 和 openat

? ? ?調(diào)用 open 或 openat 可以打開或創(chuàng)建一個文件

? ? ?int open( const char *path , int oflag , . . . /* mode_t mode */ ?)

? ? ?int ?openat( int fd , const char *path , int oflag , . . . /* mode_t mode */

? ? ?僅當(dāng)創(chuàng)建新文件時才使用最后的課表參數(shù)。

? ? ?oflag參數(shù)可以用來說明此函數(shù)的多個選項:

? ? ? ? ? O_RDONLY ? ?只讀打開

? ? ? ? ? O_WRONLY ? 只寫打開

? ? ? ? ? O_RDWR ? ? ? 讀寫打開

? ? ?open 和 openat 返回的文件描述符,一定是最小的未用描述符數(shù)值

? ? ?

? ?

函數(shù) creat

? ? ?調(diào)用creat函數(shù)創(chuàng)建一個新文件

? ? ?int creat ( const char *path , mode_t mode)

? ? ?效果等同于 open( path , O_WRONLY | O_CREAT | O_TRUNC , mode )

? ? ?creat 以只寫方式打開所創(chuàng)建的文件。

函數(shù) close

? ? ?調(diào)用此函數(shù)關(guān)閉一個打開文件。

? ? ?int close ( int fd )

?

函數(shù) lseek

? ? ?每個打開文件都有一個 文件偏移量。 用來度量從文件開始處計算的字節(jié)數(shù)。

? ? ?讀,寫操作都從當(dāng)前偏移量開始,并增加所讀寫的偏移量。

? ? ?off_t lseek ( int fd ,off_t offset , int whence) ;

? ? ?whence 參數(shù) :

? ? ? ? ? SEEK_SET ? ? ? ? ?從文件開始處便宜offset個字節(jié)

? ? ? ? ? SEEK_CUR ? ? ? ? 從文件偏移量設(shè)置當(dāng)前值加offset

? ? ? ? ? SEEK_END ? ? ? ? 將偏移量設(shè)置為文件長度加偏移量

? ? ?

? ? ?lseek調(diào)用成功后返回新的偏移量?

函數(shù) read

? ? ?從打開的文件中讀數(shù)據(jù)

? ? ?ssize_t read( int fd, void *buf, size_t nbytes)

? ? ?

? ? ?調(diào)用成功返回讀取到的字節(jié)數(shù),達(dá)到文件末端返回0。

? ? ?

函數(shù) write

? ? ?向打開文件寫數(shù)據(jù)

? ? ?ssize_t write ( int fd, void *buf, size_t nbytes)

? ? ?返回值通常與 nbytes 相同。

?

文件共享

? ? ?內(nèi)核使用 3 種數(shù)據(jù)結(jié)構(gòu)表示打開文件:

? ? ? ? ??

? ? ? ? ? (1) 進(jìn)程表項

? ? ? ? ? ? ? ? ? ? ? ? ?1.文件描述符

? ? ? ? ? ? ? ? ? ? ? ? ?2.指向文件表項的指針

? ? ? ? ? (2)文件表項

? ? ? ? ? ? ? ? ? ? ? ? ?1.文件狀態(tài)標(biāo)志 ( 比如 讀,寫,非阻塞等 )

? ? ? ? ? ? ? ? ? ? ? ? ?2.當(dāng)前文件偏移量

? ? ? ? ? ? ? ? ? ? ? ? ?3.指向V節(jié)點表項的指針

? ? ? ? ? (3)V節(jié)點表項

? ? ? ? ? ? ? ? ? ? ? ? ?每個打開文件都有一個V節(jié)點結(jié)構(gòu)。

函數(shù) pread 和 pwrite

? ? ?屬于原子操作。

? ? ?不更新當(dāng)前文件偏移量

函數(shù) dup 和 dup2

? ? ?復(fù)制一個現(xiàn)有的文件描述符

? ? ?int dup( int fd )

? ? ?int dup2( int fd , int fd2 )

? ? ?

? ? ?函數(shù)返回的新文件描述符與參數(shù)fd共享同一個文件表項

? ? ?調(diào)用 dup(fd) 等同于 fcntl ( fd , F_DUPED , 0 )

? ? ?調(diào)用 dup2(fd,fd2) 等同于 close(fd2);fcntl(fd,F_DUPED, fd2);

函數(shù) sync , fsync 和 fdatasync

? ? ?將緩沖區(qū)的數(shù)據(jù)寫入磁盤

函數(shù)fcntl

? ? ?用來改變已打開文件的屬性

? ? ?int fcntl ( int fd , int cmd , . . . /* int arg */ ?);

? ? ?

? ? ?參數(shù)cmd :

? ? ? ? ? 復(fù)制一個已有的描述符 F_DUPFD 或 F_DUPFD_CLOEXEC

? ? ? ? ? 獲取/設(shè)置文件描述符 ? F_GETFD 或 F_SETFD

? ? ? ? ? 獲取/設(shè)置文件狀態(tài)標(biāo)志 F_GETFL 或 F_SETFL

? ? ? ? ? 獲取/設(shè)置異步I/O所有權(quán) F_GETOWN 或 F_SETOWN

? ? ? ? ? 獲取/設(shè)置記錄鎖 ? ? ? ? ? F_GETLK ? ? ? F_SETLK ? ? ? ?F_SETLKW

轉(zhuǎn)載于:https://www.cnblogs.com/wchyi/p/5547957.html

總結(jié)

以上是生活随笔為你收集整理的UNIX环境高级编程 文件I/O的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。