OpenTTD Source: src/dedicated.cpp Source File

OpenTTD Source 1.11.0-RC1

dedicated.cpp
Go to the documentation of this file.
1 /*
2 * This file is part of OpenTTD.
3 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6 */
7
10 #include "stdafx.h"
11 #include "fileio_func.h"
12 #include <string>
13
14 std::string _log_file;
15 std::unique_ptr<FILE, FileDeleter> _log_fd;
16
17 #if defined(UNIX)
18
19 #include <unistd.h>
20
21 #include "safeguards.h"
22
23 #if defined(SUNOS) && !defined(_LP64) && !defined(_I32LPx)
24 /* Solaris has, in certain situation, pid_t defined as long, while in other
25 * cases it has it defined as int... this handles all cases nicely.
26 */
27 # define PRINTF_PID_T "%ld"
28 #else
29 # define PRINTF_PID_T "%d"
30 #endif
31
32 void DedicatedFork()
33 {
34 /* Fork the program */
35 pid_t pid = fork();
36 switch (pid) {
37 case -1:
38 perror("Unable to fork");
39 exit(1);
40
41 case 0: { // We're the child
42 /* Open the log-file to log all stuff too */
43 _log_fd.reset(fopen(_log_file.c_str(), "a"));
44 if (!_log_fd) {
45 perror("Unable to open logfile");
46 exit(1);
47 }
48 /* Redirect stdout and stderr to log-file */
49 if (dup2(fileno(_log_fd.get()), fileno(stdout)) == -1) {
50 perror("Rerouting stdout");
51 exit(1);
52 }
53 if (dup2(fileno(_log_fd.get()), fileno(stderr)) == -1) {
54 perror("Rerouting stderr");
55 exit(1);
56 }
57 break;
58 }
59
60 default:
61 /* We're the parent */
62 printf("Loading dedicated server...\n");
63 printf(" - Forked to background with pid " PRINTF_PID_T "\n", pid);
64 exit(0);
65 }
66 }
67 #endif
_log_fd
std::unique_ptr< FILE, FileDeleter > _log_fd
File to reroute output of a forked OpenTTD to.
Definition: dedicated.cpp:15
fileio_func.h
_log_file
std::string _log_file
File to reroute output of a forked OpenTTD to.
Definition: dedicated.cpp:14
safeguards.h
stdafx.h