【PHP8.x】fseek()関数の使い方
fseek関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
fseek関数は、ファイルポインタを移動させる関数です。PHPでファイルを開いて読み書きを行う際、ファイル内には現在の読み書き位置を示す「ファイルポインタ」という内部的な目印があります。fseek関数は、このファイルポインタを指定した位置に移動させるために使用されます。
この関数を利用することで、開いているファイルの特定のバイト位置に直接ジャンプし、そこからデータの読み書きを開始することが可能になります。例えば、ファイルの先頭から何バイト目かの位置に移動したり、現在の読み書き位置から前後に指定したバイト数だけ移動したり、あるいはファイルの末尾に移動したりすることができます。これにより、ファイル全体を順に読み進めるだけでなく、必要な部分だけを効率的に読み書きできるようになります。
fseek関数は主に3つの引数を取ります。1つ目はfopen()などで取得したファイルリソース、2つ目は移動するバイト数を示す「オフセット」、3つ目はオフセットの基準位置です。基準位置には、ファイルの先頭からの移動を示すSEEK_SET、現在のファイルポインタ位置からの移動を示すSEEK_CUR、ファイルの末尾からの移動を示すSEEK_ENDのいずれかを指定します。
移動が成功した場合は0を返し、失敗した場合は-1を返しますので、関数の戻り値を確認することで、ファイルポインタの移動が適切に行われたかを判断できます。この機能は、特に大きなファイルを扱う場合や、ファイル内の特定のデータブロックに素早くアクセスする必要がある場合に非常に有効です。ファイルの特定箇所に繰り返しアクセスするような処理で、効率的なファイル操作を実現します。
構文(syntax)
1<?php 2$fileResource = fopen('data.txt', 'r'); 3$byteOffset = 10; 4$seekOrigin = SEEK_SET; // SEEK_SET (ファイル先頭), SEEK_CUR (現在位置), SEEK_END (ファイル末尾) 5 6$status = fseek($fileResource, $byteOffset, $seekOrigin); 7 8fclose($fileResource); 9?>
引数(parameters)
resource $stream, int $offset, int $whence = SEEK_SET
- resource $stream: 操作対象のファイルポインタまたはストリームリソース
- int $offset: 移動するバイト数
- int $whence = SEEK_SET: 相対位置を指定する定数 (SEEK_SET: ファイルの先頭, SEEK_CUR: 現在位置, SEEK_END: ファイルの末尾)
戻り値(return)
int
ファイルポインタを移動させた位置をバイト単位で返します。成功した場合は0、失敗した場合は-1を返します。
サンプルコード
PHP fseek関数でファイルポインタを移動する
1<?php 2 3/** 4 * PHPのfseek関数を使用して、ファイルポインタの移動をデモンストレーションします。 5 * システムエンジニアを目指す初心者向けに、SEEK_SET, SEEK_END, SEEK_CUR の各モードでの動作を示します。 6 */ 7function demonstrateFseek(): void 8{ 9 $fileName = 'fseek_example.txt'; 10 $fileContent = "Hello World!\nPHP fseek example."; 11 12 // 1. テストファイルを作成し、内容を書き込みます。 13 // このファイルを使ってfseekの動作を確認します。 14 file_put_contents($fileName, $fileContent); 15 16 // 2. ファイルを読み書きモード('r+')で開きます。 17 // r+モードは、ファイルポインタを先頭に置いて読み書きを可能にします。 18 $fileHandle = fopen($fileName, 'r+'); 19 20 // ファイルのオープンに失敗した場合はエラーメッセージを表示し終了します。 21 if (!$fileHandle) { 22 echo "エラー: ファイル '{$fileName}' のオープンに失敗しました。\n"; 23 return; 24 } 25 26 echo "--- fseek関数のデモンストレーション ---\n"; 27 echo "元のファイル内容:\n" . file_get_contents($fileName) . "\n\n"; 28 29 // ---------------------------------------------------- 30 // SEEK_SET の使用例: ファイルの先頭からオフセットを指定 31 // ---------------------------------------------------- 32 // fseekでファイルポインタをファイルの先頭から6バイト目に移動させます。 33 // "Hello World!\n..." の "Hello " の直後 ('W'の直前) になります。 34 fseek($fileHandle, 6, SEEK_SET); 35 echo "1. SEEK_SET (先頭から6バイト目) 後:\n"; 36 echo " 現在のポインタ位置: " . ftell($fileHandle) . "バイト目\n"; // ポインタの現在の位置を確認 37 // 現在のポインタ位置から5バイト読み取ります。 38 echo " 読み取った内容: '" . fread($fileHandle, 5) . "'\n\n"; // "World" が読み取られます 39 40 // ---------------------------------------------------- 41 // SEEK_END の使用例: ファイルの末尾からオフセットを指定 42 // ---------------------------------------------------- 43 // fseekでファイルポインタをファイルの末尾から-7バイト目に移動させます。 44 // "PHP fseek example." の "example." の 'e' の直前になります。 45 fseek($fileHandle, -7, SEEK_END); 46 echo "2. SEEK_END (末尾から-7バイト目) 後:\n"; 47 echo " 現在のポインタ位置: " . ftell($fileHandle) . "バイト目\n"; 48 // 現在のポインタ位置から7バイト読み取ります。 49 echo " 読み取った内容: '" . fread($fileHandle, 7) . "'\n\n"; // "example" が読み取られます 50 51 // ---------------------------------------------------- 52 // SEEK_CUR の使用例: 現在のポインタ位置からオフセットを指定 53 // ---------------------------------------------------- 54 // 再度、ファイルポインタをファイルの先頭に戻します。 55 fseek($fileHandle, 0, SEEK_SET); 56 echo "3. SEEK_CUR (現在位置からの移動) の準備:\n"; 57 echo " ポインタを先頭に戻した後、現在のポインタ位置: " . ftell($fileHandle) . "バイト目\n"; 58 // 最初の5バイトを読み取ります。"Hello" 59 echo " 最初の5バイトを読み取る: '" . fread($fileHandle, 5) . "'\n"; 60 echo " 読み取り後のポインタ位置: " . ftell($fileHandle) . "バイト目\n"; // ポインタは5バイト目にある 61 62 // 現在のポインタ位置(5バイト目)から3バイト進めます。 63 // "Hello" の 'o' の次から3バイト進むと、"World" の 'W' の直前になります。 64 fseek($fileHandle, 3, SEEK_CUR); 65 echo " SEEK_CUR (現在位置から3バイト進める) 後:\n"; 66 echo " 現在のポインタ位置: " . ftell($fileHandle) . "バイト目\n"; 67 // 現在のポインタ位置から5バイト読み取ります。 68 echo " 読み取った内容: '" . fread($fileHandle, 5) . "'\n\n"; // "World" が読み取られます 69 70 // 3. ファイルハンドルを閉じます。 71 // ファイルを閉じることは、リソースの解放とデータの保存のために重要です。 72 fclose($fileHandle); 73 echo "ファイルハンドルを閉じました。\n"; 74 75 // 4. 作成した一時ファイルを削除します。 76 // クリーンアップとして、テストで作成したファイルを削除します。 77 unlink($fileName); 78 echo "一時ファイル '{$fileName}' を削除しました。\n"; 79 echo "--- デモンストレーション終了 ---\n"; 80} 81 82// demonstrateFseek関数を実行します。 83demonstrateFseek();
PHPのfseek関数は、開いているファイル内の読み書き位置を示す「ファイルポインタ」を移動させるための重要な機能です。この関数を利用することで、ファイルの任意の場所へ効率的にアクセスできます。第一引数$streamにはfopenで開いたファイルハンドルを、第二引数$offsetには移動させたいバイト数を整数で指定します。第三引数$whenceは、移動の基準点を指定する定数で、SEEK_SET(ファイルの先頭)、SEEK_END(ファイルの末尾)、SEEK_CUR(現在のポインタ位置)のいずれかを使用します。この関数は、ポインタの移動に成功すると0を、失敗すると-1を返します。
サンプルコードでは、まずテストファイルを作成し、fopenで読み書き可能な状態で開いています。SEEK_SETの例では、ファイルの「先頭」から指定バイト数進めた位置にポインタを移動させ、その後の内容を読み込んでいます。SEEK_ENDの例では、ファイルの「末尾」から負のオフセット(例: -7は末尾から7バイト手前)を指定してポインタを移動させ、末尾付近のデータを読み取っています。SEEK_CURの例では、一度ポインタを先頭に戻し、一部を読み取ってポインタが移動した「現在の位置」から、さらに指定バイト数だけポインタを進めています。これにより、ファイル内の特定の位置に効率的にアクセスし、必要な部分だけを読み書きする方法を実演しています。最後に、開いたファイルハンドルを閉じ、テストに使用したファイルを削除してクリーンアップを行っています。
PHPのfseek関数は、fopenで開いたファイルリソースのポインタ位置を移動させる際に使用します。ファイルを開く際のモード(例:読み書き可能なr+など)が、その後のファイル操作に影響するため、用途に応じた選択が重要です。ポインタ移動の基準点として、ファイルの先頭から(SEEK_SET)、現在の位置から(SEEK_CUR)、ファイルの末尾から(SEEK_END)のいずれかを指定します。特にSEEK_ENDで末尾からファイル内を巻き戻す場合は、オフセットに負の値を指定してください。日本語などのマルチバイト文字を扱う際、1文字が1バイトとは限らないため、バイト単位のオフセット指定には注意が必要です。関数が失敗した場合は-1を返しますので、エラーハンドリングとして戻り値を確認すると、より堅牢なコードになります。ファイル操作完了後は、必ずfcloseでリソースを閉じ、適切に解放しましょう。
PHP fseekによるファイルポインタ操作
1<?php 2 3/** 4 * fseek関数の基本的な使い方を示すサンプルコード。 5 * ファイルポインタを移動させ、特定の位置からデータを読み込む方法を説明します。 6 * 7 * @return void 8 */ 9function demonstrateFseekUsage(): void 10{ 11 // 一時ファイルを作成し、ファイルリソースを取得します。 12 // tmpfile() は、自動的にファイルを生成し、ファイルポインタ(リソース)を返します。 13 // このファイルは、fclose() が呼び出されるかスクリプトが終了すると自動的に削除されます。 14 $stream = tmpfile(); 15 16 if ($stream === false) { 17 echo "エラー: 一時ファイルの作成に失敗しました。\n"; 18 return; 19 } 20 21 // ファイルに内容を書き込みます。 22 $dataToWrite = "Hello, PHP fseek example!\nThis is a test line for fseek.\n"; 23 // fwriteは書き込んだバイト数を返しますが、ここではその結果のチェックは省略します。 24 fwrite($stream, $dataToWrite); 25 echo "--- ファイルに書き込んだ内容 ---\n" . $dataToWrite . "\n"; 26 27 // fseek() でファイルポインタを移動させます。 28 // fseek(resource $stream, int $offset, int $whence = SEEK_SET) 29 // $whence に SEEK_SET を指定すると、ファイルの先頭から $offset バイト移動します。 30 // 成功すると 0 を返し、失敗すると -1 を返します。 31 $seekResultSet = fseek($stream, 0, SEEK_SET); 32 33 if ($seekResultSet === 0) { 34 echo "--- fseekでファイルポインタを先頭 (オフセット0) に移動しました。 ---\n"; 35 36 // ファイルの先頭から5バイト目までを読み込みます。 37 // fread(resource $stream, int $length) は、指定された長さのデータを読み込みます。 38 $readDataFirstPart = fread($stream, 5); // "Hello" を読み込む 39 echo "先頭から5バイト読み込みました: \"" . $readDataFirstPart . "\"\n"; 40 41 // 現在のファイルポインタの位置からさらに7バイト先に移動します。 42 // SEEK_CUR を指定すると、現在のファイルポインタの位置から $offset バイト移動します。 43 // $offset は正の値で前へ、負の値で後ろへ移動します。 44 $seekResultCur = fseek($stream, 7, SEEK_CUR); // "Hello, " の後に7バイト移動 45 46 if ($seekResultCur === 0) { 47 echo "--- fseekでファイルポインタを現在の位置から7バイト先に移動しました。 ---\n"; 48 49 // 移動した位置から残りのデータを読み込みます。 50 // freadに大きな値を指定することで、実質的に残り全てを読み込むことができます。 51 $readDataRemaining = fread($stream, 8192); // 残りのデータを読み込む 52 echo "現在の位置から残りのデータを読み込みました: \"" . $readDataRemaining . "\"\n"; 53 } else { 54 echo "エラー: SEEK_CURでのfseek実行に失敗しました。戻り値: " . $seekResultCur . "\n"; 55 } 56 57 } else { 58 echo "エラー: SEEK_SETでのfseek実行に失敗しました。戻り値: " . $seekResultSet . "\n"; 59 } 60 61 // ファイルを閉じます。tmpfile() で作成されたファイルは自動的に削除されます。 62 fclose($stream); 63 echo "--- ファイルを閉じました。 ---\n"; 64} 65 66// fseek関数の使い方を示す関数を実行します。 67demonstrateFseekUsage(); 68
PHPのfseek関数は、開いているファイルのリソースに対して、データの読み書きを行う位置(ファイルポインタ)を移動させるために使用されます。これは、ファイル内の特定の位置から情報を読み込んだり、書き込んだりする際に非常に役立つ機能です。
引数$streamには、fopen関数やtmpfile関数などで取得したファイルのリソースを指定します。$offsetは移動させるバイト数を整数で指定し、$whenceは移動の基準点を指定します。$whenceには、ファイルの先頭を基準とするSEEK_SETや、現在のファイルポインタの位置を基準とするSEEK_CUR、ファイルの末尾を基準とするSEEK_ENDなどが利用でき、デフォルトはSEEK_SETです。
fseek関数は、ファイルポインタの移動に成功すると0を、失敗した場合には-1を返します。
このサンプルコードでは、まず一時ファイルを作成し、そこに文字列を書き込んでいます。その後、fseek($stream, 0, SEEK_SET)を使ってファイルポインタをファイルの先頭(0バイト目)に移動させ、そこから一部のデータを読み込みます。さらに、fseek($stream, 7, SEEK_CUR)とすることで、現在のポインタ位置から7バイト先に移動し、その後のデータを読み込んでいます。このようにfseekは、ファイル内の特定の位置へアクセスする柔軟なファイル操作を実現します。
fseek関数はファイルポインタを移動させますが、まず第一に、tmpfileやfopenで取得したファイルリソースが有効か常に確認してください。fseekが成功した場合は戻り値が0、失敗した場合は-1となりますので、必ずその戻り値をチェックし、エラー処理を適切に行うことが重要です。引数$whenceには、ファイルの先頭からのSEEK_SET、現在の位置からのSEEK_CUR、ファイルの末尾からのSEEK_ENDがあり、これらを使い分けて目的の場所へポインタを移動させます。特にSEEK_CURやSEEK_ENDで負のオフセットを指定する場合は、ポインタがファイルの範囲内に収まるか注意が必要です。ファイル操作完了後は、fcloseでリソースを必ず閉じてください。この関数はバイト単位でポインタを移動するため、日本語などのマルチバイト文字を含むテキストファイルを扱う場合は、意図しない位置で途切れる可能性がある点にもご留意ください。
PHP fseekでファイル終端へ移動
1<?php 2 3/** 4 * PHPのfseek()関数を使い、ファイルポインタをファイルの終端に移動させる例。 5 * SEEK_END定数を使用し、ファイルサイズを取得する一般的なシナリオを示します。 6 * システムエンジニアを目指す初心者がファイル操作の基本を理解するのに役立ちます。 7 */ 8function demonstrateFseekToEndOfFile(): void 9{ 10 $filename = 'fseek_example.txt'; 11 $content = "Hello, PHP!\nThis is a test file for fseek with SEEK_END.\n"; 12 13 // 1. テストファイルを作成し、内容を書き込む 14 // file_put_contents() は、指定したファイルにデータを書き込みます。 15 file_put_contents($filename, $content); 16 echo "ファイル '{$filename}' を作成しました。内容: " . mb_strlen($content, '8bit') . "バイト\n"; 17 18 // 2. ファイルを読み書きモードで開く 19 // 'r+' モードは、既存ファイルを読み書きモードで開きます。ファイルポインタはファイルの先頭に位置します。 20 $fileHandle = fopen($filename, 'r+'); 21 22 if ($fileHandle === false) { 23 echo "エラー: ファイル '{$filename}' のオープンに失敗しました。\n"; 24 return; 25 } 26 27 echo "ファイルを開きました。\n"; 28 29 // 3. fseek() を使ってファイルポインタをファイルの終端に移動 30 // 第1引数: 操作するファイルリソース 31 // 第2引数: オフセット (基準点から0バイトの位置) 32 // 第3引数: 基準点 (SEEK_END: ファイルの終端を基準とする) 33 $seekResult = fseek($fileHandle, 0, SEEK_END); 34 35 if ($seekResult === 0) { // fseek() は成功すると0を返します 36 echo "ファイルポインタを終端に移動しました。\n"; 37 38 // 4. ftell() で現在のファイルポインタの位置を取得 39 // ファイルの終端にいる場合、この値はファイルのバイトサイズと等しくなります。 40 $fileSize = ftell($fileHandle); 41 echo "現在のファイルポインタの位置 (ファイルサイズ): {$fileSize}バイト\n"; 42 43 } else { 44 echo "エラー: ファイルポインタの移動に失敗しました。\n"; 45 } 46 47 // 5. ファイルリソースを閉じる 48 // ファイル操作の終了時には必ずファイルを閉じることが重要です。 49 fclose($fileHandle); 50 echo "ファイルを閉じました。\n"; 51 52 // 6. テストファイルを削除してクリーンアップ 53 unlink($filename); 54 echo "ファイル '{$filename}' を削除しました。\n"; 55} 56 57// 関数を実行 58demonstrateFseekToEndOfFile();
PHPのfseek関数は、ファイルを開いた際にデータへアクセスするための「ファイルポインタ」の位置を移動させるために使用します。このサンプルコードは、まずテキストファイルを作成し、それを読み書きモードで開いた後、fseek関数を使ってファイルポインタをファイルの終端へ移動させ、ファイルのサイズを取得する一般的な手順を示しています。
fseek関数は、第一引数に操作するファイルリソース(fopenで開いたファイルの識別子)、第二引数に基準点からのオフセット(移動するバイト数)、第三引数に基準点(SEK_SETでファイルの先頭、SEEK_CURで現在位置、SEEK_ENDでファイルの終端)を指定します。この例では、SEEK_ENDを基準にオフセット0を指定することで、ファイルポインタがファイルのまさに終端に移動します。
関数の戻り値は整数で、成功した場合は0を、失敗した場合は-1を返します。ファイルポインタを終端に移動させた後、ftell関数を使用すると、現在のファイルポインタの位置、すなわちファイルのバイトサイズを取得できます。ファイル操作の完了時には、fcloseでファイルリソースを閉じることを忘れないようにしましょう。
PHPのfseek関数でファイルポインタを移動させる際は、戻り値が0であれば成功、-1であれば失敗を示すため、必ず確認してエラー処理を組み込みましょう。SEEK_ENDを使用しファイル終端へ移動する場合は、オフセットを0とします。終端に移動後、ftell関数を使えばファイルのバイトサイズを取得でき、これはファイルサイズ取得の一般的な方法の一つです。fopenで開いたファイルリソースは、処理終了後にfcloseで必ず閉じることが重要です。閉じ忘れるとリソースリークの原因となりますので注意してください。
PHP fseekでファイルポインタを操作する
1<?php 2 3/** 4 * Demonstrates the use of fseek() to manipulate the file pointer's position. 5 * This example focuses on how fseek() can be used in scenarios involving 6 * reading file content line by line, including resetting the read position 7 * and attempting to jump to specific byte offsets that might correspond to lines. 8 * 9 * While fseek() operates on byte offsets, it is fundamental for controlling 10 * where in a file subsequent read operations (like fgets() for lines) will start. 11 * To directly jump to a specific line number, one would typically need to 12 * pre-calculate the byte offset of that line. 13 */ 14function demonstrateFseekForLines(): void 15{ 16 $filename = 'sample_lines.txt'; 17 $fileContent = "Line 1: Hello PHP!\nLine 2: This is a sample file.\nLine 3: We are demonstrating fseek.\nLine 4: End of file."; 18 19 // 1. Create a dummy file for demonstration purposes. 20 file_put_contents($filename, $fileContent); 21 echo "Created file: '$filename'\n\n"; 22 23 // 2. Open the file for reading. 24 $filePointer = fopen($filename, 'r'); 25 26 if (!$filePointer) { 27 echo "Error: Could not open file '$filename'.\n"; 28 return; 29 } 30 31 echo "--- Initial Reading ---\n"; 32 // Read the first two lines. The file pointer moves forward with each read. 33 echo " " . fgets($filePointer); // Reads "Line 1: Hello PHP!\n" 34 echo " " . fgets($filePointer); // Reads "Line 2: This is a sample file.\n" 35 36 // Get and display the current position of the file pointer. 37 $currentPosition = ftell($filePointer); 38 echo " Current file pointer position after reading 2 lines: " . $currentPosition . " bytes.\n\n"; 39 40 // 3. Use fseek() to move the pointer back to the very beginning of the file (offset 0). 41 // SEEK_SET means the offset is relative to the beginning of the file. 42 echo "--- Seeking Back to Beginning ---\n"; 43 echo "Seeking back to the beginning of the file (offset 0)...\n"; 44 $seekResult = fseek($filePointer, 0, SEEK_SET); 45 46 if ($seekResult === 0) { // fseek() returns 0 on success, -1 on failure. 47 echo " Successfully moved pointer to offset 0.\n\n"; 48 49 echo "--- Re-reading from the Beginning ---\n"; 50 // Now, we can read the lines again from the start. 51 echo " " . fgets($filePointer); // Reads "Line 1: Hello PHP!\n" again 52 echo " " . fgets($filePointer); // Reads "Line 2: This is a sample file.\n" again 53 echo " " . fgets($filePointer); // Reads "Line 3: We are demonstrating fseek.\n" 54 55 $currentPosition = ftell($filePointer); 56 echo " Current file pointer position after re-reading 3 lines: " . $currentPosition . " bytes.\n\n"; 57 58 // 4. Demonstrate seeking to a specific byte offset. 59 // To jump to a specific "line number" directly with fseek(), you first need 60 // to know its exact byte offset. This usually involves parsing the file 61 // once to build an index of line start offsets. 62 // For demonstration, let's manually calculate an approximate offset for Line 3. 63 // "Line 1: Hello PHP!\n" is 19 bytes. 64 // "Line 2: This is a sample file.\n" is 30 bytes. 65 // So, Line 3 starts after 19 + 30 = 49 bytes. 66 $approxOffsetForLine3Start = 19 + 30; 67 68 echo "--- Seeking to a Specific Byte Offset (Approx. Line 3) ---\n"; 69 echo "Attempting to seek to an approximate start of Line 3 (offset $approxOffsetForLine3Start bytes)...\n"; 70 fseek($filePointer, $approxOffsetForLine3Start, SEEK_SET); 71 // After seeking, the next read operation will start from this byte offset. 72 echo " " . fgets($filePointer); // This should read "Line 3: We are demonstrating fseek.\n" again. 73 74 $currentPosition = ftell($filePointer); 75 echo " Current file pointer position after seeking to approx. Line 3 and reading: " . $currentPosition . " bytes.\n\n"; 76 77 } else { 78 echo "Error: Could not seek to beginning of file.\n"; 79 } 80 81 // 5. Close the file resource. 82 fclose($filePointer); 83 echo "Closed file: '$filename'\n"; 84 85 // 6. Clean up the dummy file created for the example. 86 unlink($filename); 87 echo "Deleted file: '$filename'\n"; 88} 89 90// Execute the demonstration function. 91demonstrateFseekForLines();
PHP 8のfseek関数は、ファイル内の読み書き位置を示す「ファイルポインタ」を操作します。引数には、fopenなどで開いたファイルリソース($stream)、移動するバイト数($offset)、移動の基準点($whence)を指定します。$whenceのデフォルトはSEEK_SETでファイルの先頭からの絶対位置を指定し、SEEK_CURは現在位置から、SEEK_ENDは末尾からの相対位置です。関数は、ファイルポインタの移動が成功時に整数0を、失敗時に整数-1を返します。
サンプルコードでは、一時ファイル作成後、fgetsで読み進めたポインタをfseek($filePointer, 0, SEEK_SET)でファイルの先頭に戻し、先頭からの再読み込みを実演します。また、特定のバイトオフセットへ移動し、そこから読み込みを再開する例も紹介しています。fseekはバイト単位で動作するため、特定の行番号へ直接移動するには、その行の正確な開始バイトオフセットを事前に計算する必要があります。この機能は、ファイル中の任意の位置からデータを効率的に読み込む際に役立ちます。
fseek関数は、ファイルポインタをバイト単位で移動させるために使用します。特定の行番号へ直接移動する機能はなく、目的の行の開始バイトオフセットを事前に計算するか、ファイルの内容を解析して把握する必要があります。オフセットの基準点として、ファイルの先頭からの相対位置(SEEK_SET)、現在位置からの相対位置(SEEK_CUR)、ファイルの末尾からの相対位置(SEEK_END)を指定できますので、状況に応じて適切に選択してください。関数が成功した場合は0、失敗した場合は-1が返されるため、必ず戻り値を確認し、エラー処理を実装することが重要です。また、fopenで開いたファイルリソースは、処理が完了したら必ずfcloseで閉じるようにしてください。各行のバイト数には改行コードも含まれる点にもご注意ください。