예제 #1
0
파일: rsync.c 프로젝트: zinid/erlang-rsync
static int load(ErlNifEnv* env, void** priv, ERL_NIF_TERM load_info)
{
  ErlNifResourceFlags flags = ERL_NIF_RT_CREATE | ERL_NIF_RT_TAKEOVER;
  state_r = enif_open_resource_type(env, NULL, "state_r",
				    destroy_state, flags, NULL);
  //rs_trace_set_level(RS_LOG_DEBUG);
  rs_trace_to((rs_trace_fn_t *) &trace_callback);
  return 0;
}
예제 #2
0
int
hechizar(void)
{   unsigned i;
    int pid;
    int sid;

    for (i=0; i<3; i++) {
        close(i);
        open("/dev/null", O_RDWR);
    }

    open_syslogd();
    rs_trace_to(rs_trace_syslog);

    /* ignore sighup */
    signal(SIGHUP, SIG_IGN);

    pid =  fork();
    if( pid  == -1 ) {
        rs_log_error(_("forking: %s"), strerror(errno));
        return -1;
    }
    else if( pid == 0 )
        ; /* child */
    else
        exit(0);

    /* new session */
    if((sid = setsid()) <0 )
    {   rs_log_error("setsid: %s\n",strerror(errno));
        return -1;
    }

    umask(0022);
    chdir("/");

    return 0;
}