1 <!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4 <meta http-equiv=
"Content-Type" content=
"text/html; charset=utf-8">
5 <meta http-equiv=
"Content-Style-Type" content=
"text/css">
6 <link rel=
"up" title=
"FatFs" href=
"../00index_j.html">
7 <link rel=
"alternate" hreflang=
"en" title=
"English" href=
"../en/forward.html">
8 <link rel=
"stylesheet" href=
"../css_j.css" type=
"text/css" media=
"screen" title=
"ELM Default">
9 <title>FatFs - f_forward
</title>
14 <div class=
"para func">
16 <p>ファイルからデータを読み出し、送信ストリームに直接転送します。
</p>
19 FIL*
<span class=
"arg">fp
</span>,
<span class=
"c">/* [IN] ファイル オブジェクト構造体 */
</span>
20 UINT (*
<span class=
"arg">func
</span>)(const BYTE*,UINT),
<span class=
"c">/* [IN] データ転送関数 */
</span>
21 UINT
<span class=
"arg">btf
</span>,
<span class=
"c">/* [IN] 転送するバイト数 */
</span>
22 UINT*
<span class=
"arg">bf
</span> <span class=
"c">/* [OUT] 転送されたバイト数 */
</span>
27 <div class=
"para arg">
31 <dd>ファイル オブジェクト構造体へのポインタを指定します。
</dd>
33 <dd>データを渡すユーザ定義関数へのポインタを指定します。この関数の仕様はサンプルを参照してください。
</dd>
35 <dd>転送するバイト数(
0~UINTの最大値)を指定します。
</dd>
37 <dd>実際に転送されたバイト数を格納する変数を指すポインタを指定します。
</dd>
42 <div class=
"para ret">
45 <a href=
"rc.html#ok">FR_OK
</a>,
46 <a href=
"rc.html#de">FR_DISK_ERR
</a>,
47 <a href=
"rc.html#ie">FR_INT_ERR
</a>,
48 <a href=
"rc.html#nr">FR_NOT_READY
</a>,
49 <a href=
"rc.html#de">FR_DENIED
</a>,
50 <a href=
"rc.html#io">FR_INVALID_OBJECT
</a>,
51 <a href=
"rc.html#tm">FR_TIMEOUT
</a>
56 <div class=
"para desc">
58 <p>ファイルのデータをバッファに読み出さずに送信ストリームに直接転送します。アプリケーション側でデータ バッファを必要としないので、メモリの限られた環境で有効です。リード/ライト ポインタは転送されたバイト数だけ進みます。指定されたバイト数の転送中にファイルの終端に達した場合や送信ストリームがビジーになった場合、
<tt class=
"arg">*bf
</tt>は
<tt class=
"arg">btf
</tt>よりも小さくなります。
</p>
62 <div class=
"para comp">
64 <p><tt>_USE_FORWARD ==
1</tt>で、且つ
<tt>_FS_TINY ==
1</tt>のときに使用可能です。
</p>
68 <div class=
"para use">
71 <span class=
"c">/*-----------------------------------------------------------------------*/
</span>
72 <span class=
"c">/* f_forward関数から呼ばれるデータ送信関数の例 */
</span>
73 <span class=
"c">/*-----------------------------------------------------------------------*/
</span>
75 UINT out_stream (
<span class=
"c">/* 戻り値: 転送されたバイト数またはストリームの状態 */
</span>
76 const BYTE *p,
<span class=
"c">/* 転送するデータを指すポインタ */
</span>
77 UINT btf
<span class=
"c">/*
>0: 転送を行う(バイト数).
0: ストリームの状態を調べる */
</span>
83 if (btf ==
0) {
<span class=
"c">/* センス要求 */
</span>
84 <span class=
"c">/* ストリームの状態を返す (
0: ビジー,
1: レディ) */
</span>
85 <span class=
"c">/* 一旦、レディを返したら、続く転送要求で少なくとも
1バイトは */
</span>
86 <span class=
"c">/* 転送されないと f_forward関数は FR_INT_ERR となる。 */
</span>
87 if (FIFO_READY) cnt =
1;
89 else {
<span class=
"c">/* 転送要求 */
</span>
90 do {
<span class=
"c">/* 全てのバイトを転送するか、ストリームがビジーになるまで繰り返す */
</span>
93 } while (cnt
< btf
&& FIFO_READY);
100 <span class=
"c">/*-----------------------------------------------------------------------*/
</span>
101 <span class=
"c">/* f_forward関数の使用例 */
</span>
102 <span class=
"c">/*-----------------------------------------------------------------------*/
</span>
105 char *fn
<span class=
"c">/* 再生するオーディオ ファイル名を指すポインタ */
</span>
112 <span class=
"c">/* ファイルを読み出しモードで開く */
</span>
113 rc = f_open(
&fil, fn, FA_READ);
116 <span class=
"c">/* 全てのデータが転送されるかエラーが発生するまで続ける */
</span>
117 while (rc == FR_OK
&& fil.fptr
< fil.fsize) {
119 <span class=
"c">/* ほかの処理... */
</span>
121 <span class=
"c">/* 定期的または要求に応じてデータをストリームに送出する */
</span>
122 rc = f_forward(
&fil, out_stream,
1000,
&dmy);
125 <span class=
"c">/* ファイルを閉じて戻る */
</span>
133 <div class=
"para ref">
135 <p><tt><a href=
"open.html">f_open
</a>,
<a href=
"gets.html">fgets
</a>,
<a href=
"write.html">f_write
</a>,
<a href=
"close.html">f_close
</a>,
<a href=
"sfile.html">FIL
</a></tt></p>
138 <p class=
"foot"><a href=
"../00index_j.html">戻る
</a></p>