check_dir.h

#ifndef _CHECK_DIR_

#define _CHECK_DIR_

#include

#ifdef__cplusplus

extern "C" {

#endif

#define CHECK_DIR_SIZE (30000)

#define FN_SIZE 1024

typedef struct my_struct

{

char f_name[FN_SIZE];

time_t ctime;

}f_struct,*p_f_struct;

//初始化文件缓冲队列

int neo_init_check_size();

//释放初始化的内存

int neo_close_check_size();

//获取缓冲队列首地址

p_f_struct neo_get_p_head();

//获取缓冲队列尾地址

p_f_struct neo_get_p_end();

//获取下一文件名地址

p_f_struct neo_get_p_next(p_f_struct p);

//显示缓冲区内容

void neo_print_f_name();

//将目录下所有文件名放入队列

int neo_check_dir(char *dir);

//更具key将数组分为两部分

//p_f_struct partion(p_f_struct pstHead,p_f_struct pstLow,p_f_struct pstHigh);

p_f_struct partion(p_f_struct pstHead, p_f_struct pstEnd);

//对扫描到的文件按最后一次修改时间进行排序

//int quick_sort(p_f_struct pstHead, p_f_struct pstLoiw, p_f_struct pstHigh);

void quick_sort(p_f_struct pstHead, p_f_struct pstEnd);

#ifdef__cplusplus

}

#endif

#endif

check_dir.c

#include

//#include

#include

#include

#include

#include

#include

#include "check_dir.h"

static p_f_struct neo_p_head = NULL;

static p_f_struct neo_p_end = NULL;

//初始化文件缓冲队列

int neo_init_check_size()

{

if(neo_p_head != NULL)

return -1;

neo_p_head = (p_f_struct)malloc(sizeof(f_struct) * CHECK_DIR_SIZE);

if(neo_p_head == NULL)

return -1;

memset(neo_p_head,0,sizeof(f_struct) * CHECK_DIR_SIZE);

neo_p_end = neo_p_head;

return 0;

}

//释放初始化的内存

int neo_close_check_size()

{

//p_f_struct p = neo_p_head;

if(neo_p_head != NULL)

{

free(neo_p_head);

neo_p_head = NULL;

neo_p_end = NULL;

return 0;

}

return -1;

}

//获取缓冲队列首地址

p_f_struct neo_get_p_head()

{

if(neo_p_head->f_name[0] == 0)

return NULL;

return neo_p_head;

}

//获取缓冲队列尾地址

p_f_struct neo_get_p_end()

{

if(neo_p_head->f_name[0] == 0)

return NULL;

neo_p_end = neo_p_head;

while((neo_p_end + 1)->f_name[0] != 0)

neo_p_end ++;

return neo_p_end;

}

//获取下一文件名地址

p_f_struct neo_get_p_next(p_f_struct p)

{

p++;

if(p->f_name[0] == 0)

return NULL;

return p;

}

//显示缓冲区内容

void neo_print_f_name()

{

int i = 0;

p_f_struct p = neo_p_head;

while(p->f_name[0] != 0)

{

printf("ctime : [%ld] file name : [%s]\n",p->ctime,p->f_name);

p = p ++;

i ++;

}

printf("sum = %d\n",i);

}

//将目录下所有文件名放入队列

int neo_check_dir(char *dir)

