⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 一个Windows下的Linux专用虚拟机
💻 C
字号:
/* * This source code is a part of coLinux source package. * * Dan Aloni <da-x@colinux.org>, 2003 (c) * * The code is licensed under the GPL. See the COPYING file at * the root directory. * */ #include <stdio.h>#include <stdarg.h>#include <signal.h>#include <unistd.h>#include <sched.h>#include <colinux/common/libc.h>#include <colinux/user/daemon.h>#include <colinux/user/monitor.h>#include <colinux/user/manager.h>#include <colinux/user/debug.h>#include <colinux/os/user/manager.h>#include <colinux/os/user/misc.h>COLINUX_DEFINE_MODULE("colinux-daemon");static co_daemon_t *colinux_daemon = NULL;static void sighup_handler(int sig){	co_terminal_print("daemon: received SIGHUP\n");	colinux_daemon->send_ctrl_alt_del = PTRUE;}static int daemon_main(int argc, char *argv[]){	co_rc_t rc = CO_RC_OK;	co_start_parameters_t start_parameters;	co_command_line_params_t cmdline;	co_manager_handle_t handle;	bool_t installed = PFALSE;	int ret;	co_daemon_print_header();	co_memset(&start_parameters, 0, sizeof(start_parameters));	rc = co_cmdline_params_alloc(&argv[1], argc-1, &cmdline);	if (!CO_OK(rc)) {		co_terminal_print("daemon: error parsing arguments\n");		return CO_RC(ERROR);	}	rc = co_daemon_parse_args(cmdline, &start_parameters);	if (!CO_OK(rc)) {		co_terminal_print("daemon: error parsing parameters\n");		co_daemon_syntax();		return -1;	}	if (!start_parameters.config_specified || start_parameters.show_help) {		co_daemon_syntax();		return 0;	}	rc = co_os_manager_is_installed(&installed);	if (!CO_OK(rc)) {		co_terminal_print("daemon: error, unable to determine if driver is installed (rc %x)\n", (int)rc);		return -1;	}		if (!installed) {		co_terminal_print("daemon: error, kernel module is not loaded\n");		return -1;	}	handle = co_os_manager_open();	if (handle) {		co_manager_ioctl_status_t status = {0, };		rc = co_manager_status(handle, &status);		if (CO_OK(rc)) {			co_terminal_print("daemon: manager is loaded\n");		} else {			if (CO_RC_GET_CODE(rc) == CO_RC_VERSION_MISMATCHED) {				co_terminal_print("driver version is %d while expected version %d\n", 					 status.periphery_api_version, CO_LINUX_PERIPHERY_API_VERSION);			}			co_terminal_print("daemon: can't get manager status\n");			return -1;		}	} else {		co_terminal_print("daemon: cannot open driver\n");		return -1;	}	co_os_manager_close(handle);	rc = co_daemon_create(&start_parameters, &colinux_daemon);	if (!CO_OK(rc))		goto out;	rc = co_daemon_start_monitor(colinux_daemon);	if (!CO_OK(rc))		goto out_destroy;	signal(SIGHUP, sighup_handler);	rc = co_daemon_run(colinux_daemon);	signal(SIGHUP, SIG_DFL);	co_daemon_end_monitor(colinux_daemon);out_destroy:	co_daemon_destroy(colinux_daemon);	colinux_daemon = NULL;out:	if (!CO_OK(rc)) {                if (CO_RC_GET_CODE(rc) == CO_RC_OUT_OF_PAGES) {			co_terminal_print("daemon: not enough physical memory available (try with a lower setting)\n");		} else {			char buf[0x100];			co_rc_format_error(rc, buf, sizeof(buf));			co_terminal_print("daemon: exit code %08x\n", (int)rc);			co_terminal_print("daemon: %s\n", buf);		}		ret = -1;	} else {		ret = 0;	}	return ret;}int main(int argc, char *argv[]) {	int ret;	co_debug_start();	ret = daemon_main(argc, argv);	co_debug_end();	return ret;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -