私はまだCプログラミングの新人です。私の目標はmtd0
という名前のファイルに保存されたシリアル番号を取得し、そのシリアル番号を検証することです。Cプログラム - ファイル内の特定の文字列を検証する方法
dd if=/dev/mtd0 bs=1 skip=$((0x1fc30)) count=16 2>/dev/null
、出力は次のようになります:bashで、コマンドがある
1866203214226041
しかし、私は純粋なC言語でそれをやってみたい、私がこれまで試してみました何、このようなものです:
#include <stdio.h>
#include <string.h>
int main()
{
FILE *fp;
FILE *s;
fp = fopen("/tmp/mtd0","rb");
if(NULL == fp) {
printf("\n Cannot open file!!!\n");
return 1;
}
typedef unsigned char byte;
byte s_no[16];
fseek(fp, 0x1fc30, SEEK_SET);
fread(s_no, 1, 16, fp);
printf ("Serial number: %s\n", s_no);
fclose(fp);
char mtd0[16];
char defser[16];
int ret;
memcpy(mtd0, s_no, 16);
memcpy(defser, "1866203214226041", 16);
ret = memcmp(mtd0, defser, 16);
if(ret == 0)
{
printf("Serial number is correct!\n");
}
else
{
printf("Serial number is not correct\n");
}
return(0);
}
しかし、私が実行すると、何も印刷されません。 mtd0
は普通のテキストファイルではありませんが、何が呼び出されたのか分かりませんが、ファイルはthisのように見えます。だから私はどのように上記のコードを修正することができますか?
これは*バイナリファイル*と呼ばれます。 –
ああ、ありがとうございます。しかし、上記のコードを修正する方法を知っていますか? – hillz
Cでは、文字列を比較するために 'strcmp'を使用する必要があります。文字列を比較するには' == 'ではなく、ファイルからデータを読み込むには' fread'を使用する必要があります。 – Alden