{

DIR * dp;

struct dirent *dent;

struct stat st;

char fn[1024];

//char fn1[1024];

if(neo_p_head == NULL)

{

printf("neo_p_head is NULL,need neo_init_check_size()!");

return;

}

p_f_struct p = neo_p_head;

//p_f_struct q = neo_p_head;

dp = opendir(dir);

if (!dp) {

printf("无法打开文件夹[%s]\n", dir);

return;

}

while ((dent = readdir(dp)) != NULL) {

if (strcmp(dent->d_name, ".") == 0 || strcmp(dent->d_name, "..") == 0) {

continue;

}

//MFLIST *mf;

sprintf(fn, "%s/%s", dir, dent->d_name);

if (stat(fn, &st) == 0) {

if (S_ISDIR(st.st_mode)) {

neo_check_dir(fn);

} else if (S_ISREG(st.st_mode)) {

snprintf(p->f_name,FN_SIZE,"%s",fn);

p->ctime = st.st_ctime;

//neo_p_end = p;

p = p ++;

if(p - neo_p_head >= (CHECK_DIR_SIZE - 1))

return -1;

/*p = (p_f_struct)malloc(sizeof(f_struct));

sprintf(p->f_name,"%s",fn);

p->ctime = st.st_ctime;

if(neo_p_head == NULL)

{

neo_p_head = p;

neo_p_head->next = NULL;

neo_p_head->front = neo_p_head;

continue;

}

if(p->ctime <= neo_p_head->ctime)

{

p->next = neo_p_head;

neo_p_head = p;

neo_p_head->front = neo_p_head;

continue;

}

q = neo_p_head->next;

while(q != NULL)

{

if(p->ctime <= q->ctime)

{

q->front->next = p;

p->next = q;

break;

}

q = q->next;

}

if(q == NULL)

{

q = p;

q->next = NULL;

}*/

}

} else {

printf("can't stat %s\n", fn);

}

}

closedir(dp);

return 0;

}

//更具key将数组分为两部分

p_f_struct partion(p_f_struct pstHead, p_f_struct pstEnd)

{

f_struct temp_struct;

memcpy(&temp_struct, pstHead, sizeof(f_struct));

while(pstHead != pstEnd)

{

while((pstHead < pstEnd) && (pstEnd->ctime >= temp_struct.ctime))

pstEnd --;

if(pstHead < pstEnd){

// printf("%s,%ld\n",pstEnd->f_name,pstEnd->ctime);

memcpy(pstHead, pstEnd, sizeof(f_struct));

pstHead ++;

}

while((pstHead < pstEnd) && (pstHead->ctime <= temp_struct.ctime))

pstHead ++;

if(pstHead < pstEnd){

// printf("%s,%ld\n",pstHead->f_name,pstHead->ctime);

memcpy(pstEnd, pstHead, sizeof(f_struct));

pstEnd --;

}

}

// printf("%s,%ld\n",temp_struct.f_name,temp_struct.ctime);

memcpy(pstHead, &temp_struct, sizeof(f_struct));

return pstHead;

}

//对扫描到的文件按最后一次修改时间进行排序

void quick_sort(p_f_struct pstHead, p_f_struct pstEnd)

{

if(pstHead < pstEnd)

{

p_f_struct temp_Head = pstHead;

p_f_struct temp_End = pstEnd;

p_f_struct pstTemp = partion(temp_Head, temp_End);

quick_sort(pstHead, pstTemp - 1);

quick_sort(pstTemp + 1, pstEnd);

}

}

