linux文件拷贝函数,linux:文件操作函数(open,close,read,write)
1. open()函數(shù)
功能描述:用于打開或創(chuàng)建文件,在打開或創(chuàng)建文件時(shí)可以指定文件的屬性及用戶的權(quán)限等各種參數(shù)。
所需頭文件:#include ,#include ,#include (我們用的時(shí)候只需要引用這個(gè)頭文件)
函數(shù)原型:int
open(const char *pathname,int
flags)
/ int
open(const char *pathname,int flags,int perms)
參數(shù):pathname:被打開的文件名(可包括路徑名如"dev/ttyS0");
flags:文件打開方式.
O_RDONLY:以只讀方式打開文件
O_WRONLY:以只寫方式打開文件
O_RDWR:以讀寫方式打開文件
O_CREAT:如果改文件不存在,就創(chuàng)建一個(gè)新的文件,并用第三個(gè)參數(shù)為其設(shè)置權(quán)限
O_EXCL:如果使用O_CREAT時(shí)文件存在,則返回錯(cuò)誤消息。這一參數(shù)可測(cè)試文件是否存在。此時(shí)open是原子操作,防止多個(gè)進(jìn)程同時(shí)創(chuàng)建同一個(gè)文件
O_NOCTTY:使用本參數(shù)時(shí),若文件為終端,那么該終端不會(huì)成為調(diào)用open()的那個(gè)進(jìn)程的控制終端
O_TRUNC:若文件已經(jīng)存在,那么會(huì)刪除文件中的全部原有數(shù)據(jù),并且設(shè)置文件大小為0
O_APPEND:以添加方式打開文件,在打開文件的同時(shí),文件指針指向文件的末尾,即將寫入的數(shù)據(jù)添加到文件的末尾
O_NONBLOCK:
如果pathname指的是一個(gè)FIFO、一個(gè)塊特殊文件或一個(gè)字符特殊文件,則此選擇項(xiàng)為此文件的本次打開操作和后續(xù)的I/O操作設(shè)置非阻塞方式。
O_SYNC:使每次write都等到物理I/O操作完成。
O_RSYNC:read 等待所有寫入同一區(qū)域的寫操作完成后再進(jìn)行
在open()函數(shù)中,falgs參數(shù)可以通過(guò)“|”組合構(gòu)成,但前3個(gè)標(biāo)準(zhǔn)常量(O_RDONLY,O_WRONLY,和O_RDWR)不能互相組合。
perms:被打開文件的存取權(quán)限,可以用兩種方法表示,可以用一組宏定義:S_I(R/W/X)(USR/GRP/OTH),其中R/W/X表示讀寫執(zhí)行權(quán)限.(USR/GRP/OTH分別表示文件的所有者/文件所屬組/其他用戶)
返回值:成功:返回文件描述符; 失敗:返回-1
2. close()函數(shù)
功能描述:用于關(guān)閉一個(gè)被打開的的文件
所需頭文件:?#include
函數(shù)原型:int
close(int fd)
參數(shù):fd文件描述符
返回值:0成功,-1出錯(cuò)
3. read()函數(shù)
功能描述: 從文件讀取數(shù)據(jù)。
所需頭文件:?#include
函數(shù)原型:ssize_t?read(int fd, void *buf, size_t
count);
參數(shù):?fd:?將要讀取數(shù)據(jù)的文件描述詞。buf:指緩沖區(qū),即讀取的數(shù)據(jù)會(huì)被放到這個(gè)緩沖區(qū)中去。count:
表示調(diào)用一次read操作,應(yīng)該讀多少數(shù)量的字符。
返回值:返回所讀取的實(shí)際字節(jié)數(shù);0(讀到EOF);-1(出錯(cuò))。
以下幾種情況會(huì)導(dǎo)致讀取到的字節(jié)數(shù)小于?count :
A.
讀取普通文件時(shí),讀到文件末尾還不夠?count 字節(jié)。例如:如果文件只有
30 字節(jié),而我們想讀取 100
字節(jié),那么實(shí)際讀到的只有 30 字節(jié),read 函數(shù)返回 30 。此時(shí)再使用 read 函數(shù)作用于這個(gè)文件會(huì)導(dǎo)致 read 返回 0
。
B.
從終端設(shè)備(terminal device)讀取時(shí),一般情況下每次只能讀取一行。
C.
從網(wǎng)絡(luò)讀取時(shí),網(wǎng)絡(luò)緩存可能導(dǎo)致讀取的字節(jié)數(shù)小于 count字節(jié)。
D.
讀取 pipe 或者 FIFO 時(shí),pipe 或 FIFO
里的字節(jié)數(shù)可能小于?count 。
E.
從面向記錄(record-oriented)的設(shè)備讀取時(shí),某些面向記錄的設(shè)備(如磁帶)每次最多只能返回一個(gè)記錄。
F.
在讀取了部分?jǐn)?shù)據(jù)時(shí)被信號(hào)中斷。
讀操作始于 cfo 。在成功返回之前,cfo 增加,增量為實(shí)際讀取到的字節(jié)數(shù)。
4. write()函數(shù)
功能描述: 向文件寫入數(shù)據(jù)。
所需頭文件:?#include
函數(shù)原型:ssize_t
write(int fd, void *buf, size_t count);
返回值:寫入文件的字節(jié)數(shù)(成功);-1(出錯(cuò))
功能:write 函數(shù)向 filedes 中寫入?count
字節(jié)數(shù)據(jù),數(shù)據(jù)來(lái)源為 buf 。返回值一般等于
count,否則就是出錯(cuò)了。常見的出錯(cuò)原因是磁盤空間滿了或者超過(guò)了文件大小限制。
對(duì)于普通文件,寫操作始于 cfo 。如果打開文件時(shí)使用了 O_APPEND,則每次寫操作都將數(shù)據(jù)寫入文件末尾。成功寫入后,cfo
增加,增量為實(shí)際寫入的字節(jié)數(shù)。
接下來(lái)我們來(lái)一起用一用這些函數(shù)
(1)以寫方式創(chuàng)建打開一個(gè)文件,0600代表用戶的權(quán)限,我們可以對(duì)文件進(jìn)行讀(4)和寫(2)操作
write(),在file.txt中寫“hello”,寫入字節(jié)數(shù)為5
打開file.txt,可以看到hello被寫入
(2)以讀方式打開文件,文件打開成功,往buff里讀127個(gè)字節(jié)(如果我們讀128實(shí)際存在比128個(gè)字節(jié)長(zhǎng),那么\0沒(méi)處放了,所以這里我們讀127.)
(3).我們可以用read和write結(jié)合完成一個(gè)拷貝操作,
讀寫操作結(jié)合完成拷貝passwd,拷貝后名為newpasswd. 讀一部分寫一部分,通過(guò)read返回值為0判斷讀完,結(jié)束。
拷貝成功,大小和原passwd一樣大.
總結(jié)
以上是生活随笔為你收集整理的linux文件拷贝函数,linux:文件操作函数(open,close,read,write)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux断开会话不中断进程,Linux
- 下一篇: linux检测u盘容量,Ubuntu18