#define BUF_SIZE 2048GfsHn gfs; /* ファイルハンドル */ Sint32 fid; /* ファイル識別子 */ Sint32 nsct = 1; /* 読み込みセクタ数 */ Uint32 buf[BUF_SIZE/4]; /* 読み込み領域 */ gfs = GFS_Open(fid); /* ファイルオープン */ GFS_Fread(gfs, nsct, buf, BUF_SIZE); /* bufにnsctセクタ読み込む */ GFS_Close(gfs); /* ファイルクローズ */
#define BUF_SIZE 2048*2 GfsHn gfs; /* ファイルハンドル */ Sint32 nsct = 2; /* 読み込みセクタ数 */ Sint32 stat; /* サーバの状態 */ Uint32 buf[BUF_SIZE/4]; /* 読込み領域 */ gfs = GFS_Open(fid); /* ファイルオープン */ /* リクエスト関数 */ GFS_NwFread(gfs, nsct, buf, BUF_SIZE); /* bufにnsctセクタ読み込む */ /* 即時復帰する */ for (;;) { /* サーバ関数 */ stat = GFS_NwExecOne(gfs); /* 読み込みの実行 */ if (stat == GFS_SVR_COMPLETED) { /* 読み込み完了か ? */ break; } user(); /* 任意のユーザ処理 */ }GFS_Close(gfs); /* ファイルクローズ */
/* 各ファイルからの読み込みセクタ数 */ #define NSCT1 1 #define NSCT2 2 #define NSCT3 3 /* 各ファイルのデータ格納領域の大きさ(単位はバイト) */ #define BSIZE1 2048*NSCT1 #define BSIZE2 2048*NSCT2 #define BSIZE3 2048*NSCT3Sint32 fid1, fid2, fid3; /* 各ファイルのファイル識別子 */ GfsHn gfs1, gfs2, gfs3; /* 各ファイルのファイルハンドル */ Uint32 buf1[BSIZE1/4]; /* 各ファイルのデータ格納領域 */ Uint32 buf2[BSIZE2/4]; Uint32 buf3[BSIZE3/4]; GfsHn now_gfs; /* アクセス中のファイルハンドル */ Sint32 stat; /* サーバの状態 */ gfs1 = GFS_Open(fid1); /* ファイルオープン */ gfs2 = GFS_Open(fid2); gfs3 = GFS_Open(fid3); GFS_NwFread(gfs1, NSCT1, buf1, BSIZE1); /* 読み込み動作の開始 */ GFS_NwFread(gfs2, NSCT2, buf2, BSIZE2); GFS_NwFread(gfs3, NSCT3, buf3, BSIZE3); for (;;) { stat = GFS_NwExecServer(&now_gfs); /* 読み込みの実行 */ if (stat == GFS_SVR_COMPLETED) { /* 実行する仕事がないか? */ break; } user(); /* 任意のユーザ処理 */ } GFS_Close(gfs1); GFS_Close(gfs2); GFS_Close(gfs3);
#define SECT_SIZE 2048 #define FILE_SECT 1000 #define FILE_SIZE (FILE_SECT*SECT_SIZE) #define RD_UNIT 10 Uint8 *rd_bp, *proc_bp; /* 読み込みバッファと処理バッファ */ Uint32 buf1[RD_UNIT*SECT_SIZE/4]; /* データ格納領域1 */ Uint32 buf2[RD_UNIT*SECT_SIZE/4]; /* データ格納領域2 */ GfsHn gfs; Sint32 i, stat, nbyte;gfs = GFS_Open(fid); GFS_NwCdRead(gfs, FILE_SECT); /* CDバッファへの先読み指示 */ GFS_SetTransPara(gfs, RD_UNIT); /* 最大RD_UNITセクタ1度に取り出す */ for (i = 0; i < FILE_SECT / RD_UNIT; ++i) { /* 読み込み、処理バッファの設定 */ if (i & 1) { rd_bp = buf1; proc_bp = buf2; } else { rd_bp = buf2; proc_bp = buf1; } /* CDバッファからの取り出し実行 */ GFS_NwFread(gfs, RD_UNIT, rd_bp, RD_UNIT * SECT_SIZE); do { if (i & 0) { user_process(proc_bp); /* 読み込んだデータに対する処理 */ } else { user_process0(); /* データが読み込まれる前の処理 */ } GFS_NwExecOne(gfs); GFS_NwGetStat(gfs, &stat, &nbyte); }while (nbyte < RD_UNIT * SECT_SIZE); }