linux按时间排序并查看发现,linux下扫描文件并按时间排序相关推荐

  1. linux下查找文件并按时间顺序排序的方法

    本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/33 本节内容,介绍在linux系统查找指定的文件,并按 ...

  2. linux时间变成英文,查看/修改Linux时区和时间

    一.时区 1. 查看当前时区 date -R 2. 修改设置时区 方法(1) tzselect 方法(2) 仅限于RedHat Linux 和 CentOS timeconfig 方法(3) 适用于D ...

  3. linux du 文件大小排序,du命令 实现Linux 某个文件夹下的文件按大小排序

    1. df -lh 2. du -s /usr/* | sort -rn 这是按字节排序 3. du -sh /usr/* | sort -rn 这是按兆(M)来排序 4.选出排在前面的10个 du ...

  4. linux如何统计目录下的文件个数,linux怎么查看一个目录下的文件数量

    有时候需要看文件夹下有多少文件,那么就需要用到以下指令 $ls -l | grep -c '^-' 个grep是啥意思呢?我们man一下 $man grep 会看到以下描述: SYNOPSIS gre ...

  5. linux 查看整个根目录下各个文件占用情况

    su root 切换到root用户下,输入密码即可切换到当前用户下 df -h 命令查看磁盘空间 du -ah --max-depth=1  /    查看根目录下各个文件占用情况,max-depth ...

  6. linux以长格式显示文件名,linux怎样以长格式显示用户目录下所有文件

    我现在正在编辑RHCE的培训用书,刚好贴出来大家提提意见. 现在计划8月底翻译完033的实验部分和编写前7章的课程. 请提出宝贵意见kevinzh@eloo.com 实验1 :文件和目录操作 时间:1 ...

  7. Linux编写内核模块,实现在/proc目录下添加文件

    /proc是Linux上的一种虚拟文件系统,存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以更改其中某些文件来改变内核的运行状态. 现编 ...

  8. dos 改某个目录下所有文件的时间_go语言入门学习笔记(2)-DOS操作及go语言变量学习...

    API:application program interface:应用程序编程接口. 就是我们go的各个包的各个函数. 我们想要了解这些函数我们可以通过Go的中文网在线标准库文档: https:// ...

  9. c语言 获取文件修改时间,(C语言)获取并修改文件夹时间(创建时间、修改时间、访问时间)...

    背景 在Windows系统下没有提供可以对文件夹时间属性修改的方法或者API,在上一篇文章中我们提到了文件时间的函数,那么我们可以以打开文件的方式打开文件夹,然后通过修改文件时间的API函数对文件夹时 ...

最新文章

  1. ACMNO.13求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。 输入 n 输出 和 样例输入 5 样例输出 153
  2. 使用NeMo快速入门NLP、实现机器翻译任务,英伟达专家实战讲解,内附代码
  3. 预告 | 旷视天元的前世今生与移动端推理优化@清华专场
  4. hdu 1224【Free DIY Tour】
  5. c#与access建立连接用作登录_组态王与Access数据库的数据交换
  6. laravel常用响应操作
  7. Jeecg-Boot 2.1.4 版本发布,基于SpringBoot低代码平台
  8. NeurIPS 2020 | 腾讯 AI Lab 解读机器学习及计算机视觉方向入选论文
  9. C# 打开文件 保存文件
  10. CSU 1803 2016(数论)
  11. 【异或】LeetCode 137. Single Number II
  12. 浅谈web架构之架构设计
  13. 【干货】高盛合伙人制度和激励机制!
  14. 奥城大学计算机专业,双录取的美国研究生大学有哪些?哪些专业被允许?
  15. 植物大战僵尸pak修改
  16. 使用getdate()获取不同格式的日期
  17. 【Unity】Obi插件系列(一)—— 总览、Actors与Solvers
  18. 工兵扛军旗游戏新玩法
  19. 《海盗派测试分析》笔记-01 了解测试任务 KYM
  20. 维基解密:CIA早就可以轻易入侵苹果手机和电脑

热门文章

  1. pandas使用dropna函数计算返回dataframe中不包含缺失值的行索引列表list(index of rows without missing values in dataframe)
  2. R语言使用ggplot2包使用geom_density()函数绘制分组密度图(分组拆分画板基于facet)实战(density plot)
  3. 机器学习类别/标称(categorical)数据处理:独热编码(One Hot Encoding)
  4. R构建径向核支持向量机分类器实战代码(Radial kernel Support Vector Classifier)
  5. R可视化包ggplot2设置轴范围
  6. xgboost不能解决哪些问题?为什么?进而说明树模型有哪些缺陷?那种模型能够树模型的这种缺陷?
  7. 梯度下降之模拟退火、梯度下降之学习计划、牛顿法、拟牛顿法、共轭梯度法
  8. 样条+样条函数+样条分析+spline+样条插值+样条回归
  9. java arraylist 序列化_专题二、ArrayList序列化技术细节详解
  10. 三代测序之微生物基因组 de novo 测序