≪システム・コール|System Call|Eas≫-ファイル・アクセスの作成、開く、閉じる、読む、書く


システムコール-ファイルアクセス
 
本文の特色、このファイルの操作はlinuxオペレーティングシステムshellコマンドと比較して説明します!
 
Linuxのファイルは2つの方法を使用できるようになりました
1.Linuxのシステム呼び出し
2.C言語関数の呼び出し
前者はオペレーティングシステムに依存する
後者はcライブラリ関数は一般的に変わらず、どのシステムでも同じです.
一、ファイルの作成
linuxオペレーティングシステムshell作成ファイル#mkdir doc 1 doc 2
 
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  
#include
#include//その後exit()関数を使用します.
#include
 
void create_file(char *filename)
{
If(creat(filename,0755)<<0){//ここではシステムcreate関数が実行されていることを示し、ゼロ未満はファイルの作成に成功していないことを示します.0755はroot user otherアクセス権限を表します.
printf(“creat file %s failure”,filename)
exit(EXIT_FAILURE);
}else{
printf(“reate file % success!”,filename);
}
}
Int main(int argc,char*argv[])/argcファイルパラメータは、以前は本当にこれがどういう意味なのか分かりませんでしたが、パラメータの個数が2番目に格納された名前を表す配列であることがわかりました.
 
Int i;
If(argc<2){//はパラメータが1つしかないことを示すが、ここではファイルの作成が分かる限り、少なくとも2つのパラメータが必要である.
Perror(“you haven’t input the filename,lease tryagain !”);
exit (EXIT_FAILURE);
}
For (i=1;i
Creat_file(argv[i]);//最初のrgv[1]コマンドを置くために使用されます.]2番目のパラメータ(ファイル名)はargv[2]、
 
}
Exit(EXIT_SUCCESS);
)
 
}
 
二、システム呼び出し_ファイルを開く
linuxオペレーティングシステムshellファイル開く#cd doc 1#viless more cat doc 1
実際には次の関数が呼び出されて実装されます.
 
Int open(const char*pathname,int flag,mode_t mode);
パラメータO_CREATEパラメータは、ファイルがなければ独立してファイルを作成します.
#include
#include
#include
#include
#include
Int main(int argc,char *argv[])

Int fd;
If(argc<2){
Puts(“please input the open file pathname!”);
Exit(1);
//パラメータ1つはファイルパス、つまりファイル名で、2つ目が開いた後にその操作属性を操作でき、なければファイルを作成する
If(fd=open(argv[1],o_creat,|O_RDWR,0755))<0){
Perror(“open file filure !”);
Exit(1);
}
Elae{
 
Printf(“open file %d sucess!”,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に合致しません.