C Program - How to validate a specific string in a file -
please bear me i'm still new c programming, goal serial number saved in file called mtd0 , validate serial number. in bash, command is:
dd if=/dev/mtd0 bs=1 skip=$((0x1fc30)) count=16 2>/dev/null and output should be:
1866203214226041 but want in pure c language, have tried far this:
#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 correct!\n"); } else { printf("serial number not correct\n"); } return(0); } but when execute that, doesn't print anything. mtd0 not ordinary text file, don't know it's called file looks this please download file if need more info. how can fix code above ?
there few things wrong you're doing.
fseekadjusts file pointer next read or write file; doesn't retrieve file you. furthermore, valid values third argumentfseekare:seek_set- set position of file pointer beginning of file plus value in second argumentseek_cur- set position of file pointer current position of file pointer, plus value in second argumentseek_end- set position of file pointer end of file.
assuming meant "read 16 bytes file @ position 0x1fc30", want save data byte array, not string:
typedef unsigned char byte; byte s_no[16]; fseek(fp, 0x1fc30, seek_set); fread(s_no, 1, 16, fp);while
strcmpcorrect way compare strings in c, if serial number stored bytes, i'm assuming is, because/dev/mtd0looks binary file, have compare memory usingmemcmpbyte array set valid value serial.
Comments
Post a Comment