在目录中逐个读取文件的功能

时间:2009-11-11 12:56:17

标签: c linux file-handling

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

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

3 个答案:

答案 0 :(得分:5)

一个简单的选择是定期从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);
}

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:-2)

通过我从你的问题中得到的结果是进程间通信的一个很好的例子。

您说当创建目录中的文件时需要得到通知。现在,在我看来,通过文件进行进程间通信是不好的。

在Unix中,您可以使用this guide详细信息来进行进程间通信。使用Unix sockets将是最简单的方法。

如果您已编写了另一个现在为进程间通信创建文件的进程,则可以更改实现以将其写入套接字。