#include #include #include int main(int argc, char *argv[]) { //check command line arguments and make sure they are more than one if (argc != 2) { printf("Usage: ./recover image\n"); return 1; } FILE *inptr = fopen (argv[1], "r"); //if file does not exist return an error if (inptr == NULL) { printf("Error! Could not recover\n"); return 2; } //create filename and buffer arrays unsigned char buffer[512]; char filename[8]; //set file count to 0 int jpeg_count = 0; int picture = 0; int found_jpeg = 0; //new file I'll be writing to FILE* outptr = NULL; while (fread (buffer, sizeof(buffer), 1, inptr) == 1) { //find the beginning of jpg signature if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] & 0xf0) == 0xe0) { //for first jpeg found if (jpeg_count == 0) { sprintf (filename, "%03i.jpg", jpeg_count); jpeg_count++; //open first file i.e. 000.jpg outptr = fopen (filename, "w"); } //if jpeg already found else { //close current file that was being written to fclose(outptr); jpeg_count++; sprintf (filename, "%03i.jpg", jpeg_count); //open new file just created to start writing data into it outptr = fopen (filename, "w"); fwrite (buffer, sizeof(buffer), 1, outptr); } } if (outptr != NULL) { //keep writing to current file if already in open jpeg fwrite (&buffer, sizeof(buffer), 1, outptr); } } //close input file fclose(inptr); //close output file fclose(outptr); return 0; }