Re[4]: Как программу из демона сделать просто консольной?
От: JKC Украина  
Дата: 21.11.05 13:44
Оценка:
Здравствуйте, 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;
}

Все что мне нужно это просто консольное приложение . что бы я мог с консоли читать сообщения.
Секс, джаз, бокс !!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.