




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
Linux系統(tǒng)調(diào)用所謂系統(tǒng)調(diào)用是指操作系統(tǒng)提供給用戶程序的一組“特殊”接口,用戶程序可以通過這組“特殊”接口來獲得操作系統(tǒng)內(nèi)核提供的特殊服務(wù)。在linux中用戶程序不能直接
內(nèi)核提供的服務(wù)。為了更好的保護內(nèi)核空間,將程序的運行空間分為內(nèi)核空間和用戶空間,他們運行在不同的級別上,在邏輯上是相互
的.Linux系統(tǒng)調(diào)用與文件I/O軟帝信息科技http
在linux中用戶編程接口(API)遵循了在UNIX中最流行的應(yīng)用編程界面標(biāo)準(zhǔn)—POSIX標(biāo)準(zhǔn)。這些系統(tǒng)調(diào)用編程接口主要通過C庫(libc)實現(xiàn)的。內(nèi)核空間用戶空間系統(tǒng)調(diào)用用戶程序接口API系統(tǒng)命令圖1
系統(tǒng)調(diào)用、API與系統(tǒng)命令之間的關(guān)系用戶編程接口(API)軟帝信息科技http
可用的文件I/O函數(shù)——打開文件、讀文件、寫文件等等。大多數(shù)linux文件I/O只需用到5個函數(shù):open、read、wri seek 以及close。不帶緩存指的是每個read和write都調(diào)用內(nèi)核中的一個系統(tǒng)調(diào)用。這些不帶緩存的I/O函數(shù)不是ANSI
C的組成部分,但是POSIX組成部分。文件I/O介紹軟帝信息科技http
文件描述符?
對于內(nèi)核而言,所有打開文件都由文件描述符
。文件描述符是一個非負(fù)整數(shù)。當(dāng)打開一個現(xiàn)存文件或創(chuàng)建一個新文件時,內(nèi)核向進程返回一個文件描述符。當(dāng)讀、寫一個文件時,用open或creat返回的文件描述符標(biāo)識該文件,將其作為參數(shù)傳送給read或write。在POSIX.1應(yīng)用程序中,整數(shù)0、1、2應(yīng)被代換成符號常數(shù)STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO。這些常數(shù)都定義在頭文件<unistd.h>中。文件描述符的范圍是0-OPEN_MAX。早期的UNIX版本采用的上限值是1
9(允許每個進程打開2
0個文件),現(xiàn)在很多系統(tǒng)則將其增加至63。軟帝信息科技http
open返回:若成功為文件描述符,若出錯為-1#include
<sys/types.h>#include
<sys/stat.h>#include
<fcntl.h>int
open(const
char
*pathname,
int
oflag,
mode_t
mode)
;open函數(shù)軟帝信息科技http
open函數(shù)pathname是要打開或創(chuàng)建的文件的名字。oflag參數(shù)可用來說明此函數(shù)的多個選擇項。mode對于open函數(shù)而言,僅當(dāng)創(chuàng)建新文件時才使用第三個參數(shù)。(文件權(quán)限 od
777
filename)參數(shù) oflag說明:用下列一個或多個常數(shù)進行或運算構(gòu)成oflag參數(shù)(這些常數(shù)定義在<fcntl.h>頭文件中):O_RDONLY只讀打開。O_WRONLY只寫打開。O_RDWR讀、寫打開。軟帝信息科技http
open函數(shù)O_APPEND
每次寫時都加到文件的尾端。O_CREAT
若此文件不存在則創(chuàng)建它。使用此選擇項時,需同時說明第三個參數(shù)mode,用其說明該新文件的存取
權(quán)位。O_EXCL如果同時指定了O_CREAT,而文件已經(jīng)存在,則出錯。這可測試一個文件是否存在,如果不存在則創(chuàng)建此文件成為一個原子操作。O_TRUNC
如果此文件存在,而且為只讀或只寫成功打開,則將其長度截短為0。O_NOCTTY
如果pathname指的是終端設(shè)備,則不將此設(shè)備分配作為此進程的控制終端。O_NONBLOCK
如果pathname指的是一個FIFO、一個塊特殊文件或一個字符特殊文件,則此選擇項為此文件的本次打開操作和后續(xù)的I/O操作設(shè)置非阻塞方式。O_SYNC
使每次write都等到物理I/O操作完成。軟帝信息科技http
參數(shù)
mode
說明:mode標(biāo)志用來表示文件的
權(quán)限.Linux總共用5個數(shù)字表示文件各種權(quán)限.
open(“test”,O_RDWR|O_CREAT,10705)open函數(shù)用戶ID設(shè)置組ID自己權(quán)限其他限組權(quán)限軟帝信息科技http
CREAT函數(shù)creat可用creat函數(shù)創(chuàng)建一個新文件。返回:若成功為只寫打開的文件描述符,若出錯為-
1。注意,此函數(shù)等效于:open
(pathname,
O_WRONLY
|O_CREAT
|
O_TRUNC,
mode)
;creat的一個不足之處是它以只寫方式打開所創(chuàng)建的文件。#include
<sys/types.h>#include
<sys/stat.h>#include
<fcntl.h>int
creat(const
char
*
pathname,
mode_t
m
o
d
e);軟帝信息科技http
close可用close函數(shù)關(guān)閉一個打開文件:返回:若成功為0,若出錯為-
1當(dāng)一個進程終止時,它所有的打開文件都由內(nèi)核自動關(guān)閉。很多程序都使用這
能而不顯式地用close關(guān)閉打開的文件。如
例http:///*open.c*/#include
<unistd.h>#include
<sys/types.h>#include
<sys/stat.h>#include
<fcntl.h>#include
<stdlib.h>科技#include
<stdio.h>#include
<unistd.h>int
close
(int
filedes);CLOSE函數(shù)12司帝信
技
公int
main(void)o.c",
O_CREAT
|
O_TRUNC
|
O_WRONLY,0600
))<0)o.c
%d\n",fd);o.c\n");{ int
fd;if((fd
=
open("/tmp/{perror("open:");exit(1);}elseprintf("open
file:if(
close(fd)
<
0
){perror("close:");exit(1);}elseprintf("Closeexit(0);}CLOSE函數(shù)http
用read函數(shù)從打開文件中讀數(shù)據(jù)返回:讀到的字節(jié)數(shù),若已到文件尾為0,若出錯為-1。如read成功,則返回讀到的字節(jié)數(shù)。如已到達文件的尾端,則返回0。#include
<unistd.h>ssize_t
read(int
feledes,
void
*buff,
size_t
nbytes)
;read函數(shù)軟帝信息科技http
有多種情況可使實際讀到的字節(jié)數(shù)少于要求讀字節(jié)數(shù):讀普通文件時,在讀到要求字節(jié)數(shù)之前已到達了文件尾端。例如,若在到達文件尾端之前還有30個字節(jié),而要求讀100個字節(jié),則read返回30,下一次再調(diào)用read時,它將返回0 (
文件尾端)
。當(dāng)從終端設(shè)備讀時,通常一次最多讀一行。當(dāng)從網(wǎng)絡(luò)讀時,網(wǎng)絡(luò)中的緩沖機構(gòu)可能造成返回值小于所要求讀的字節(jié)數(shù)。某些面向記錄的設(shè)備,例如磁帶,一次最多返回一個記錄。讀操作從文件的當(dāng)前位移量處開始,在成功返回之前,該位移量增加實際讀得的字節(jié)數(shù)。read函數(shù)軟帝信息科技http
write函數(shù)用write函數(shù)向打開文件寫數(shù)據(jù)。http
之后,該文件位移量增加實際寫的字節(jié)數(shù)。返回:若成功為已寫的字節(jié)數(shù),若出錯為-
1。其返回值通常與參數(shù)nbytes的值不同,否則表示出錯。w
rite出錯的一個常見原因是:磁盤已寫滿,或者超過了對一個給定進程的文件長度限制。對于普通文件,寫操作從文件的當(dāng)前位移量處開始。如果在打開該文件時,指定了O_APPEND選擇項,則在每次寫操作之前,將文件位移量設(shè)置在文件的當(dāng)前結(jié)尾處。在一軟次帝成信息功科寫技#include
<unistd.h>ssize_t
write(int
filedes,
const
void
*
buff,size_t
nbytes)
;每個打開文件都有一個與其相關(guān)聯(lián)的“當(dāng)前文件偏移量”。它是一個非負(fù)整數(shù),用以度量從文件開始處計算的字節(jié)數(shù)。通常,讀、寫操作都從當(dāng)前文件偏移量處開始,并使偏移量增加所讀或?qū)懙淖止?jié)數(shù)。按系統(tǒng)默認(rèn),當(dāng)打開一個文件時,除非指定O_APPEND選擇項,否則該位移量被設(shè)置為0。可以調(diào)用lseek顯式地定位一個打開文件。lseek函數(shù)軟帝信息科技http
返回:若成功為新的文件位移,若出錯為-
1。對參數(shù)offset
的解釋與參數(shù)whence的值有關(guān)。若whence是SEEK_SET,則將該文件的位移量設(shè)置為距文件開始處offset
個字節(jié)。若whence是SEEK_CUR,則將該文件的位移量設(shè)置為其當(dāng)前值加offset,offset可為正或負(fù)。若whence是SEEK_END
,則將該文件的位移量設(shè)置為文件長度加offset,offset可為正或負(fù)。lseek函數(shù)#include
<sys/types.h>#include
<unistd.h>off_t
lseek(int
filesdes,
off_t
offset,
int
whence)
;軟帝信息科技http
若lseek成功執(zhí)行,則返回新的文件位移量,為此可以用下列方式確定一個打開文件的當(dāng)前位移量:off_t
curr_pos;Curr_pos
=
lseek(fd,
0,
SEEK_CUR);lseek函數(shù)軟帝信息科技http
/*write.c*/#include
<unistd.h>#include
<sys/types.h>#include
<sys/stat.h>#include
<fcntl.h>#include
<stdlib.h>#include
<stdio.h>#include
<string.h>int
main(void){ int
i,fd,size,len;char
*buf=" o!
I'm
writing
to
this
file!";char
buf_r[10];len
=
strlen(buf);buf_r[10]
=
'\0';軟帝信息科技例子程序19http
i
f((
fd =
open("/tmp/
o.c",
O_CREAT
|
O_TRUNC
|
O_RDWR,0666
))<0){perror("open:");exit(1);}elseprintf("open
file:
o.
c
%d\n",fd);if((
size =
write(
fd,
buf,
len)) <
0){perror("write:");exit(1);}elseprintf("Write:%s\n",buf);軟帝信息科技例子程序20http
lseek(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CNFAGS 13-2024液體無水氨質(zhì)量分級及運輸要求
- T/CHES 119-2023洪水演進水動力實時模擬技術(shù)規(guī)程
- T/CAEPI 72-2023袋式除塵用折式濾筒技術(shù)要求
- 專業(yè)消殺試題及答案
- 上海安全員c證考試題庫及答案
- 家具專賣店加盟合同協(xié)議書4篇
- 圖書管理系統(tǒng)詳細設(shè)計
- 鳥的雙重呼吸
- 工控裝備:溫度控制調(diào)節(jié)器項目績效評估報告
- Γ-FE2O3項目績效評估報告
- 2025-2030年中國磷酸行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025年市場營銷專業(yè)人才考核試題及答案
- 分居協(xié)議(模版)
- 經(jīng)鼻高流量吸氧在五官科麻醉氣道管理中應(yīng)用專家共識(2025版)解讀
- 養(yǎng)老護理員考試模擬題與答案(附解析)
- 2025屆湖北省新八校協(xié)作體高三下學(xué)期5月壯行考化學(xué)試題及答案
- 2025年武漢鐵路局集團招聘(180人)筆試參考題庫附帶答案詳解
- 深圳市住房公積金管理中心員額人員招聘真題2024
- 2025年中考數(shù)學(xué)模擬考試卷(附帶答案)
- 2025-2030年中國醫(yī)用熱敏紙行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 梅州市大埔縣客家圍屋小學(xué)-攜數(shù)同行靜待花開-二年級下冊數(shù)學(xué)家長會【課件】
評論
0/150
提交評論