[解決済み] off_t型の完全な定義はどこにあるのですか?
質問
TCPを使ってクライアントからサーバーにファイルを送信しています。ファイルの終わりを示すために、実際のデータの前にファイルサイズを送信したいと思います。そこで、私は
stat
システムコールを使って、ファイルの大きさを調べます。これは
off_t
. サーバー側で適切に読み取るために、何バイトを占めているのか知りたいのです。これは
<sys/types.h>
. しかし、私はその定義を理解していません。ただ、定義されているのは
__off_t or _off64_t
になります。
off_t
. どこを探せばいいのか
__off_t
? また
__
は、ヘッダーファイルのほとんどのものに対してプレフィックスを付けているので、ヘッダーファイルを読むときに、よりよく理解するのが怖いです。ヘッダーファイルの上手な読み方を教えてください。
#ifndef __off_t_defined
# ifndef __USE_FILE_OFFSET64
typedef __off_t off_t;
# else
typedef __off64_t off_t;
# endif
# define __off_t_defined
#endif
解決方法は?
この回答はまだ投票されているので、私は、ヘッダーファイルを見る必要はほとんどないと指摘したいです。もし信頼できるコードを書きたいのなら、標準のものを見たほうがずっといいのです。ですから、"の完全な定義はどこにあるのでしょうか?
off_t
ヘッダーファイルではなく、標準の中にあるのです。標準に従うということは、あなたのコードが今日も明日も、どんなマシンでも動くということです。
この場合
off_t
はC言語規格で定義されているわけではありません。これはPOSIX標準の一部であり、POSIX標準は
こちらからご覧いただけます。
.
残念ながら
off_t
はあまり厳密には定義されていません。私が見つけた定義は、以下のページだけです。
sys/types.h
:
blkcnt_t
とoff_t
は符号付き整数型でなければならない。
つまり、大きさを確かめることができないのです。GNU Cを使用している場合は、以下の命令を使用することができます。 以下の回答 で、64ビットであることを確認します。もっといいのは、配線する前に標準的なサイズに変換しておくことです。このようにして、Googleのようなプロジェクトは プロトコルバッファ が動作します(ただし、これはC++のプロジェクトです)。
どのヘッダーファイルで定義されているか?
off_t
?quot;。
私のマシンでは (そして glibc を使っているほとんどのマシンでも)、この定義は
bits/types.h
(上部にコメントがあるように、決してこのファイルを直接インクルードしないでください) しかし、それはたくさんのマクロの中で少し不明瞭になっています。それを解きほぐすために、プリプロセッサの出力を見るという方法もあります。
#include <stdio.h>
#include <sys/types.h>
int main(void) {
off_t blah;
return 0;
}
そして
$ gcc -E sizes.c | grep __off_t
typedef long int __off_t;
....
しかし、何かの大きさを知りたい場合は、常に
sizeof()
演算子を使用します。
編集:ご質問の中の
__
.
この回答には、良い議論があります。
. で始まる名前が重要なポイントになります。
__
は実装のために予約されています (ですから、独自の定義の先頭に
__
).
関連
-
[解決済み】エラー:cの入力の最後に期待される宣言またはステートメント
-
[解決済み】Cコンパイルエラーです。Idは1終了ステータスを返した
-
[解決済み】 `S_ISREG()` とは何ですか、そして何をするのですか?
-
[解決済み】EAGAINとはどういう意味ですか?
-
[解決済み] C#でお金に使うデータ型は何が良いのか?
-
[解決済み] オブジェクトの種類を決定しますか?
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み] 現在のCまたはC++の標準文書はどこにありますか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み】定義と宣言の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー:cの入力の最後に期待される宣言またはステートメント
-
[解決済み】Valgrind が "Invalid write of size 8" で文句を言う。
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み】 switch case: error: case label does not reduce to an integer constant
-
[解決済み] エラー:整数が期待されるところで集約値が使用された
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み】Makefile:1: ***セパレータがありません。停止します。
-
[解決済み】警告:式の結果が未使用の場合
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC
-
[解決済み] nginx client_max_body_size のデフォルト値です。