Open/read/write/closeなどのファイル関連システム呼び出しインタフェースを練習し、fdとFILE構造体を縦に比較する
open
write
read
close fd:ファイル記述子(OS層)
fdは整数にすぎずopen時に生成される.インデックスとして機能し、プロセスはPCBのファイル記述子テーブルを介してfdが指すファイルポインタfileを見つけるため、Linuxシステムの下で、ファイル記述子は主にファイルを識別するために使用される.カーネルはファイルオブジェクトテーブルによってシステム内の様々なファイルを管理し、ファイルテーブルはポインタによって開いたファイルを指し、さらにファイルシステム全体を管理する目的を達成する.
CではファイルポインタをI/Oのハンドルとして使用し、ファイルポインタはプロセスのユーザ空間のFILE機構体を指す.
#include
#include
#include
int open(const char *pathname,int flags);
int open(coonst char *pathname,int flag,mode_t mode);
pathname:
flags: , , “ ” , flags
:
O_RDONLY :
O_WRONLY :
O_RDWR : ,
,
O_CREAT : , , mode ,
write
size_t write(int fd,const void *buf,size_t nbyte)
:
fd:
buf: ,
nbyte:
:
, -1
read
size_t read(int fd,const void *buf,size_t nbyte)
:
fd:
buf:
nbyte:
:
( ), , ( , , read() ), -1。
close
int close(int fd);
:
fd:
:
0, -1
fdは整数にすぎずopen時に生成される.インデックスとして機能し、プロセスはPCBのファイル記述子テーブルを介してfdが指すファイルポインタfileを見つけるため、Linuxシステムの下で、ファイル記述子は主にファイルを識別するために使用される.カーネルはファイルオブジェクトテーブルによってシステム内の様々なファイルを管理し、ファイルテーブルはポインタによって開いたファイルを指し、さらにファイルシステム全体を管理する目的を達成する.
FILE: (lib , C )
CではファイルポインタをI/Oのハンドルとして使用し、ファイルポインタはプロセスのユーザ空間のFILE機構体を指す.
//C
int fileno(FILE * stream)
FILE * fdopen(int fd, const char * mode)
struct _iobuf {
char *_ptr; //
int _cnt;
char *_base; //
int _flag; //
int _file; //
int _charbuf; //
int _bufsiz; //
char *_tmpfname;
};
typedef struct _iobuf FILE;