系統調用-文件訪問 創建、打開、關閉、讀、寫

系統調用-文件訪問

 

本文特色,該文件操作與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 havent 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指向的文件中寫入bufflength個字節。

 

五、系統文件調用—定位

 

Int lseek(int fd,offset_t offset,int whence)

功能:

將文件讀寫的指針相對whence移動offset個字節。操作成功,返回指針相對於文件頭的爲位置。

 

系統調用—訪問判斷

有時候我們需要判斷文件是否可進行某項操作讀寫等,這時我們可以使用acces函數。

Int accessconst char*pathnameint mode

Mode: R_ok

W_ok

X_ok

F_ok

返回值,測試成功返回0,不符合返回-1

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章