系統調用-文件訪問
本文特色,該文件操作與linux操作系統shell命令對比講解!
Linux中文件變成可以使用兩種方法
1.Linux的系統調用
2.C語言函數的調用
前者是依賴於操作系統的
後者是c庫函數一般不會變,在哪系統下都一樣。
一、文件的創建
linux操作系統shell創建文件 #mkdir doc1 doc2
int creat(const char *filenme, mode_mode)
* filename 爲要創建的文件名
* mode:創建模式
一般創建的是在本文件路徑下
如果你之前玩過linux操作系統,你就會明白:chmod 777 filename 的意義
常見的創建屬性爲:
S_IRUSR 4 可讀
S_IWUSR 2 可寫
S_IXUSR 1 可執行
S_IXWRU 7 可寫讀執行
/************具體代碼實現****************/
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h> //後續要用到exit()函數;
#include<fcntl.h>
void create_file(char *filename)
{
If(creat(filename,0755)<0){ //在這裏表示已經執行了系統create函數,小於零表示創建文件不成功; 0755 代表權限一般爲root user other訪問文件權限
printf(“creat file %s failure\n”,filename)
exit(EXIT_FAILURE);
}else{
printf(“reate file % success!\n”,filename);
}
}
Int main(int argc,char *argv[]){ //argc文件參數,以前真的不知道這是啥意思,現在知道了,參數個數 第二個表示儲存名字的數組;
Int i;
If(argc<2){ //表示參數只有一個,在這裏只要明白創建文件,至少要兩個參數就可以了.
Perror(“you haven’t input the filename,lease tryagain !\n”);
exit (EXIT_FAILURE);
}
For (i=1;i<argc;i++){
Creat_file(argv[i]); //第一個rgv[1]用來放命令.]第二個參數(文件名)放在argv[2],
}
Exit(EXIT_SUCCESS);
)
}
二、系統調用_打開文件
linux操作系統shell文件打開 #cd doc1 #vi less more cat doc1
實際上還是調用了以下函數進行實現
Int open(const char*pathname,int flag,mode_t mode);
參數O_CREATE參數,如果沒有文件就獨立創建一個文件;
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
Int main(int argc,char *argv[])
{
Int fd;
If(argc<2){
Puts(“please input the open file pathname!\n”);
Exit(1);
//參數一是文件路徑,也就是文件名,第二個打開後可對其操作屬性,如果沒有就創建一個文件
If(fd=open(argv[1],o_creat,|O_RDWR,0755))<0){
Perror(“open file filure !\n”);
Exit(1);
}
Elae{
Printf(“open file %d sucess!\n”,fd);
}
Close (fd);
Exit(0);
}
}
三、系統調用_關閉
系統打開後會返回一個整數,也就是文件描述符,fd.
Int close(fd);
:wd 退出shell並保存文件
四、系統調用_讀
Int read(int fd ,const void *buf,size_tlength)
功能:
從文件描述符fd所指定的文件中讀取,也就是說在每次系統讀取文件內容的時候要先打開文件,然後根據 fd 處開 始讀文件。讀多少個自己length 加載到buf所指向的緩衝區中。
返回值爲實際的讀取的字節數。
Int write(int fd,const void*buf,size_t length)
Fd指向的文件中寫入buff中length個字節。
五、系統文件調用—定位
Int lseek(int fd,offset_t offset,int whence)
功能:
將文件讀寫的指針相對whence移動offset個字節。操作成功,返回指針相對於文件頭的爲位置。
系統調用—訪問判斷
有時候我們需要判斷文件是否可進行某項操作讀寫等,這時我們可以使用acces函數。
Int access(const char*pathname,int mode)
Mode: R_ok
W_ok
X_ok
F_ok
返回值,測試成功返回0,不符合返回-1;