第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

麻煩大佬幫忙看一下,在linux下系統(tǒng)調(diào)用函數(shù)read()!

麻煩大佬幫忙看一下,在linux下系統(tǒng)調(diào)用函數(shù)read()!

白豬掌柜的 2021-10-20 19:15:53
Unix環(huán)境高級(jí)編程中,對(duì)read()函數(shù)作了如下定義:調(diào)用read函數(shù)從打開(kāi)文件中讀數(shù)據(jù)。#include <unistd.h>ssize_t read(int fd, void *buf, size_t nbytes);返回值:讀到的字節(jié)數(shù),若已到文件尾,返回0;若出錯(cuò),返回?1如read成功,則返回讀到的字節(jié)數(shù)。如已到達(dá)文件的尾端,則返回0。****************************************************************我想知道,對(duì)于一個(gè)文件,如果里面的數(shù)據(jù)大于定義的nbytes的話,是怎么樣的?比如: man ls >ls.txt用read()和write()函數(shù),將ls.txt里面的數(shù)據(jù)復(fù)制到copy.txt中其中butter[MAX](#define MAX 10)****************************************************************我的理解,ls的man手冊(cè)中的數(shù)據(jù)要比定義的butter[MAX]數(shù)據(jù)大的多,那為什么用下面程序就可以進(jìn)行復(fù)制數(shù)據(jù)?————————————————————————————//省略int i,j,n;i=open(argv[1],O_RDONLY);j=open(argv[2],O_WDONLY|O_CREAT|O_TRUNC,664);//省略判斷之類的n=read(i,butter,MAX);while(n>0){ write(j,butter,n);}close(i);close(j);————————————————————————————
查看完整描述

2 回答

?
蝴蝶刀刀

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊

open系統(tǒng)調(diào)用

open函數(shù)的三個(gè)參數(shù):

(1)path是已經(jīng)存在的文件的路徑;

(2)oflags參數(shù):若值為 O_RDONLY ,就以只讀方式打開(kāi)文件;

若值為 O_WDONLY,就以只寫方式打開(kāi)文件;

若值為 O_RDWR,就以讀寫方式打開(kāi)文件;

(3)參數(shù)mode:文件的權(quán)限,對(duì)于一個(gè)已經(jīng)存在的文件,參數(shù)mode是沒(méi)有用的,通常將其省略,因此這種情況下open調(diào)用只需兩個(gè)參數(shù)。

創(chuàng)建新文件:

前面已經(jīng)說(shuō)到,當(dāng)文件不存在時(shí),open會(huì)創(chuàng)建一個(gè)新文件(僅能是普通文件),我們只需要用 or操作向open的 oflags參數(shù)中加入標(biāo)志O_CREAT即可。這樣可以創(chuàng)建一個(gè)新的只讀文件,但是這沒(méi)有任何意義,因?yàn)樗鶆?chuàng)建的新文件沒(méi)有任何可讀內(nèi)容。因此一般需要 O_CREAT與 O_WRONLY或 O_RDWR一起使用,此時(shí)就需要mode參數(shù)了。

例如:

int fd = open("/home/LY/newfile",O_RDWR | O_CREAT,MODE_FILE)

參數(shù)mode僅在創(chuàng)建新文件時(shí)有效,對(duì)于一個(gè)已經(jīng)存在的文件,它沒(méi)有任何作用。

關(guān)于open的flags參數(shù):

除了以上介紹的 open標(biāo)志外,open還有許多標(biāo)志,具體的如下表所示:

標(biāo)志

解釋

O_RDONLY

只讀方式打開(kāi)

O_WRONLY

只寫方式打開(kāi)

O_RDWR

讀寫方式打開(kāi)

O_APPEND

每次寫都追加到文件的尾端

O_CREAT

若文件不存在則創(chuàng)建文件

O_DSYNC

設(shè)置同步I/O方式

O_EXCL

如果文件已存在,則出錯(cuò);必須與O_CREAT一起使用

O_NOCTTY

不將此設(shè)備作為控制終端

O_NONBLOCK

不等待命名管道或特殊文件準(zhǔn)備好

O_RSYNC

設(shè)置同步I/O方式

O_SYNC

設(shè)置同步I/O方式

O_TRUNC

將其長(zhǎng)度截短為0

write系統(tǒng)調(diào)用

write函數(shù)的三個(gè)參數(shù):

(1)fildes: 文件描述符
(2)buf:指定寫入數(shù)據(jù)的數(shù)據(jù)緩沖區(qū)
(3)nbytes:指定寫入的字節(jié)數(shù)

函數(shù)返回值:

成功:已寫的字節(jié)數(shù)

-1 :出錯(cuò)

0:未寫入任何數(shù)據(jù)

例子:

運(yùn)行結(jié)果:

read系統(tǒng)調(diào)用

read函數(shù)的三個(gè)參數(shù):

(1)fildes:文件描述符

(2)buf:指定讀入數(shù)據(jù)的數(shù)據(jù)緩沖區(qū)

(3)nbytes:指定讀入的字節(jié)數(shù)

函數(shù)返回值:

成功:已讀的字節(jié)數(shù)

0:未讀入任何數(shù)據(jù)

-1:出錯(cuò)

例子:

運(yùn)行結(jié)果:

close系統(tǒng)調(diào)用

通過(guò)對(duì) close進(jìn)行分析,我們會(huì)發(fā)現(xiàn)close并沒(méi)有做什么實(shí)質(zhì)工作,它沒(méi)有刷新任何內(nèi)核緩沖區(qū),而僅僅是使文件描述符可以重用。



查看完整回答
反對(duì) 回復(fù) 2021-10-24
?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

n=read(i,butter,MAX);while(n>0){ write(j,butter,n);}close(i);close(j);
如果我說(shuō)的沒(méi)有錯(cuò)的話, 文件大于butter的話是不可能一次讀寫完成的; 原因是你在循環(huán)中沒(méi)有重復(fù)讀寫;
n=read(i,butter,MAX);while(n>0){ write(j,butter,n);n=read(i,butter,MAX);}close(i);close(j);
這樣就可以讀完了; 當(dāng)然,這種程序通??磩e人代碼都是這樣寫的:
while(read(i,butter,MAX)>0){ write(j,butter,n);}close(i);close(j);

查看完整回答
反對(duì) 回復(fù) 2021-10-24
  • 2 回答
  • 0 關(guān)注
  • 598 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)