mstar面试题 文件目录中有升级包SOFT001.bin,SOFT002.bin,002比001的版本要新,如何写程序识别出最新的升级包。

面试题文件目录中有升级包SOFT001.binSOFT002.bin002001的版本要新,如何写程序识别出最新的升级包。


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

#define SOFT_STR "SOFT"
int get_version_num_by_filename(const char *filename,int *pnVerNum)
{
	int nVerNum = 0;
	char *pchBin = NULL;
	char *pchS = NULL;
	if(NULL == filename ||
		0 == strlen(filename))
	{
		return -1;
	}

	if(strncmp(filename,SOFT_STR,strlen(SOFT_STR))!= 0)//保证以SOFT_STR开头
	{
		return -1;
	}

	pchBin = strstr(filename,".bin");
	if(!(NULL != pchBin && 0 == strcmp(pchBin,".bin"))) //保证以.bin末尾
	{
		return -1;
	}

	pchS = filename + strlen(SOFT_STR);

	while(pchS != pchBin)
	{
		if(*pchS > '9' || *pchS < '0')
		{
			return -1;
		}
		
		nVerNum = nVerNum*10+(*pchS-'0');
		pchS++;
	}

	*pnVerNum = nVerNum;
	return 0;	
}

int isDir(int type)
{
	if(type == 8) //file
	{
		return 0;
	}
	else if(type == 4) //dir
	{
		return 1;
	}
	else
	{
		return -1;
	}
}


int GetMaxVersionAndFilename(const char *pathname,char* pchUpgradefilename,int *pnVerNum)
{
	struct dirent *pstuDirent = NULL;
	DIR *pDirpathTmp = NULL;
	int nVerNum = 0;
	int nMaxVerNum = -1;
	char chUpgradefilename[255] = {0};

	if(NULL == pathname ||
		0 == strlen(pathname) ||
		NULL == pchUpgradefilename ||
		NULL == pnVerNum)
	{
		return -1;
	}
	
	pDirpathTmp = opendir(pathname);
	if(pDirpathTmp == NULL)
	{
		printf("\n if(pDirpathTmp == NULL) \n");
		return -1;
	}

	while(NULL != (pstuDirent = readdir(pDirpathTmp)))
	{
		printf("\n pstuDirent  d_name[%s] d_ino[%lu] d_off[%ld] d_reclen[%d]  d_type[%d]\n",
			pstuDirent->d_name,
			pstuDirent->d_ino,
			pstuDirent->d_off,
			pstuDirent->d_reclen,
			pstuDirent->d_type
			);

		if(isDir(pstuDirent->d_type) == 0 && get_version_num_by_filename(pstuDirent->d_name,&nVerNum) == 0)
		{
			if(nVerNum > nMaxVerNum)
			{
				memset(chUpgradefilename,0,sizeof(chUpgradefilename));
				strncpy(chUpgradefilename,pstuDirent->d_name,sizeof(chUpgradefilename)-1);
				nMaxVerNum = nVerNum;
			}
		}
	}

	closedir(pDirpathTmp);

	printf("\n----------------------------\n");

	printf("\nchUpgradefilename[%s] nMaxVerNum[%d]\n",chUpgradefilename,nMaxVerNum);

	strncpy(pchUpgradefilename,chUpgradefilename,strlen(chUpgradefilename)+1);
	*pnVerNum = nMaxVerNum;
	
	return 0;
	
}



int main()
{
	//getcwd
	int nMaxVerNum = -1;
	char chUpgradefilename[255] = {0};
	GetMaxVersionAndFilename("/share",chUpgradefilename,&nMaxVerNum);
	return 0;
}


运行结果

