实现Ubuntu下的简易播放器

#include "stdio.h"
#include <stdlib.h>
#include <string.h>

//定义字符串最大长度
#define MAX_LEN 256

/* 实现一个可以在ubuntu下运行的播放器
* 使用方法:
    ./a.out 文件名
*/

enum{
    //未知类型
    UNKNOW_TYPE = 0,
    //图片
    PIC_TYPE,
    //视频
    VIDEO_TYPE,
    //音频
    AUDIO_TYPE,
    //文本
    TEXT_TYPE
};

int popenCmd(char *fileName, char *results);
int getFileType(char *results);
int player(char *fileName, int fileType);

int main(int argc, char *argv[])
{
    //argc 参数的个数
    //argv 参数的数组

    if(argc != 2){
        printf("运行方法:./a.out 文件名\n");
        return -1;
    }

    char results[MAX_LEN] = {0};
    int ret = 0;

    ret = popenCmd(argv[1], results);
    if(ret < 0){
        printf("读取file命令结果失败\n");
        return -1;
    }
    
    //printf("file命令结果: %s\n", results);

    int fileType = UNKNOW_TYPE;

    //获取文件类型
    fileType = getFileType(results);

    //播放文件
    player(argv[1], fileType);

    return 0;
}

//对输入的文件名使用file命令进行判断,并将file命令的结果保存到字符串数组中
int popenCmd(char *fileName, char *results)
{
    char cmd[MAX_LEN] = {0};
    sprintf(cmd, "file %s", fileName);

    //运行file命令返回文件指针
    FILE *fp = popen(cmd, "r");
    if(NULL == fp){
        printf("打开 file命令失败\n");
        goto err;
    }
    
    //将结果读取到results字符串数组中
    fgets(results, MAX_LEN, fp);
    if(fp){
        pclose(fp);
        fp = NULL;
    }

    return 0;

err:
    if(fp){
        pclose(fp);
        fp = NULL;
    }
    return -1;
}

//如何判断文件类型的代码
int getFileType(char *results)
{
    //file命令的结果中有image代表是图片,有Audio或audio代表是音频,有MP4/AVI代表是视频,有text代表是文本(默认文件是未知类型)
    if(strstr(results, "image")){
       return PIC_TYPE;
    }

    if(strstr(results, "AVI") || strstr(results, "MP4")){
        return VIDEO_TYPE;
    }
    
    if(strstr(results, "Audio") || strstr(results, "audio")){
        return AUDIO_TYPE;
    }

    if(strstr(results, "text")){
        return TEXT_TYPE;
    }

    return UNKNOW_TYPE;
}

int player(char *fileName, int fileType)
{
    char cmd[MAX_LEN] = {0};
    /*  
     *  判断文件类型
     *  当文件类型是视频时,使用vlc命令       播放视频使用vlc(例如:vlc 123.mp4)
     *  当文件类型是音频时,使用aplay命令
     *  当文件类型是图片时,使用display命令
     *  当文件类型是文本时,使用gedit命令
     *  对应文件类型拼接对应命令的代码 
     */
    switch (fileType){
        case PIC_TYPE:
            //拼一个字符串,使字符串内容为"display argv[1]的实际内容",以此类推
            sprintf(cmd, "display %s", fileName); 
            break;
        case VIDEO_TYPE:
            sprintf(cmd, "vlc %s", fileName);
            break;
        case AUDIO_TYPE:
            sprintf(cmd, "aplay %s", fileName);
            break;
        case TEXT_TYPE:
            sprintf(cmd, "gedit %s", fileName);
            break;
        default:
            printf("未知文件类型,程序即将退出\n");
            break;
    }

    if(fileType != UNKNOW_TYPE){
        //system()函数用于调用linux下的命令
        system(cmd);
    }

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值