1

それで、私は基本的にライブラリ関数とは対照的にシステムコールの速度を比較する練習である割り当てを持っています。stdinを介してファイルから取得した文字列を並べ替えています。ファイルが通常のファイルであるか、fstatを使用していないかを判断することになっています。マニュアルページを読みましたが、それが何をするのかはわかっていますが、使い方がわかりません。

stat構造体が返されることはわかっているので、文字通り変数を作成してそのように格納できますか?元:

int n;
struct stat *val;
n = fstat(0, val);

それはあなたが構造体を取得する方法ですか?それはどこかに返されますか?off_t st_size変数にアクセスする必要があるので、ファイルのバイト数がわかります。そして、それをintにキャストできますか?

また、どうやらst_modeフィールドを使用して、ファイルが通常であるかどうかを確認できます(マクロS_ISREGを使用)が...どうすればよいですか?それはfalseか何かのtrueを返しますか?フィールドが何であるかを教えてくれるこれらのドキュメントをすべて見つけることができるので、それは迷惑ですが、それらの使用方法はわかりません。

通常のファイルがある場合は、関数を呼び出す前にそれを保存するのに十分なメモリを割り当てることになっています。そうでない場合は、読み取り時にメモリを再割り当てします。2番目の部分は完了しましたが、fstatを正しく使用する方法がわかりません。

4

1 に答える 1

2

fstatはメモリを割り当てません。事前に割り当てられたスペースのアドレスを指定する必要があります。例えば:

int n;
struct stat myStat;
n = fstat(0, &myStat);

ポインタがないことに注意してください。

于 2012-05-12T04:46:29.903 に答える