如何在C目录中打印新创建文件的名称?
Posted
技术标签:
【中文标题】如何在C目录中打印新创建文件的名称?【英文标题】:how to print name of newly created file(s) within a directory in C? 【发布时间】:2019-03-05 20:26:01 【问题描述】:此代码会扫描目录中新创建的文件,但不会出现“%s”应包含新文件名称的情况。
我可以想象这里写了一些不必要的代码,但是我对 C 非常不熟悉,我很高兴它现在可以编译(并且实际上可以识别新文件)!
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
#include <sys/inotify.h>
int main (int argc, char *argv[])
char target[FILENAME_MAX];
int result;
int fd;
int wd; /* watch descriptor */
const int event_size = sizeof(struct inotify_event);
const int buf_len = 1024 * (event_size + FILENAME_MAX);
fd = inotify_init();
if (fd < 0)
perror("inotify_init");
wd = inotify_add_watch(fd, "/home/joe/Documents", IN_CREATE);
while (1)
char buff[buf_len];
int no_of_events, count = 0;
no_of_events = read (fd, buff, buf_len);
while (count < no_of_events)
struct inotify_event *event = (struct inotify_event *)&buff[count];
if (event->len)
if (event->mask & IN_CREATE)
if(!(event->mask & IN_ISDIR))
printf("The file %s has been created\n", target);
fflush(stdout);
count += event_size + event->len;
return 0;
【问题讨论】:
发布的代码导致编译器 (gcc) 输出大量关于隐式类型转换和未使用变量的警告。它还讨论了变量wd
设置但从未使用的位置。编译时,始终启用警告,然后修复这些警告。 (对于gcc
,至少使用:-Wall -Wextra -Wconversion -pedantic -std=gnu11
)注意:其他编译器使用不同的选项来产生相同的东西
【参考方案1】:
当您收到事件时,您将打印出target
,但target
永远不会被修改。
创建的文件名存储在event->name
。这就是您要打印的内容。
printf("The file %s has been created\n", event->name);
【讨论】:
以上是关于如何在C目录中打印新创建文件的名称?的主要内容,如果未能解决你的问题,请参考以下文章
使用python写文件时,如何做到写入文件由于外力删掉了之后可以新创建一个同名文件并继续写入?