Linux系統編程:簡單文件IO操作
使用Linux的文件API,經常看見一個東西,叫做文件描述符.
什麽是文件描述符?
(1)文件描述符其實實質是一個數字,這個數字在一個進程中表示一個特定的含義,當我們open打開一個文件時,操作系統在內存中構建了一些數據結構來表示這個動態文件,然後返回給應用程序一個數字作為文件描述符,這個數字就和我們內存中維護這個動態文件的這些數據結構掛鉤綁定上了,以後我們應用程序如果要操作這一個動態文件,只需要用這個文件描述符進行區分。
(2)文件描述符就是用來區分一個程序打開的多個文件的。
(3)文件描述符的作用域就是當前進程,出了當前進程這個文件描述符就沒有意義了
(4)文件描述符fd的合法範圍是0或者一個正數,不可能是一個負數
(5)open返回的fd必須記錄好,以後向這個文件的所有操作都要靠這個fd去對應這個文件,最後關閉文件時也需要fd去指定關閉這個文件。如果在我們關閉文件前fd丟了,那麽這個文件就沒法關閉了也沒法讀寫了
1)打開與讀取文件
1 #include <stdio.h> 2 #include <sys/types.h> 3 #include <sys/stat.h> 4 #include <fcntl.h> 5 #include <unistd.h> 6 7 int main(int argc, char const*argv[]) { 8 9 int fd = -1; //文件描述符 10 11 //打開文件 12 fd = open( "ghostwu.txt", O_RDWR ); 13 14 if ( -1 == fd ) { 15 printf("文件打開失敗\n"); 16 }else { 17 printf("文件打開成功,fd=%d\n", fd ); 18 } 19 20 //讀取文件 21 int count = 0; 22 char buf[20]; 23count = read( fd, buf, 50 ); 24 if ( -1 == count ) { 25 printf("文件讀取失敗\n"); 26 }else { 27 printf("文件讀取成功,實際讀取的字節數目為:%d\n內容為%s\n", count, buf ); 28 } 29 30 //關閉文件 31 close( fd ); 32 33 return 0; 34 }
需要在當前目錄下存在ghostwu.txt這個文件,否則打開的時候失敗,這裏涉及2個api
int open(const char *pathname, int flags);
open非常簡單,第一個參數就是文件路徑, 第二個是文件模式,在man手冊中還提供了其他幾種方式。
ssize_t read(int fd, void *buf, size_t count);
第一個參數為文件描述符,就是open返回的那個值
第二個參數buf用來存儲從文件中讀取的內容
第三個參數,表示希望從文件中讀取的內容( 註:這個count數字可以隨便給,最終以返回的實際數目(read的返回值)為準
2)打開與寫入文件
1 #include <stdio.h> 2 #include <sys/types.h> 3 #include <sys/stat.h> 4 #include <fcntl.h> 5 #include <unistd.h> 6 #include <string.h> 7 8 int main(int argc, char const *argv[]) { 9 10 int fd = -1; //文件描述符 11 12 //打開文件 13 fd = open( "ghostwu.txt", O_RDWR ); 14 15 if ( -1 == fd ) { 16 printf("文件打開失敗\n"); 17 }else { 18 printf("文件打開成功,fd=%d\n", fd ); 19 } 20 21 //寫文件 22 char buf[] = "I love Linux, Linux is very very good!!!"; 23 int count = 0; 24 count = write( fd, buf, strlen( buf ) ); 25 if ( -1 == count ) { 26 printf("文件寫入失敗\n"); 27 }else { 28 printf("文件寫入成功,實際寫入的字節數目為:%d\n", count); 29 } 30 31 //關閉文件 32 close( fd ); 33 34 return 0; 35 }
ssize_t write(int fd, const void *buf, size_t count);
第一個參數為文件描述符,就是open返回的那個值
第二個參數buf用來存儲寫入的內容
第三個參數,表示希望寫入的文件大小
Linux系統編程:簡單文件IO操作