
答え1
seek(0, 0, 2)
ファイル記述子0によってバッファリングされたすべてのデータはスキップされます。したがって、このコマンドの後にこのファイル記述子から次回を読むいいえバッファリングされた内容を読みます。
コードを調べて実際の目的が何であるかを見ると、ファイル記述子0が通常標準入力であるにもかかわらず、プログラムがそのファイル記述子を介して読み取るスクリプトの一部である場合にのみ実際に動作することがわかります。
たとえば、次のスクリプトを見てください。
goto
echo "hello"
パラメータがないとgoto
検索が開始されます。
seek(0, 0, 2)
コマンドなしで終了すると、コマンド呼び出し側はスクリプトから次のコマンドを読み取るため、スクリプトgoto
はまだコマンドを実行します。echo "hello"
goto
答え2
エラー状態のため、返す前に標準入力を巻き戻したい場合があります。
if (argc<2 || ttyn(0)!='x') {
write(1, "goto error\n", 11);
seek(0, 0, 2);
return;
}
答え3
seek
fseek
ファイル(ファイル記述子(seek)またはファイルポインタ(fseek))の現在の場所を変更します。 Cでは主にfseekを使用します。ファイルの終わりから始まる/ fseek(SEEK_END)の一般的な用途は次のとおりです。
ファイルの終わりの場所 =seek(f,0,2) or fseek(f,0,2)
ファイルサイズの計算 = fseek(f,0,2); size=ftell(f
)
ファイルの終了位置から20を引いた値=fseek(f,-20,2)
一部の「ファイル」は元に戻せません
答え4
オフセットがゼロなのでファイルの後ろではないため、ファイルの終わりを指し、通常はファイルにデータを追加するために使用されます。
これは、書き込まれたが読み取られていない入力をオーバーライドするためにstdinを介して行われます。バッファと呼ばれるのは、stdinがパイプの場合、これ以上読み取れなくなるまで読み込まれるため、不正確です。
passwdコマンドは、パスワード自体の一部ではない入力(Enterキーを繰り返し押すなど)を防ぎ、パスワードと対話するデフォルトのスクリプトを防ぐためにこれを行います。