C言語のmagic関数とは何ですか

C言語のmagic関数は、与えられたファイルの内容からファイルの種類を判別できる特殊な関数です。ファイルの先頭部分のバイトを読み込むことで、ファイルがテキストファイル、画像ファイル、オーディオファイルなどであるかどうかを識別します。

「magic」関数は通常「libmagic」ライブラリを使用して実装されており、「magic」関数と呼ばれる関数があり、ファイルタイプの識別を実行します。その関数のプロトタイプは次のとおりです。

const char *magic(magic_t magic_cookie, const void *buf, size_t len);

パラメータの説明:

  1. magic_cookie:magicファイルに対するハンドルを表し、magic_open() 関数によって返されます。magic 関数を使用する前に、magic_open() 関数を呼び出して magic ファイルを開き、ハンドルを取得する必要があります。
  2. buf: 識別対象となるファイルの、バッファへのポインタ
  3. len:認識するファイルバッファの長さを示す。

ファイルの形式についての情報を文字列で返す。具体的には、ファイルのMIMEタイプやファイルの説明など。

magic 関数の使用手順は次のとおりです。

  1. magic_open()
  2. magic_load()
  3. natively(magic_compile())
  4. 魔法()
  5. 返り値の型情報に従って処理する。

libmagic ライブラリをインストールし、ファイルタイプを認識するためのルールを含む magic ファイル (例: magic、magic.mgc) を用意する必要があります。

以下は、magic 関数を使用してファイルの種類を判別する方法を示す簡単なサンプルコードです。

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

int main() {
    magic_t magic_cookie;
    const char *magic_result;

    // 打开magic文件并获得magic句柄
    magic_cookie = magic_open(MAGIC_MIME_TYPE);
    if (magic_cookie == NULL) {
        printf("Unable to initialize magic library\n");
        return 1;
    }

    // 加载magic文件到句柄中
    if (magic_load(magic_cookie, NULL) != 0) {
        printf("Cannot load magic database - %s\n", magic_error(magic_cookie));
        magic_close(magic_cookie);
        return 1;
    }

    // 识别文件类型
    magic_result = magic(magic_cookie, "path/to/file", 0);
    if (magic_result == NULL) {
        printf("Cannot determine file type\n");
        magic_close(magic_cookie);
        return 1;
    }

    // 打印文件类型信息
    printf("File type: %s\n", magic_result);

    // 关闭magic句柄
    magic_close(magic_cookie);

    return 0;
}

上記のコードでは、magic_open() 関数によって Magic ファイルが開かれ、Magic ハンドルを取得します。 次に、magic_load() 関数を使用して、Magic ファイルをハンドルにロードします。 最後に、magic() 関数を呼び出してファイルの種類を識別し、ファイルの種類に関する情報をプリントします。 最終的に、magic_close() 関数を使用して、Magic ハンドルを閉じます。

「パス/ファイル」の例のコードを、識別したいファイルのパスに置き換えてください。

bannerAds