




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Linux系統(tǒng)調(diào)用所謂系統(tǒng)調(diào)用是指操作系統(tǒng)提供給用戶程序的一組“特殊”接口,用戶程序可以通過(guò)這組“特殊”接口來(lái)獲得操作系統(tǒng)內(nèi)核提供的特殊服務(wù)。在linux中用戶程序不能直接
內(nèi)核提供的服務(wù)。為了更好的保護(hù)內(nèi)核空間,將程序的運(yùn)行空間分為內(nèi)核空間和用戶空間,他們運(yùn)行在不同的級(jí)別上,在邏輯上是相互
的.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)用編程接口主要通過(guò)C庫(kù)(libc)實(shí)現(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個(gè)函數(shù):open、read、wri seek 以及close。不帶緩存指的是每個(gè)read和write都調(diào)用內(nèi)核中的一個(gè)系統(tǒng)調(diào)用。這些不帶緩存的I/O函數(shù)不是ANSI
C的組成部分,但是POSIX組成部分。文件I/O介紹軟帝信息科技http
文件描述符?
對(duì)于內(nèi)核而言,所有打開文件都由文件描述符
。文件描述符是一個(gè)非負(fù)整數(shù)。當(dāng)打開一個(gè)現(xiàn)存文件或創(chuàng)建一個(gè)新文件時(shí),內(nèi)核向進(jìn)程返回一個(gè)文件描述符。當(dāng)讀、寫一個(gè)文件時(shí),用open或creat返回的文件描述符標(biāo)識(shí)該文件,將其作為參數(shù)傳送給read或write。在POSIX.1應(yīng)用程序中,整數(shù)0、1、2應(yīng)被代換成符號(hào)常數(shù)STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO。這些常數(shù)都定義在頭文件<unistd.h>中。文件描述符的范圍是0-OPEN_MAX。早期的UNIX版本采用的上限值是1
9(允許每個(gè)進(jìn)程打開2
0個(gè)文件),現(xiàn)在很多系統(tǒng)則將其增加至63。軟帝信息科技http
open返回:若成功為文件描述符,若出錯(cuò)為-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ù)可用來(lái)說(shuō)明此函數(shù)的多個(gè)選擇項(xiàng)。mode對(duì)于open函數(shù)而言,僅當(dāng)創(chuàng)建新文件時(shí)才使用第三個(gè)參數(shù)。(文件權(quán)限 od
777
filename)參數(shù) oflag說(shuō)明:用下列一個(gè)或多個(gè)常數(shù)進(jìn)行或運(yùn)算構(gòu)成oflag參數(shù)(這些常數(shù)定義在<fcntl.h>頭文件中):O_RDONLY只讀打開。O_WRONLY只寫打開。O_RDWR讀、寫打開。軟帝信息科技http
open函數(shù)O_APPEND
每次寫時(shí)都加到文件的尾端。O_CREAT
若此文件不存在則創(chuàng)建它。使用此選擇項(xiàng)時(shí),需同時(shí)說(shuō)明第三個(gè)參數(shù)mode,用其說(shuō)明該新文件的存取
權(quán)位。O_EXCL如果同時(shí)指定了O_CREAT,而文件已經(jīng)存在,則出錯(cuò)。這可測(cè)試一個(gè)文件是否存在,如果不存在則創(chuàng)建此文件成為一個(gè)原子操作。O_TRUNC
如果此文件存在,而且為只讀或只寫成功打開,則將其長(zhǎng)度截短為0。O_NOCTTY
如果pathname指的是終端設(shè)備,則不將此設(shè)備分配作為此進(jìn)程的控制終端。O_NONBLOCK
如果pathname指的是一個(gè)FIFO、一個(gè)塊特殊文件或一個(gè)字符特殊文件,則此選擇項(xiàng)為此文件的本次打開操作和后續(xù)的I/O操作設(shè)置非阻塞方式。O_SYNC
使每次write都等到物理I/O操作完成。軟帝信息科技http
參數(shù)
mode
說(shuō)明:mode標(biāo)志用來(lái)表示文件的
權(quán)限.Linux總共用5個(gè)數(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)建一個(gè)新文件。返回:若成功為只寫打開的文件描述符,若出錯(cuò)為-
1。注意,此函數(shù)等效于:open
(pathname,
O_WRONLY
|O_CREAT
|
O_TRUNC,
mode)
;creat的一個(gè)不足之處是它以只寫方式打開所創(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)閉一個(gè)打開文件:返回:若成功為0,若出錯(cuò)為-
1當(dāng)一個(gè)進(jìn)程終止時(shí),它所有的打開文件都由內(nèi)核自動(dòng)關(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,若出錯(cuò)為-1。如read成功,則返回讀到的字節(jié)數(shù)。如已到達(dá)文件的尾端,則返回0。#include
<unistd.h>ssize_t
read(int
feledes,
void
*buff,
size_t
nbytes)
;read函數(shù)軟帝信息科技http
有多種情況可使實(shí)際讀到的字節(jié)數(shù)少于要求讀字節(jié)數(shù):讀普通文件時(shí),在讀到要求字節(jié)數(shù)之前已到達(dá)了文件尾端。例如,若在到達(dá)文件尾端之前還有30個(gè)字節(jié),而要求讀100個(gè)字節(jié),則read返回30,下一次再調(diào)用read時(shí),它將返回0 (
文件尾端)
。當(dāng)從終端設(shè)備讀時(shí),通常一次最多讀一行。當(dāng)從網(wǎng)絡(luò)讀時(shí),網(wǎng)絡(luò)中的緩沖機(jī)構(gòu)可能造成返回值小于所要求讀的字節(jié)數(shù)。某些面向記錄的設(shè)備,例如磁帶,一次最多返回一個(gè)記錄。讀操作從文件的當(dāng)前位移量處開始,在成功返回之前,該位移量增加實(shí)際讀得的字節(jié)數(shù)。read函數(shù)軟帝信息科技http
write函數(shù)用write函數(shù)向打開文件寫數(shù)據(jù)。http
之后,該文件位移量增加實(shí)際寫的字節(jié)數(shù)。返回:若成功為已寫的字節(jié)數(shù),若出錯(cuò)為-
1。其返回值通常與參數(shù)nbytes的值不同,否則表示出錯(cuò)。w
rite出錯(cuò)的一個(gè)常見(jiàn)原因是:磁盤已寫滿,或者超過(guò)了對(duì)一個(gè)給定進(jìn)程的文件長(zhǎng)度限制。對(duì)于普通文件,寫操作從文件的當(dāng)前位移量處開始。如果在打開該文件時(shí),指定了O_APPEND選擇項(xiàng),則在每次寫操作之前,將文件位移量設(shè)置在文件的當(dāng)前結(jié)尾處。在一軟次帝成信息功科寫技#include
<unistd.h>ssize_t
write(int
filedes,
const
void
*
buff,size_t
nbytes)
;每個(gè)打開文件都有一個(gè)與其相關(guān)聯(lián)的“當(dāng)前文件偏移量”。它是一個(gè)非負(fù)整數(shù),用以度量從文件開始處計(jì)算的字節(jié)數(shù)。通常,讀、寫操作都從當(dāng)前文件偏移量處開始,并使偏移量增加所讀或?qū)懙淖止?jié)數(shù)。按系統(tǒng)默認(rèn),當(dāng)打開一個(gè)文件時(shí),除非指定O_APPEND選擇項(xiàng),否則該位移量被設(shè)置為0。可以調(diào)用lseek顯式地定位一個(gè)打開文件。lseek函數(shù)軟帝信息科技http
返回:若成功為新的文件位移,若出錯(cuò)為-
1。對(duì)參數(shù)offset
的解釋與參數(shù)whence的值有關(guān)。若whence是SEEK_SET,則將該文件的位移量設(shè)置為距文件開始處offset
個(gè)字節(jié)。若whence是SEEK_CUR,則將該文件的位移量設(shè)置為其當(dāng)前值加offset,offset可為正或負(fù)。若whence是SEEK_END
,則將該文件的位移量設(shè)置為文件長(zhǎng)度加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í)行,則返回新的文件位移量,為此可以用下列方式確定一個(gè)打開文件的當(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省無(wú)錫市梁溪區(qū)2025屆三年級(jí)數(shù)學(xué)第二學(xué)期期末監(jiān)測(cè)模擬試題含解析
- 新疆烏魯木齊市十中2024-2025學(xué)年下學(xué)期高三期末英語(yǔ)試題含解析
- 浙江省金華市義烏市2025年數(shù)學(xué)四年級(jí)第二學(xué)期期末學(xué)業(yè)水平測(cè)試模擬試題含解析
- 全州縣2025年三下數(shù)學(xué)期末聯(lián)考試題含解析
- 項(xiàng)目總監(jiān)聘請(qǐng)合同簡(jiǎn)化范本
- 三輪車銷售協(xié)議書
- 豐臺(tái)區(qū)長(zhǎng)辛店第一幼兒園合同續(xù)簽順利進(jìn)行
- 湖北省十堰市2024-2025學(xué)年七年級(jí)下學(xué)期期中歷史試題(含答案)
- 2025年廣東省湛江市寸金培才學(xué)校中考?xì)v史四模試卷 (含答案)
- 果園托管合同范本
- 閱讀提取信息課件
- 2025年河南省中考數(shù)學(xué)二輪復(fù)習(xí)壓軸題:動(dòng)態(tài)幾何問(wèn)題專練
- 《知識(shí)產(chǎn)權(quán)保護(hù)》課件
- 2025-2030中國(guó)制造運(yùn)營(yíng)管理(MOM)軟件行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 江蘇省2024年中職職教高考文化統(tǒng)考烹飪專業(yè)綜合理論真題試卷
- 市政工程施工部署與資源配置計(jì)劃
- 2025年理化檢驗(yàn)面試試題及答案
- 11.1 化學(xué)與人體健康(課件)-2024-2025學(xué)年九年級(jí)化學(xué)人教版下冊(cè)
- 污水處理廠工程設(shè)備安裝施工方案及技術(shù)措施
- 2025年電力人工智能多模態(tài)大模型創(chuàng)新技術(shù)及應(yīng)用報(bào)告-西安交通大學(xué)
- 離婚協(xié)議書電子版下載
評(píng)論
0/150
提交評(píng)論