int main(int argc, char *argv[]) { int hDevice = -1; int hDeviceUsr = -1; /* Check root permissions. */ if (geteuid() != 0) { fprintf(stderr, "This program needs administrator privileges.\n"); return -1; } /* Daemonize... */ RTProcDaemonizeUsingFork(false /* fNoChDir */, false /* fNoClose */, NULL /* pszPidfile */); /* Open the device */ hDevice = open(DEVICE_NAME, O_RDWR, 0); if (hDevice < 0) { fprintf(stderr, "Failed to open '%s'. errno=%d\n", DEVICE_NAME, errno); return errno; } /* Open the user device. */ hDeviceUsr = open(DEVICE_NAME_USR, O_RDWR, 0); if (hDeviceUsr < 0) { fprintf(stderr, "Failed to open '%s'. errno=%d\n", DEVICE_NAME_USR, errno); close(hDevice); return errno; } /* Mark the file handle close on exec. */ if ( fcntl(hDevice, F_SETFD, FD_CLOEXEC) != 0 || fcntl(hDeviceUsr, F_SETFD, FD_CLOEXEC) != 0) { fprintf(stderr, "Failed to set close on exec. errno=%d\n", errno); close(hDevice); close(hDeviceUsr); return errno; } /* Go to interruptible sleep for ~15 years... */ /* avoid > 2^31 for Year 2038 32-bit overflow (Solaris 10) */ sleep(500000000U); close(hDevice); close(hDeviceUsr); return 0; }
int main(int argc, char *argv[]) { int rc; int c; bool fDemonize = true; static char *szLogFileName = NULL; /* Parse command line */ while((c = getopt(argc, argv, "fvl:")) != -1) { switch(c) { case 'f': fDemonize = false; break; case 'v': g_cVerbosity++; break; case 'l': szLogFileName = RTStrDup(optarg); break; default : usage(argv[0]); } } /* No more arguments allowed */ if ((argc - optind) != 0) usage(argv[0]); if (fDemonize) { rc = RTProcDaemonizeUsingFork(true /* fNoChDir */, false /* fNoClose */, NULL); if (RT_FAILURE(rc)) { RTPrintf("failed to run into background\n"); return 1; } } rc = RTR3InitExe(argc, &argv, 0); if (RT_FAILURE(rc)) { RTPrintf("RTR3InitExe() failed: (%Rrc)\n", rc); return RTMsgInitFailure(rc); } rc = VbglR3Init(); if (RT_SUCCESS(rc)) { rc = vbclInitLogger(szLogFileName); if (RT_SUCCESS(rc)) { rc = vbclStartServices(); if (RT_SUCCESS(rc)) { vbclWait(); vbclStopServices(); } else { RTPrintf("failed to start services: (%Rrc)\n", rc); } vbclTermLogger(szLogFileName); } else { RTPrintf("failed to start logger: (%Rrc)\n", rc); } VbglR3Term(); } else { RTPrintf("failed to initialize guest library: (%Rrc)\n", rc); } return 0; }