c - fopen() seems not work when I create a daemon process -


here main source code:

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);     }     [...] } 

here functions definitions:

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;          (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; } 

and here problem:

when compile code become_daemon() function active , execute program, file datalog_file (it's define "xxxxxx.txt") it's not created. if compile without become_daemon() function call, program works fine , file created.

i noticed if add line

sudo /my/folder/program 

in rc.local run @ boot, starts want but, in these case, not create file datalog_file.

i'm newbie daemon process can tell me cause of behavior?

as ctx mentioned in comment, function become_daemon may change current directory /. if datalog_file relative filename, such "xxxxxx.txt" write in question, daemon fail create in system root directory, unless has root privileges.

either not change current directory passing bd_no_chdir argument become_daemon or make datalog_file absolute path.


Comments

Popular posts from this blog

javascript - jQuery: Add class depending on URL in the best way -

caching - How to check if a url path exists in the service worker cache -

Redirect to a HTTPS version using .htaccess -