我正在尝试创建一个简单的守护进程,用于连续从 purple/icons ( pidgin 目录 ) 中删除文件。但是,remove() 和 unlink() 不会删除文件。这是我的代码,请告诉我我的错误在哪里。
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <syslog.h>
#include <string.h>
#include <dirent.h>
#include <time.h>
int remove_files(const char* directory);
int remove_files(const char* directory) {
DIR *dp;
struct dirent *dirp;
int files_deleted = 0;
int count=0;
dp = opendir(directory);
while ( (dirp = readdir(dp)) != 0x00 ) {
files_deleted++;
remove(dirp->d_name);
}
closedir(dp);
return files_deleted;
}
int main(int argc, char *argv[]) {
time_t sec;
time(&sec);
//dir handlers
DIR *dp;
struct dirent *ep;
//
FILE *fp = 0x00;
pid_t process_id = 0;
pid_t sid = 0;
process_id = fork();
if ( process_id < 0 ) {
fprintf(stderr, "fork() failed \n");
exit(1);
} else if ( process_id > 0 ){
fprintf(stdout, "process_id of child process %d\n", process_id);
exit(0);
}
umask(0);
if ( (sid=setsid() ) < 0 ) {
exit(1);
}
chdir("/home/ilian/");
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
fp = fopen("Log.txt", "w+");
if ( fp == 0x00 ) exit(1);
fprintf(fp, "Started logging at %.24s \n", ctime(&sec));
fflush(fp);
while ( 1 ) {
fprintf(fp, "%d files deleted \n", remove_files("/home/ilian/.purple/icons/"));
fflush(fp);
sleep(10);
}
fclose(fp);
return (0);
} //END OF MAIN
什么都没删除,但是守护进程正在运行。日志显示了有多少文件,但是文件没有被触及。
答案1
两件事情:
你应该总是检查系统和库函数的返回值。如果你有
if(remove(dirp->d_name)<0) perror(dirp->d_name); else files_deleted++;
然后你就会看到发生了什么。
您的代码不起作用的原因是,
remove()
并且unlink()
需要完整路径到相关文件,而readdir()
仅填充d_name
文件名。最简单的做法是
chdir()
先进入目录:chdir(directory); dp = opendir("."); ...