日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux系统文件编程(1)

發布時間:2023/12/10 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux系统文件编程(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

打開文件

int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);

open----返回的是文件描述符是整形數(文件描述符在形式上是一個非負整數。實際上,它是一個索引值,指向內核為每一個進程所維護的該進程打開文件的記錄表。當程序打開一個現有文件或者創建一個新文件時,內核向進程返回一個文件描述符。在程序設計中,一些涉及底層的程序編寫往往會圍繞著文件描述符展開。但是文件描述符這一概念往往只適用于UNIX、Linux這樣的操作系統。)打開成功返回非負數,失敗返回-1。
pathname----要打開的文件名稱。
flags-----是打開文件的權限包含
{
O_RDONLY——只讀打開
O_WRONLY——只寫打開
O_RDWR——可讀可寫打開(常用)
}
示例如下

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> int main() {int fd;fd=open("./file1",O_RDWR);//file1是要打開的文件,fd是文件描述符printf("fd=%d\n",fd);return 0; } ps:頭文件可用man手冊查看

Mode---- 一定是在flags中使用了O_CREAT標志,mode記錄待創建文件的訪問權限。
權限:
{
可讀 r 4
可寫 w 2
可執行 x 1
}
例如:0600 表示可讀可寫(4+2=6)
文件不存在則打開失敗要用到O_CREAT
示例如下

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> int main() {int fd;fd=open("./file1",O_RDWR);if(fd==-1){printf("open file1 fail");fd=open("./file1",O_RDWR|O_CREAT,0600);//文件不存在則創建文件,0600是待創建文件的權限。if(fd>0){printf("creat file1 fd=%d\n",fd);}}return 0; }

寫入文件

ssize_t write(int fd, const void *buf, size_t count); 第一個參數是文件描述符 第二個參數是緩沖區(就是要寫入內容的指針) 第三個參數是要寫入文件的大小 若寫入成功返回寫入的字節數,失敗則返回-1.

代碼示例

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> #include <unistd.h> #include <string.h> int main() {int fd;char*buf="i am handsome";//將要寫入文件的內容fd=open("./file1",O_RDWR);//"./file1" is wenjianlujingif(fd==-1){printf("open file1 fail\n");fd=open("./file1",O_RDWR|O_CREAT,0600);if(fd>0){printf("creat file1\n");}}printf("open successful fd=%d\n",fd);write(fd,buf,strlen(buf));//strlen計算字符串的長度,sizeof()在這里計算的是指針的大小close(fd);//寫完文件后要關閉文件return 0;}

文件的讀取

ssize_t read(int fd, void *buf, size_t count); fd:文件描述符 buf:把讀取的數據放到buf中 count:所要讀取的字節數 若成功則返回讀取的字節數,失敗返回-1.

代碼示例

#include <unistd.h> #include <string.h> #include <stdlib.h> int main() {int fd;char*buf="i am handsome";//將要寫入文件的內容fd=open("./file1",O_RDWR);//"./file1"是文件路徑if(fd==-1){printf("open file1 fail\n");fd=open("./file1",O_RDWR|O_CREAT,0600);if(fd>0){printf("creat file1\n");}}printf("open successful fd=%d\n",fd);int n_write=write(fd,buf,strlen(buf));//返回字節的長度if(n_write!=-1){printf("write successfuli %d\n",n_write);}close(fd); 重新打開定位光標(光標在文件的頭)fd=open("./file1",O_RDWR);char*readbuf;readbuf=(char *)malloc(n_write*sizeof(char));int n_read=read(fd,readbuf,n_write);printf("read %d,context %s\n",n_read,readbuf);close(fd);return 0; }

文件光標的移動操作

off_t lseek(int fd, off_t offset, int whence); fd:文件描述符 offset:將讀寫指針相對whence移動offset個字節,負數向前偏移,正數向后偏移 whence: { SEEK_SET:文件的頭SEEK_CUR:當前位置SEEK_END:文件的尾 } 調用成功返回從當前位置到文件頭所偏移的字節數,失敗則返回-1.

代碼改進

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> int main() {int fd;char*buf="i am handsome";//將要寫入文件的內容fd=open("./file1",O_RDWR);if(fd==-1){printf("open file1 fail\n");fd=open("./file1",O_RDWR|O_CREAT,0600);if(fd>0){printf("creat file1\n");}}printf("open successful fd=%d\n",fd);int n_write=write(fd,buf,strlen(buf));if(n_write!=-1){printf("write successfuli %d\n",n_write);} // close(fd); // fd=open("./file1",O_RDWR);lseek(fd,-n_write,SEEK_END);char*readbuf;readbuf=(char *)malloc(n_write*sizeof(char));int n_read=read(fd,readbuf,n_write);printf("read %d,context %s\n",n_read,readbuf);close(fd);return 0; }

可利用lseek計算文件的字節數

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> #include <unistd.h> #include <string.h>#include <stdlib.h> int main() {int fd;char*buf="i am handsome";fd=open("./file1",O_RDWR);int filesize=lseek(fd,0,SEEK_END);printf("size=%d\n",filesize);close(fd);return 0; }

總結

以上是生活随笔為你收集整理的Linux系统文件编程(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。