文档章节

A simple file type detector

Corot_Wang
 Corot_Wang
发布于 2014/05/23 21:50
字数 295
阅读 189
收藏 1

行业解决方案、产品招募中!想赚钱就来传!>>>

/*
 * ftype_detector.c
 *
 *  Created on: 23 May, 2014
 *      Author: user
 */


#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>         // import bool type

bool ftype_matched(FILE* fp, unsigned char magic_num[], int magic_size) {
    int i = 0;
                                       
    fseek(fp, 0, SEEK_SET);// THIS RESETS THE FILE POINTER TO 0; man fseek FOR DETAILS
    
    for(i=0;i<magic_size;i++){
    if(magic_num[i]!=EOF){
    if(fgetc(fp)==magic_num[i]){
    continue;
            }
    else
    return false;    
        }
    }
    return true;
}

int main(int argc, char* argv[]) {
    if (argc != 2) {//arg count!=2 imply that input is not null
        fprintf(stderr,"Please specify the filename!\n");
        fprintf(stderr,"Usage: %s filename\n", argv[0]);
        return EXIT_FAILURE;
    }

    FILE* fp = fopen(argv[1],"r");//open file based on path and the string followed
   
    if (fp==NULL) {
        fprintf(stderr, "File %s does not exist\n",argv[1]);
        return EXIT_FAILURE;
    }

    unsigned char magic_zip[] = "PK\x03\x04";                   //magic numbers
    unsigned char magic_png[] = "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a";
    unsigned char magic_jpg[] = "\xff\xd8";
    unsigned char magic_gif[] = "GIF89a";
    unsigned char magic_pdf[] = "%PDF";

    printf("File Type: ");
    if (ftype_matched(fp,magic_zip,4))
        printf("ZIP\n");
    else if (ftype_matched(fp,magic_png,8))
        printf("PNG\n");
    else if (ftype_matched(fp,magic_jpg,2))
        printf("JPG\n");
    else if (ftype_matched(fp,magic_gif,6))
        printf("GIF\n");
    else if (ftype_matched(fp,magic_pdf,4))
        printf("PDF\n");
    else
        printf("Unknown\n");

    /* TODO: WHAT IS THE FUNCTION TO CLOSE THE FILE STREAM*/
    fclose(fp);

    return EXIT_SUCCESS;
}

Input:./program name file path

Output:File type: GIF(for example)



Corot_Wang
粉丝 1
博文 30
码字总数 13802
作品 0
香港
私信 提问
加载中
请先登录后再评论。
AirPush-Detector

这是一个检测android程序中是否含有AirPush广告框架或者其他广告框架的简单软件。

开源好!
2012/12/12
1.7K
0
嵌入式NoSQL引擎--UnQLite

UnQLite 是一个嵌入式的软件库,实现了自容器、无服务端、零配置和支持事务的 NoSQL 数据库引擎。UnQLite 是一个文档存储数据库,类似于 MongoDB, Redis, CouchDB 等。同时也是一个标准的 Ke...

匿名
2013/05/23
1W
6
jquery对象/标签映射扩展--NickName

jquery对象/标签映射扩展-NickName OTM是什么 以往把这样的一个json对象 var data = {}; data.UserId = "8888"; data.UserName = "赵六"; data.School="湖北工业大学"; data.schoolNo=100002......

知鸣
2013/06/13
1K
0
如何给Vanilla(OpenResty)添加一个路由协议

源起 QQ群经常看到有同学问(Vanilla/OpenResty开发:205773855,OpenResty技术交流2群:481213820): 如何让Vanilla支持Restful(或者Vanilla如何支持xxxx样子的URL访问)? Vanilla的路由...

iDev_周晶
2016/01/16
990
1
Lua 5.2/5.3 热更新小结

Lua热更新实现 用途 在生产环境上,总有可能出现不可预知的Bug,而通常修改好Bug仅仅又修改几句,停机维护的成本又太高,对于游戏来说,通常每个服就是单独的进程,也做不到像分布式环境下,...

tickbh
2016/04/26
657
3

没有更多内容

加载失败,请刷新页面

加载更多

【Python成长之路】对不起,今天的所有红包我都要抢走了

哈喽大家好,我是鹏哥。 今天要记录的内容是 —— 用python完成微信抢红包。 ~~~上课铃~~~ 1 写在前面 哈哈,今天的歌曲是过年必备款(主要是我懒得找适应节奏的流行歌)。向来对春晚不感冒的...

鹏哥贼优秀
01/24
0
0
说说TCP的拥塞控制

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或...

Java学习提升
05/29
0
0
高并发下接口幂等性解决方案

点击上方☝ Java编程技术乐园,轻松关注! 及时获取有趣有料的技术文章 作者:抽离的心 https://blog.csdn.net/u011635492/article/details/81058153 一、背景 我们实际系统中有很多操作,是...

阿飞云
02/05
0
0
树莓派4B安装tensorflow2.0

这个GitHub上可以下载到tensorflow2.x:https://github.com/lhelontra/tensorflow-on-arm/releases 我就拿我下载的举例子吧:我下载的是这个版本的:tensorflow-2.0.0-cp37-none-linux_armv...

osc_f9krav3q
22分钟前
0
0
SpringBoot + Mybatis 多模块( module )项目搭建教程

来自:枫本非凡 | 责编:乐乐 链接:cnblogs.com/orzlin/p/9717399.html 粉丝福利,点击领取:教妹子手撸了50个项目实战后,我住院了…… 一、前言 最近公司项目准备开始重构,框架选定为Spr...

倪升武
07/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部