C++ 检测目标C或C+中的文件夹访问+;在OSX上(如fs_用法命令)

C++ 检测目标C或C+中的文件夹访问+;在OSX上(如fs_用法命令),c++,objective-c,macos,directory,folder-access,C++,Objective C,Macos,Directory,Folder Access,我正在OSX上做一个实时病毒扫描器。OSX的命令行命令fs\u用法可用于通过以下方式确定文件夹访问权限(并且只能以root用户身份运行): fs|u用法-w-f路径名| grep'/Users/*/Documents\|/Users/*/Downloads'| grep mds 然后,只需扫描包含以下短语的行: open (前面4格,后面4格) 当文件下载到Documents或Downloads文件夹时,将发出此消息。然后,您可以对其执行文件哈希(最好是sha256),并使用S

我正在OSX上做一个实时病毒扫描器。OSX的命令行命令fs\u用法可用于通过以下方式确定文件夹访问权限(并且只能以root用户身份运行):

fs|u用法-w-f路径名| grep'/Users/*/Documents\|/Users/*/Downloads'| grep mds

然后,只需扫描包含以下短语的行:

    open    
(前面4格,后面4格)

当文件下载到Documents或Downloads文件夹时,将发出此消息。然后,您可以对其执行文件哈希(最好是sha256),并使用SQLite数据库检查您之前是否已扫描该文件。如果没有,则可以扫描该文件

<>当然,这很有趣,但是C++或Objor C方式是如何确定文件夹访问的?我的意思是,
fs\u usage
命令肯定在为此使用某种API,对吗


我有一个线索,我想是这个。但是,从我的特定场景给出的示例中,我没有完全理解它。

以下代码必须在
main.m
中,而不是
main.mm
中,否则它将无法编译。(见下面的C++的附录)(main .mm)。下面的代码运行在循环中,在<代码> /用户/ Mike /文档< /C>和<代码> /用户/ Mike /下载< /代码>中查看新文件创建。(很抱歉,这些路径上不支持通配符——我希望它支持!)按CTRL+C退出运行循环

注意,在输出中,如果下载文件,您将看到一致的标志ID为125184。如果将新文件从同一文件夹复制到文件夹中,则标志ID为128256。如果新文件是新创建的(如从编辑器创建),则标志ID为108544。如果将现有文件拖到文件夹中,则标志ID为67584。您需要不断尝试ID,以查看要捕获哪些事件。例如,如果编写实时病毒扫描程序,您可能希望检测通过命令行、拖放、剪切/粘贴或从web下载到特定文件夹的文件。尝试各种方案和子文件夹,查看您获得的ID,并编写捕获这些标志ID的代码

#导入
无效检测文件(
ConstFSEventStreamRef streamRef,
void*clientCallBackInfo,
尺寸和数量,
void*事件路径,
常量FSEventStreamEventFlags事件标志[],
常量fseventstreamventid eventIds[]
{
int i;
字符**路径=事件路径;
printf(“得到一个事件!!!!\n”);

对于(i=0;如果fs_用法不使用AFS API。您应该在此处检查fs_用法来源:自:它不是用于病毒检查器的
char **paths = eventPaths;
char **paths = (char **)eventPaths;
void *callbackInfo = NULL;
FSEventStreamContext *callbackInfo = NULL;
CFAbsoluteTime latency = 1.0; // seconds
CFTimeInterval latency = 1.0; // seconds