91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

系統調用和庫函數調用

發布時間:2020-06-15 15:51:30 來源:網絡 閱讀:917 作者:噓123 欄目:系統運維

借鑒https://blog.csdn.net/lf_2016/article/details/54587020

系統調用:用戶直接調用操作系統暴露出來的接口,這種方式成為系統調用。

          文件I/O操作就是系統調用, man手冊,man 2 就是查詢系統調用API,

          常用的API有open close read write lseek fcntl

庫函數調用:對操作系統暴露出來的接口進行封裝形成了庫函數,提供給用戶調用。

            標準文件I/O操作就是庫函數調用,man手冊,man 3 就是查詢庫函數接口。

            常見的標準庫函數fopen fread fwrite

實際上庫函數是對系統調用的一層封裝,因此庫函數對文件操作的時候,必然會引起系統調用。也就是說,庫函數調用實際上是通過系統調用實現的。例如:C庫函數fwrite就是通過write實現的。

庫函數調用可以大大減少系統調用的次數,這是因為緩沖區技術。在用戶空間和內核空間,對文件都使用了緩沖區,當內核緩沖區寫滿之后或寫結束之后才將內核緩沖區內容寫到文件對應的硬件媒介中。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname,int flags,int perms);
flags:O_RDONLY
      O_WRONLY
      O_RDWR
      O_CREAT 若文件不存在,則創建一個新的文件,并用第三個參數為其設置權限。
      O_TRUNC 若文件已經存在,那么會刪除文件中的全部原有數據,并且設置文件大小為0
      O_APPEND 以添加方式打開文件
返回值:成功返回文件描述
       失敗返回-1
int fd;
fd = open("test.txt",O_RDWR|O_CREAT|O_TRUNC);
if(fd < 0)
{
    perror("fail to open");
}
#include <unistd.h>
int close(int fd);
返回值:成功返回0
       失敗返回-1
#include <unistd.h>
ssize_t write(int fd,const void *buf,size_t count);
功能:像文件描述符fd所指向的文件中寫入,從buf開始的緩沖區中count個字節
返回值:成功時返回寫入的字節數(若為零則表示沒有寫入數據)
       失敗時返回-1,并設置errno為相應值。
#include <unistd.h>
ssize_t read(int fd,void *buf,size_t count);
功能:從文件描述符fd中讀取count字節的數據并放入buf開始的緩沖區中。
返回值:成功時返回讀取到的字節數
       失敗時返回-1,并設置errno為相應值。
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
/**
*offset:相對與基準點whence的偏移量,以字節為單位,正數表示向前移動,復數表示向后移動
*whence:SEEK_SET  文件的起始位置
        SEEK_CUR  文件當前讀寫位置
        SEEK_END  文件的結束位置
**/
返回值:成功時,定位到文件當前讀寫位置
       失敗時,返回-1,并設置errno為相應值
#define OFFSET 10240
int read_len;
lseek(fd,-OFFSET,SET_END);
while((read_len = read(fd,buf,sizeof(buf))) > 0)  //讀多少,寫多少
{
    write(fdd,buf,read_len);
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彰化市| 宣威市| 田东县| 广安市| 柏乡县| 迁西县| 博客| 吴江市| 英山县| 松江区| 招远市| 濮阳市| 海城市| 延边| 鄂州市| 南平市| 余姚市| 香河县| 江永县| 额尔古纳市| 台东县| 福清市| 青海省| 高阳县| 榆树市| 扎赉特旗| 平舆县| 琼海市| 呈贡县| 梁河县| 旬邑县| 白朗县| 师宗县| 奉新县| 确山县| 马鞍山市| 鹤壁市| 邳州市| 曲水县| 新丰县| 临猗县|