鱼C论坛

 找回密码
 立即注册
查看: 75|回复: 1

[复制链接]
发表于 2024-10-16 10:48:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用C编写一个守护进程,每隔一秒钟清理(删除)一下目录(自己指定)下的txt文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-16 10:49:29 | 显示全部楼层
创建一个守护进程需要一些步骤,包括脱离终端、创建新会话、处理信号等。下面是一个简单的示例程序,实现了每秒清理指定目录下的`.txt`文件。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <fcntl.h>
#include <signal.h>

void daemonize() {
    pid_t pid;

    // 创建子进程
    pid = fork();
    if (pid < 0) {
        exit(EXIT_FAILURE);
    }
    // 父进程退出
    if (pid > 0) {
        exit(EXIT_SUCCESS);
    }

    // 成为领导进程
    if (setsid() < 0) {
        exit(EXIT_FAILURE);
    }

    // 捕捉信号
    signal(SIGCHLD, SIG_IGN);
    signal(SIGHUP, SIG_IGN);

    // 再次fork,保证不会重新获得终端
    pid = fork();
    if (pid < 0) {
        exit(EXIT_FAILURE);
    }
    if (pid > 0) {
        exit(EXIT_SUCCESS);
    }

    // 修改文件掩码
    umask(0);

    // 改变工作目录
    chdir("/");

    // 关闭文件描述符
    for (int x = sysconf(_SC_OPEN_MAX); x >= 0; x--) {
        close(x);
    }
}

void clean_txt_files(const char *directory) {
    struct dirent *entry;
    DIR *dp = opendir(directory);

    if (dp == NULL) {
        perror("opendir");
        return;
    }

    char filepath[1024];
    while ((entry = readdir(dp))) {
        // 检查文件扩展名是否是.txt
        if (strstr(entry->d_name, ".txt") != NULL) {
            snprintf(filepath, sizeof(filepath), "%s/%s", directory, entry->d_name);
            remove(filepath);
        }
    }

    closedir(dp);
}

int main() {
    const char *directory = "/path/to/your/directory";  // 修改为你的目录路径

    daemonize();

    while (1) {
        clean_txt_files(directory);
        sleep(1);  // 每秒执行一次
    }

    return 0;
}

注意事项:
- 修改`/path/to/your/directory`为你要清理的实际目录路径。
- 确保你的程序有权限删除该目录下的文件。
- 运行该程序时需要以管理权限(如`root`用户)执行,以确保能够正常改变目录和关闭文件描述符。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 19:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表