./a.out

 

 pstuDirent  d_name[zlib-1.2.8.tar.gz] d_ino[413168] d_off[187304008] d_reclen[32]  d_type[8]

 

 pstuDirent  d_name[test.out] d_ino[417292] d_off[268019727] d_reclen[20]  d_type[8]

 

 pstuDirent  d_name[a.out] d_ino[391811] d_off[328475253] d_reclen[20]  d_type[8]

 

 pstuDirent  d_name[test.c] d_ino[417290] d_off[367818067] d_reclen[20]  d_type[8]

 

 pstuDirent  d_name[New0001.c] d_ino[413065] d_off[387363692] d_reclen[24]  d_type[8]

 

 pstuDirent  d_name[curl-7.51.0] d_ino[413488] d_off[424798140] d_reclen[24]  d_type[4]

 

 pstuDirent  d_name[SOFT112.bin] d_ino[413074] d_off[509853290] d_reclen[24]  d_type[8]

 

 pstuDirent  d_name[1SOFT111.bin] d_ino[413071] d_off[530715160] d_reclen[24]  d_type[8]

 

 pstuDirent  d_name[SOFT111.txt.bin] d_ino[413072] d_off[622456054] d_reclen[28]  d_type[8]

 

 pstuDirent  d_name[SOFT002.bin] d_ino[413070] d_off[708605345] d_reclen[24]  d_type[8]

 

 pstuDirent  d_name[csdn.c] d_ino[391805] d_off[813129366] d_reclen[20]  d_type[8]

 

 pstuDirent  d_name[1.txt] d_ino[413063] d_off[921009042] d_reclen[20]  d_type[8]

 

 pstuDirent  d_name[curl-7.51.0.tar.gz] d_ino[413166] d_off[971975287] d_reclen[32]  d_type[8]

 

 pstuDirent  d_name[2.txt] d_ino[413064] d_off[982198225] d_reclen[20]  d_type[8]

 

 pstuDirent  d_name[opendir.c] d_ino[413067] d_off[983528440] d_reclen[24]  d_type[8]

 

 pstuDirent  d_name[zlib-1.2.8] d_ino[413169] d_off[1002493285] d_reclen[24]  d_type[4]

 

 pstuDirent  d_name[123.rmvb] d_ino[417304] d_off[1011954566] d_reclen[20]  d_type[8]

 

 pstuDirent  d_name[ffmpeg_learn] d_ino[417309] d_off[1273990568] d_reclen[24]  d_type[4]

 

 pstuDirent  d_name[ProFFmpeg] d_ino[417293] d_off[1310706302] d_reclen[24]  d_type[4]

 

 pstuDirent  d_name[ffmpeg-3.1.6] d_ino[392753] d_off[1345889369] d_reclen[24]  d_type[4]

 

 pstuDirent  d_name[yasm-1.3.0] d_ino[407880] d_off[1381087985] d_reclen[24]  d_type[4]

 

 pstuDirent  d_name[.] d_ino[391804] d_off[1451847256] d_reclen[16]  d_type[4]

 

 pstuDirent  d_name[..] d_ino[2] d_off[1486652463] d_reclen[16]  d_type[4]

 

 pstuDirent  d_name[ffmpeg-3.1.6.tar.gz] d_ino[392754] d_off[1594763545] d_reclen[32]  d_type[8]

 

 pstuDirent  d_name[SOFT666660.bin] d_ino[413075] d_off[1671722948] d_reclen[28]  d_type[8]

 

 pstuDirent  d_name[SOFT233.bin] d_ino[413068] d_off[1725054639] d_reclen[24]  d_type[4]

 

 pstuDirent  d_name[SOFT1.txt] d_ino[413073] d_off[1749282150] d_reclen[24]  d_type[8]

 

 pstuDirent  d_name[New0002.c] d_ino[413066] d_off[1768036029] d_reclen[24]  d_type[8]

 

 pstuDirent  d_name[simple.out] d_ino[417306] d_off[1865870150] d_reclen[24]  d_type[8]

 

 pstuDirent  d_name[learn] d_ino[413054] d_off[1921161435] d_reclen[20]  d_type[4]

 

 pstuDirent  d_name[sdasdSOFT1asd.bin] d_ino[413069] d_off[1936555055] d_reclen[32]  d_type[4]

 

 pstuDirent  d_name[simple_ffmpeg_player.c] d_ino[417303] d_off[2080791565] d_reclen[36]  d_type[8]

 

 pstuDirent  d_name[yasm-1.3.0.tar.gz] d_ino[407879] d_off[2080931987] d_reclen[32]  d_type[8]

 

 pstuDirent  d_name[output.yuv] d_ino[417308] d_off[2138376756] d_reclen[24]  d_type[8]

 

 pstuDirent  d_name[mySDLFirst.out] d_ino[417291] d_off[2147483647] d_reclen[28]  d_type[8]

 

----------------------------

 

chUpgradefilename[SOFT666660.bin] nMaxVerNum[666660]

root@ubuntu:/share# 




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值