LinuxI O程式設計

2021-08-17 21:19:05 字數 1430 閱讀 5560

linux系統呼叫

系統呼叫是指作業系統提供給使用者程式的一組「特殊」介面,使用者可以獲得作業系統核心提供的特殊服務。

在linux中使用者程式不能直接訪問核心提供的服務,程式的執行空間分為核心空間和使用者空間,他們執行在不同的級別上,在邏輯上是相互隔離的。

檔案i/o介紹

大多數檔案i/o只用到5個函式:open,read,write,lseek(定位),close

檔案描述符

對於核心,所有開啟檔案都由檔案描述符引用,是乙個非負整數。

open

#include 

#include

#include

int open(const

char *pathname,int oflag,mode_t mode);

返回:若成功為檔案描述符,若出錯為-1

例子:

open("test",o_pdwr|o_creat,10705)////1是使用者id,0是設定組id,後三位和linux許可權設定一樣

creat

建立乙個新檔案,不足在於以只寫方式開啟所建立的檔案

int creat(const char *pathname,mode_t mode);

此函式等價於open(pathname,o_wronly|o_creat|o_trunc,mode);

close

#include 

int close(int filedes);

返回:成功為0,出錯為-1

i/o讀寫

read

#include 

ssize_t read(int feledes,void *buff,size_t nbytes);

返回:讀到的位元組數,已到檔案尾為0,出錯為-1

(字串處理時記得加/0結束符)

write

開啟檔案寫資料

ssize_t write(int feledes,void *buff,size_t nbytes);

lseek

#include 

#include

off_t lseek(int filesdes,off_t offset,int whence);

返回:成功為新的檔案位移,出錯為-1

whence為seek_set,則將檔案的位移量設定為距檔案開始處offset個位元組

whence為seek_cur,則將檔案的位移量設定為其當前值加offset個位元組

whence為seek_end,則將檔案的位移量設定為檔案長度加offset個位元組

linux I O記憶體對映

linux 的線性位址空間為 0x00000000 到0xffffffff linux 核心將這 4g位元組的空間分為兩個部分 將最高的 1g位元組 0xc0000000 到0xfffffff 供核心使用,稱之為核心空間。而將較低的 3g位元組 0x00000000 到0xbfffffff 供各個程...

Linux I O排程策略

i o scheduler的作用就是為請求佇列裡面的io請求做乙個優化,以此達到提高系統吞吐量 縮短響應時間的目的。更改i o scheduler有兩種方式 1.sys block device name queue scheduler ioscheduler sys block device na...

LinuxIO模型概述

前言 乙個socket程序進行一次read可以分成兩個階段,等待資料是否準備好,以及資料從核心copy到使用者空間。我們舉個例子,肚子餓了要去小吃街吃拉麵,在我們正式開始吃麵之前需要1.先等拉麵師傅做好面,2.然後把做好的面放到我們的桌子上。阻塞和非阻塞 阻塞和非阻塞,主要是針對事情的本身,指做一件...