文件讀寫
文件讀寫是指從文件中讀出信息或將信息寫入到文件中。Linux文件讀取可使用read函數來實現的,文件寫入可使用write函數來實現。在進行文件寫入的操作時,只是在文件的緩沖區中操作,可能沒有立即寫入到文件中。需要使用sync或fsync函數將緩沖區的數據寫入到文件中。
文件寫操作:
函數write可以把一個字符串寫入到一個已經打開的文件中,這個函數的使用方法如下:
ssize_t write (int fd , void *buf , size_t count);
參數:
fd:已經打開文件的文件編號。
buf:需要寫入的字符串。
count:一個整數型,需要寫入的字符個數。表示需要寫入內容的字節的數目。
返回值:
如果寫入成功,write函數會返回實際寫入的字節數。發生錯誤時則返回-1,可以用errno來捕獲發生的錯誤。
[Linux@centos-64-min exercise]$ cat write.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
int main(void)
{
int fd ;
char path[] = "txt1.txt";
char s[]="hello ...";
extern int errno;
fd = open(path , O_WRONLY|O_CREAT|O_TRUNC , 0766);
if(fd != -1)
{
printf("opened file %s .\n" , path);
}
else
{
printf("can't open file %s.\n" , path);
printf("errno: %d\n" , errno); //打印錯誤編號
printf("ERR : %s\n" , strerror(errno)); //打印錯誤編號對應的信息。
}
write(fd , s , sizeof(s));
close(fd);
printf("Done\n");
return 0;
}
[Linux@centos-64-min exercise]$ ./write
opened file txt1.txt .
Done
讀取文件函數read
函數read可以從一個打開的文件中讀取字符串。
ssize_t read(int fd , void *buf , size_t count);
參數:fd:表示已經打開的文件的編號。
buf:是個空指針,讀取的內容會返回到這個指針指向的字符串。
count:表示需要讀取的字符的個數。
返回值:返回讀取到字符的個數。如果返回值為0,表示已經達到文件末尾或文件中沒有內容可讀。
fd = open(path , O_RDONLY);
if(fd != -1)
{
printf("opened file %s .\n" , path);
}
else
{
printf("can't open file %s.\n" , path);
printf("errno: %d\n" , errno);
printf("ERR : %s\n" , strerror(errno));
}
if((size = read(fd , str , sizeof(str))) < 0)
{
printf("ERR: %s" , strerror(size)); //如果有錯,通過錯誤編號打印錯誤消息。
}
else
{
printf("%s\n" , str);
printf("%d\n" , size);
}
close(fd);
return 0;
}
result:
opened file txt1.txt .
hello ...
10