利用read/write系統呼叫複製檔案
//copy_system.c
//NOTE: unistd.h header file should be included at first // for other header files would depend on it #include <unistd.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <errno.h> //for files #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #define STD_FILE_INPUT 0 #define STD_FILE_OUTPUT 1 #define STD_FILE_ERROR 2 #define EACH_UNIT 128 int main(int argc, char* argv[]){ const char *src_file = "./draft1.txt"; const char *dest_file = "./draft2.txt"; //open two files int fd_src = open(src_file, O_RDONLY); if(fd_src == -1){ char err[128]; sprintf(err, "open src file failed, errno = %d \n", errno); write(STD_FILE_OUTPUT, err, strlen(err)+1); return -1; } int fd_dest = open(dest_file, O_WRONLY | O_CREAT, S_IWUSR | S_IRUSR); if(fd_dest == -1){ char err[128]; sprintf(err, "open [O_WRONLY] dest file failed, errno = %d \n", errno); write(STD_FILE_OUTPUT, err, strlen(err)+1); fd_dest = open(dest_file, O_CREAT, S_IWUSR | S_IRUSR); if(fd_dest == -1) { char err[128]; sprintf(err," create [ S_IWUSR | S_IRUSR] dest file failed, errno = %d \n", errno); write(STD_FILE_OUTPUT, err, strlen(err)+1); close(fd_src); return -1; } } int nread = 1; while(nread){ char c ; //nread = read(fd_src, &c, sizeof(c)); char data[EACH_UNIT] = {0}; nread = read(fd_src, &data, sizeof(data)); if(-1 != nread){ //fd_src+=nread; printf("[while] - nread :%d \n", nread ); //檔案控制代碼自己追加,不需要開發者移位 //int nwrite = write(fd_dest, &c, nread); int nwrite = write(fd_dest, &data, nread); printf("[while] - nwrite :%d \n", nwrite ); if(nwrite == -1){ const char * err_msg_write = "write error\n"; write(STD_FILE_OUTPUT, err_msg_write, sizeof(err_msg_write)/ sizeof(err_msg_write[0])); close(fd_dest); close(fd_src); return -2; } //fd_dest+=nwrite; }else{ const char * err_msg_read = "read error\n"; write(STD_FILE_OUTPUT, err_msg_read, sizeof(err_msg_read)/ sizeof(err_msg_read[0])); close(fd_dest); close(fd_src); return -3; } }//while //close both file handles close(fd_dest); close(fd_src); return 0; } /* 測試花費時間 [
[email protected] file-system]$ TIMEFORMAT="" time ./test-copy-system [while] - nread :128 [while] - nwrite :128 [while] - nread :14 [while] - nwrite :14 [while] - nread :0 [while] - nwrite :0 0.00user 0.00system 0:00.00elapsed ?%CPU (0avgtext+0avgdata 432maxresident)k 0inputs+0outputs (0major+141minor)pagefaults 0swaps */
相關推薦
利用read/write系統呼叫複製檔案
//copy_system.c //NOTE: unistd.h header file should be included at first // for other header files would depend on it #include <unis
linux中的read和write系統呼叫
linux中read和write系統呼叫 在這裡小koala著重於read()和write()來讀寫普通檔案,因為小koala在編寫實際檔案讀寫函式時,疏忽了一些重要的地方,造成無休止的向系統中寫資料,最後系統崩潰。當時瞬間“三觀”盡毀。現在較為詳細地分析錯誤
Linux檔案系統學習(四)之read open系統呼叫
open的執行過程:v2.6.30 Open Sys_open |do_sys_open() |get_unused_fd_flags ()//得到一個可用的檔案描述符;通過該函式,可知檔案描述符
再探Linux核心write系統呼叫操作的原子性
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
系統呼叫方式檔案程式設計
1.核心理論 檔案描述符: 在linux系統中,所有開啟的檔案對應一個數字,這個數字由系統來分配,我們稱之為:檔案描述符。 2.函式學習 開啟檔案 函式名: open 函式原型:int open
Linux下系統呼叫實現檔案操作
系統呼叫(系統呼叫是作業系統提供給使用者程式的一組“特殊”函式介面,使用者通過這組介面獲得作業系統提供的服務)中操作I/O的函式,都是針對檔案描述符的。 通過檔案描述符可以直接對相應檔案進行操作,如:open、close、write、read、ioctl #define STDIN_FIL
Linux系統呼叫之檔案函式
先說明可用的檔案I/O函式——開啟檔案,讀檔案,寫檔案等。 但是在Linux中大多數檔案I/O只需要用到5個函式:open、read、write、lseek及close。 一、open函式 呼叫open函式可以開啟或建立一個檔案。 返回值:若成功則返回檔案描述符,若出錯則返回-
Linux系統呼叫之檔案描述符
每個執行的中的程式被稱為程序,他有一些與之關聯的檔案描述符。 檔案描述符就相當於Windows中的File * 指標,標記著檔案資訊,然而我們可以知道檔案描述符為一個非負整數,怎麼用一個非負整數描述一個檔案呢。 在作業系統中,每一個程序都有標記自己的程序控制塊(PCB)。 在PCB中,就
Select()系統呼叫及檔案描述符集fd_set的應用
過去,描述符集被作為一個整數位遮蔽碼得到實現,但是這種實現對於多於32個的檔案描述符將無法工作。描述符集現在通常用整數陣列中的位域表示,陣列元素的每一位對應一個檔案描述符。例如,一個整數佔32位,那麼整數陣列的第一個元素代表檔案描述符0到31,陣列的第二個元素代表檔案描述符32到63,以此類推。巨集FD_SE
linux系統呼叫 建立檔案 file_creat.c
void creat_file(char * filename) { if(creat(filename,0755)<0) { printf("create file %s failure!\n",filename); exit(EXIT_FAILURE
select()系統呼叫和檔案描述符集fd_set 轉
過去,描述符集被作為一個整數位遮蔽碼得到實現,但是這種實現對於多於32個的檔案描述符將無法工作。描述符集現在通常用整數陣列中的位域表示,陣列元素的每一位對應一個檔案描述符。例如,一個整數佔32位,那麼整數陣列的第一個元素代表檔案描述符0到31,陣列的第二個元素代表檔案描述符32到63,以此類推。巨集FD_SE
LS8-linux系統呼叫方式檔案程式設計之學習筆記
linux系統呼叫方式檔案程式設計 定義/功能:檔案描述符 在Linux系統中,所有開啟的檔案對應一個數字,這個數字由系統分配,稱之為:檔案描述符。(可類似理解為:省份證號與你本人的關係),通過檔案描述符便可以對檔案進行操作。 開啟檔案 1.1 函式名
Linux VFS中write系統呼叫實現原理
目錄 WORD裡面的目錄複製過來似乎不能直接用。。還是放在這裡當主線看吧.. 使用者空間的write函式在核心裡面的服務例程為sys_write [email protected]
四種讀寫檔案的方式:系統呼叫(open/read/write),C語言(fopen,fgets, fputs),C++(ifstream, ofstream getline,)泛型演算法
第一種方法是系統呼叫 (1)open系統呼叫 原型: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>
open/read/write/close等檔案系統呼叫介面以及fd與FILE的比較
在Linux系統下,檔案是一個很重要的概念,接下來就介紹一下其相關的介面函式 一、熟悉open/read/write/close等檔案相關係統呼叫介面 1、open函式 註釋: (1)函式說明:用來開啟一個已經存在的檔案或者建立一個普通檔案 (
Linux下的C語言程式設計——系統呼叫read和write函式實現檔案拷貝
系統呼叫read和write函式實現檔案拷貝 #include <stdio.h> #include <sys/types.h> #include <sys/st
組合語言呼叫Linux系統呼叫read和write
.section .data UserMsg: .ascii "Please input the message:" LenOfUserMsg: .equ lenMsg, LenOfUserMsg - UserMsg #.section .bss # .lcomm r
linux系統呼叫open、write、close、read以及stat函式詳解
學習筆記 參考連結1 、參考連結2以及百度百科 在進行C語言學習的時候我們瞭解到了C語言相關的一些IO操作,如fopen,fwrite,fread,fprintf,fclose等相關函式,他們都是由C庫函式提供的一些函式,是將作業系
系統呼叫——open、write、read和close
一、檔案描述符 每一個程序都有一個與之相關的檔案描述符,它們是一些小值整數,我們可以通過這些檔案描述符來訪問開啟的檔案。 一般地,一個程式開始執行時,會自動開啟3個檔案描述符: 0——–標準輸入———-stdin 1——–標準輸出———-stdout
系統呼叫:write、open、read
一、open 簡單來說,open建立了一條到檔案或裝置的訪問路徑。如果呼叫成功,它則返回一個可以被read、write和其他系統呼叫使用的檔案描述符。這個檔案描述符是惟一的,它不會與其他任何執行中的程序共享,如果兩個程式同時開啟同一個檔案,他們會分別得到兩個不同的