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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

白豬掌柜的 2021-10-20 19:15:53
Unix環(huán)境高級編程中,對read()函數(shù)作了如下定義:調(diào)用read函數(shù)從打開文件中讀數(shù)據(jù)。#include <unistd.h>ssize_t read(int fd, void *buf, size_t nbytes);返回值:讀到的字節(jié)數(shù),若已到文件尾,返回0;若出錯,返回?1如read成功,則返回讀到的字節(jié)數(shù)。如已到達文件的尾端,則返回0。****************************************************************我想知道,對于一個文件,如果里面的數(shù)據(jù)大于定義的nbytes的話,是怎么樣的?比如: man ls >ls.txt用read()和write()函數(shù),將ls.txt里面的數(shù)據(jù)復制到copy.txt中其中butter[MAX](#define MAX 10)****************************************************************我的理解,ls的man手冊中的數(shù)據(jù)要比定義的butter[MAX]數(shù)據(jù)大的多,那為什么用下面程序就可以進行復制數(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貢獻1801條經(jīng)驗 獲得超8個贊

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

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

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

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

若值為 O_WDONLY,就以只寫方式打開文件;

若值為 O_RDWR,就以讀寫方式打開文件;

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

創(chuàng)建新文件:

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

例如:

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

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

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

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

標志

解釋

O_RDONLY

只讀方式打開

O_WRONLY

只寫方式打開

O_RDWR

讀寫方式打開

O_APPEND

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

O_CREAT

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

O_DSYNC

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

O_EXCL

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

O_NOCTTY

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

O_NONBLOCK

不等待命名管道或特殊文件準備好

O_RSYNC

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

O_SYNC

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

O_TRUNC

將其長度截短為0

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

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

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

函數(shù)返回值:

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

-1 :出錯

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

例子:

運行結(jié)果:

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

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

(1)fildes:文件描述符

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

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

函數(shù)返回值:

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

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

-1:出錯

例子:

運行結(jié)果:

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

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



查看完整回答
反對 回復 2021-10-24
?
慕容708150

TA貢獻1831條經(jīng)驗 獲得超4個贊

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

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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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