2012-05-12 18 views
1

私は、基本的にはライブラリ関数に反してシステムコールの速度を比較するという課題を持っています。ファイルからstdinを取得する文字列をソートしています。ファイルが通常のファイルであるか、fstatを使用していないかを判断する必要があります。マニュアルページを読んだことがありますが、それが何であるか分かっているうちに、どのように使用するのかがわかりません。fstatを使ってファイルの種類を調べる

私はそれがstat構造体を返すことを知っているので、文字通り変数を作成してそのように保存できますか?例:

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

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

また、st_modeフィールドを使用して、ファイルが正規(S_ISREGマクロを使用)であるかどうかを確認できます。それは偽のものか何かの真実を返しますか?フィールドが何であるかを私に教えてくれるすべてのドキュメントを見つけることができますが、それらのドキュメントを使用する方法はわかりません。

通常のファイルがある場合は、関数呼び出しの前にそれを格納するのに十分なメモリを割り当てています。もしそうでなければ、私は読んだままでメモリを再割り当てします。私は2番目の部分を完了しました、私はちょうどfstatを正しく使う方法を知らない。

+0

本当に*本当に*あなたが答えを得たい場合は、言語で質問にタグを付ける必要があります。 –

答えて

2

fstatメモリが割り当てられていないため、事前に割り当てられた領域のアドレスを与える必要があります。例:

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

ポインタの欠如に注意してください。

+0

http://www.go4expert.com/articles/understanding-linux-fstat-example-t27449/ – MrPickles7

関連する問題