0

进程的 pid 显示在终端中,但未在根目录中创建日志文件。请仔细阅读此代码并告诉我缺少什么。

终端输出:

process_id of child process 5611 

来源如下。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <sys/inotify.h>
int main(int argc, char* argv[])
{
    FILE *fp= NULL;
    pid_t process_id = 0;
    pid_t sid = 0;
    int fd,wd,i=0,len=0;
    char pathname[100],buf[1024];
    process_id = fork();
    if (process_id < 0)
    {
        printf("fork failed!\n");
        exit(1);
    }
    if (process_id > 0)
    {
        printf("process_id of child process %d \n", process_id);
        // return success in exit status
        exit(0);
    }
    umask(0);
    sid = setsid();
    if(sid < 0)
    {
        exit(0);
    }
    chdir("/");
    close(STDIN_FILENO);
    close(STDOUT_FILENO);
    close(STDERR_FILENO);
    fp = fopen ("log.txt", "w+");
    fprintf(fp, "Logging info...\n");
    fflush(fp);
    fclose(fp);
    sleep(1);
    struct inotify_event *event;

    fd=inotify_init();
    wd=inotify_add_watch(fd,"/osa",IN_ALL_EVENTS);
    while(1)
    {
        i=0;
        len=read(fd,buf,1024);
        fp = fopen ("log.txt", "w+");
        fflush(fp);
        while(i<len)
        {
            event=(struct inotify_event *) & buf[i];
            if(event->mask & IN_OPEN)
            {
                fprintf(fp,"%s:was opened\n",event->name);
            }

            if(event->mask & IN_MODIFY)
            {
                fprintf(fp,"%s:file is modified",event->name);

            }
            if(event->mask & IN_DELETE)
            {
                fprintf(fp,"%s:was deleted\n",event->name);
            }
            i+=sizeof(struct inotify_event)+event->len;
        }
        fclose(fp);
    }
    return (0);
}
4

2 回答 2

0

正如亨利斯宾塞曾经说过的那样:

如果一个函数被宣传为在遇到困难时返回一个错误代码,你应该检查那个代码,是的,即使检查是你的代码大小的三倍并且在你打字的手指上产生疼痛,因为如果你认为“它不可能发生在我身上'',众神一定会因你的傲慢而惩罚你。

fp = fopen ("log.txt", "w+");
fprintf(fp, "Logging info...\n");

您在使用fp时未检查是否fopen()实际返回了有效指针。如果fopen()返回一个空指针,您可以检查 的值,errno看看出了什么问题。

于 2013-09-12T19:59:29.910 回答
0

正在创建日志文件。您需要以 root 身份运行代码,因为日志文件是在“/”目录中打开的,通常只有 root 可以访问。

于 2013-09-12T19:59:29.893 回答