Здравствуйте, Dair, Вы писали:
K>>>Убрать демонизацию, очевидно. Смотреть в районе вызова setsid(2) либо daemon(3)
JKC>>Увы но эти функции отсутствуют.
D>гм
D>и при этом при обычном запуске /path/to/program она демонизится?
D>если да, то что говорит, к примеру file /path/to/program ?
D>если он говорит что-то наподобие "/bin/su: setuid ELF 32-bit LSB executable" (у меня Linux), то искать в сорцах fork()/fork() (два раза должен fork делаться)
Вот так всё выглядит
#include "main.h"
#include <stdio.h>
int debug =0;
char sb[512];
UINT flag, sock;
time_t the_time, the_start;
#ifdef WIN32
int fork(void) {return 0;}
#endif
extern UINT n_alist;
int main(int argc, char *argv[]) {
printin_file("main");
time(&the_time);
the_start = the_time;
if (argc<2) { printf("Usage: $ %s conf-file", argv[0]); exit(1); }
flag = 0;
parse_conf(argv[1], 0);
flag = 1; //conf parsed ok
#ifndef WIN32
//daemonize
int ret;
ret = fork();
if (ret == -1) fprintf(stderr, "Could not daemonize process, fork() == -1\n");
if (ret > 0) exit(0);
close(0);
close(1);
close(2);
setpgrp();
ret = fork();
if (ret > 0) exit(0);
pid_t pid;
pid = getpid();
#else
UINT pid = GetCurrentProcessId();
WORD wVersionRequested = MAKEWORD(1,1);
WSADATA wsaData;
WSAStartup(wVersionRequested, &wsaData);
if (wsaData.wVersion != wVersionRequested) exit(1);
#endif
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock == -1) exit(1);
struct sockaddr_in sa;
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = INADDR_ANY;
sa.sin_port = htons(2010);
if (bind(sock, (struct sockaddr*)&sa, sizeof(struct sockaddr)) == -1) exit(1);
if(init_scheduler()) exit(1);
while(main_loop());
//not reached
return 0;
}
Все что мне нужно это просто консольное приложение . что бы я мог с консоли читать сообщения.