- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是我的主要源代码:
int main(int argc, char *argv[]) {
[...]
if (become_daemon(0) == -1) {
exit(EXIT_FAILURE);
}
while (main_loop == LOOP_CONTINUE) {
[...]
if (log_data(date_temp, data_processed) < 0) {
[...]
} else {
[...]
}
sleep(measure_rate);
}
[...]
}
这里是我的函数定义:
int become_daemon(int flags) {
int maxfd, fd;
switch (fork()) {
case -1:
return -1;
case 0:
break;
default:
exit(EXIT_SUCCESS);
}
if (setsid() == -1)
return -1;
switch (fork()) {
case -1:
return -1;
case 0:
break;
default:
exit(EXIT_SUCCESS);
}
if (!(flags & BD_NO_MASK0))
umask(0);
if (!(flags & BD_NO_CHDIR))
chdir("/");
if (!(flags & BD_NO_CLOSE_FILE)) {
maxfd = sysconf(_SC_OPEN_MAX);
if (maxfd == -1)
maxfd = BD_MAX_CLOSE;
for (fd = 0; fd < maxfd; fd++)
close(fd);
}
if (!(flags & BD_NO_REOPEN_STD_FDS)) {
close(STDIN_FILENO);
fd = open("/dev/null", O_RDWR);
if (fd != STDIN_FILENO)
return -1;
if (dup2(STDIN_FILENO, STDOUT_FILENO) != STDOUT_FILENO)
return -1;
if (dup2(STDIN_FILENO, STDERR_FILENO) != STDERR_FILENO)
return -1;
}
return 0;
}
int log_data(char *date, double array_data[DATA_NUM]) {
FILE *file;
if ((file = fopen(DATALOG_FILE, "a")) == NULL)
return -1;
fprintf(file, "%s ; %.2f ; %.2f ; %.2f ; %.2f ; %.2f ; %.2f\n",
date, array_data[0], array_data[1], array_data[2],
array_data[3], array_data[4], array_data[5]);
fclose(file);
return 0;
}
这是我的问题:
当我使用激活的 become_daemon()
函数编译我的代码然后执行程序时,文件 DATALOG_FILE
(它是 “xxxxxx. txt"
) 它没有被创建。如果我在没有调用 become_daemon()
函数的情况下进行编译,程序会正常运行并创建文件。
我什至注意到如果我添加这条线
sudo /my/folder/program
在 rc.local
中以在启动时运行它,它按照我想要的方式启动,但即使在这种情况下,它也不会创建文件 DATALOG_FILE。
我是守护进程的新手所以谁能告诉我这种行为的原因吗?
最佳答案
正如 Ctx 在他的评论中提到的,函数 become_daemon
可能会将当前目录更改为 /
。如果 DATALOG_FILE
是一个相对文件名,比如你在问题中写的 "xxxxxx.txt"
,守护进程将无法在系统根目录中创建它,除非它有root权限。
要么不通过将 BD_NO_CHDIR
作为参数传递给 become_daemon
来更改当前目录,要么使 DATALOG_FILE
成为绝对路径。
关于c - 当我创建守护进程时,fopen() 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35260553/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!