【问题标题】:Function to read files one by one in a directory逐一读取目录中文件的功能
【发布时间】:2010-12-15 11:03:55
【问题描述】:

我在 C 中实现了一个 SMTP-sender,它应该在创建文件时从目录中读取文件,处理数据并删除文件。

我如何实现这个应该自动执行的轮询功能?

【问题讨论】:

  • 您使用的是什么编译器/目标平台?
  • “处理数据”是指处理文件并通过邮件发送结果?
  • 嗨,Alex,我一直在关注您的问题。他们真的很有趣。我很欣赏你的热情。我有一个疑问。你在用 C 做更大的事情吗?还是您只是根据您的兴趣练习 C 可以完成的每一项任务。如果您不介意,请告诉我。任何方式..好热情。

标签: c linux file-handling


【解决方案1】:

查看inotify,看看它是否足以满足您的需求。 inotify 允许您使用单个文件描述符来监视目标目录中的事件。您可以使用 select() 避免轮询,并立即通知目录中创建的任何文件,以便您进行处理。

This article 有一些示例代码。我相信还有其他关于网络的例子。

【讨论】:

    【解决方案2】:

    一个简单的选择是定期从cron 运行您的程序。该程序可以使用 Linux API 调用readdir 来遍历一个目录。它不必主动监视目录。

    这是一个简单的代码示例:

    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>
    int main()
    {
       DIR* dp = opendir(".");
       struct dirent* de;
       while (de = readdir(dp))
       { 
         if (de->d_type != DT_REG) // Only print regular files
            continue;
          printf("Found file %s\n", de->d_name);
       }
       closedir(dp);
    }
    

    免责声明:为简单起见,我没有包含检查或处理错误条件的代码。

    【讨论】:

      猜你喜欢
      • 2016-11-13
      • 1970-01-01
      • 2017-09-20
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 2021-12-25
      • 1970-01-01
      相关资源
      最近更新 更多