C でファイル名から MIME タイプを取得する

私が取り組んでいるプロジェクトにこれを実装しました。 libmagic はあなたが探しているものです。 RHEL/CentOS では、file-libs および file-devel によって提供されます。 Debian/Ubuntu は libmagic-dev のようです。

http://darwinsys.com/file/

コード例を次に示します:

#include <stdio.h>
#include <magic.h>

int main(int argc, char **argv){
  const char *mime;
  magic_t magic;

  printf("Getting magic from %s\n", argv[1]);

  magic = magic_open(MAGIC_MIME_TYPE); 
  magic_load(magic, NULL);
  magic_compile(magic, NULL);
  mime = magic_file(magic, argv[1]);

  printf("%s\n", mime);
  magic_close(magic);

  return 0;
}

以下のコードは、デフォルトのマジック データベース /usr/share/misc/magic を使用します。開発パッケージをインストールしたら、libmagic の man ページが非常に役に立ちます。これは古い質問であることは知っていますが、同じ答えを探しているときに見つけました。これが私の好みの解決策でした。


それを行う方法があれば、Apache はその mime.types を必要としません。 ファイル!

テーブルはどこかになければなりません。コードによって解析される別のファイルにあるか、ソフトウェアにハードコードされています。前者は、より良い解決策であるほど明確です...

ファイルのコンテンツ、つまりヘッダー フィールド、データ構造などを調べることで、ファイルの MIME タイプを推測することもできます。これは file(1) で使用されるアプローチです。 プログラムと Apache の mod_mime_magic による .どちらの場合も、プログラム自体に詳細をハードコーディングするのではなく、別のテキスト ファイルを使用してルックアップ ルールを保存しています。


私の知る限り、UNIX コマンド file オプション -i で MIME 文字列を出力します :

> file -i main.c
main.c: text/x-c charset=us-ascii