日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

本章描述的都是不帶緩沖的I/O(read write 都調用內核中的一個系統調用)

?

文件描述符?

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

? ? ?文件描述符是一個非負整數

? ? ?打開或創建一個新文件時,內核都將返回一個文件描述符

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

?

?

函數 open 和 openat

? ? ?調用 open 或 openat 可以打開或創建一個文件

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

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

? ? ?僅當創建新文件時才使用最后的課表參數。

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

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

? ? ? ? ? O_WRONLY ? 只寫打開

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

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

? ? ?

? ?

函數 creat

? ? ?調用creat函數創建一個新文件

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

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

? ? ?creat 以只寫方式打開所創建的文件。

函數 close

? ? ?調用此函數關閉一個打開文件。

? ? ?int close ( int fd )

?

函數 lseek

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

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

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

? ? ?whence 參數 :

? ? ? ? ? SEEK_SET ? ? ? ? ?從文件開始處便宜offset個字節

? ? ? ? ? SEEK_CUR ? ? ? ? 從文件偏移量設置當前值加offset

? ? ? ? ? SEEK_END ? ? ? ? 將偏移量設置為文件長度加偏移量

? ? ?

? ? ?lseek調用成功后返回新的偏移量?

函數 read

? ? ?從打開的文件中讀數據

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

? ? ?

? ? ?調用成功返回讀取到的字節數,達到文件末端返回0。

? ? ?

函數 write

? ? ?向打開文件寫數據

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

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

?

文件共享

? ? ?內核使用 3 種數據結構表示打開文件:

? ? ? ? ??

? ? ? ? ? (1) 進程表項

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

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

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

? ? ? ? ? ? ? ? ? ? ? ? ?1.文件狀態標志 ( 比如 讀,寫,非阻塞等 )

? ? ? ? ? ? ? ? ? ? ? ? ?2.當前文件偏移量

? ? ? ? ? ? ? ? ? ? ? ? ?3.指向V節點表項的指針

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

? ? ? ? ? ? ? ? ? ? ? ? ?每個打開文件都有一個V節點結構。

函數 pread 和 pwrite

? ? ?屬于原子操作。

? ? ?不更新當前文件偏移量

函數 dup 和 dup2

? ? ?復制一個現有的文件描述符

? ? ?int dup( int fd )

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

? ? ?

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

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

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

函數 sync , fsync 和 fdatasync

? ? ?將緩沖區的數據寫入磁盤

函數fcntl

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

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

? ? ?

? ? ?參數cmd :

? ? ? ? ? 復制一個已有的描述符 F_DUPFD 或 F_DUPFD_CLOEXEC

? ? ? ? ? 獲取/設置文件描述符 ? F_GETFD 或 F_SETFD

? ? ? ? ? 獲取/設置文件狀態標志 F_GETFL 或 F_SETFL

? ? ? ? ? 獲取/設置異步I/O所有權 F_GETOWN 或 F_SETOWN

? ? ? ? ? 獲取/設置記錄鎖 ? ? ? ? ? F_GETLK ? ? ? F_SETLK ? ? ? ?F_SETLKW

轉載于:https://www.cnblogs.com/wchyi/p/5547957.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。