mirror of
https://bitbucket.org/anguist/ntpa
synced 2025-10-05 18:41:13 +00:00
80 lines
3.1 KiB
C#
80 lines
3.1 KiB
C#
//
|
|
// Main.cs
|
|
//
|
|
// Author:
|
|
// Carsten Sonne Larsen <cs@innolan.dk>
|
|
//
|
|
// Copyright (c) 2013 Carsten Sonne Larsen
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
// THE SOFTWARE.
|
|
using System.Runtime.InteropServices;
|
|
using Ntp.Analyzer.Process;
|
|
using System.Text;
|
|
using System;
|
|
|
|
namespace Ntp.Analyzer.Cli
|
|
{
|
|
/// <summary>
|
|
/// Entry point for CLI application.
|
|
/// </summary>
|
|
public static class MainClass
|
|
{
|
|
[DllImport("libc")]
|
|
private static extern int getpid ();
|
|
|
|
[DllImport ("libc")] // Linux
|
|
private static extern int prctl (int option, byte[] arg2, IntPtr arg3, IntPtr arg4, IntPtr arg5);
|
|
|
|
[DllImport ("libc")] // BSD
|
|
private static extern void setproctitle (byte[] fmt, byte[] str_arg);
|
|
|
|
/// <summary>
|
|
/// This is from http://abock.org/2006/02/09/changing-process-name-in-mono/
|
|
/// </summary>
|
|
/// <param name="name">Name.</param>
|
|
private static void SetPosixProcessName (string name)
|
|
{
|
|
try {
|
|
if (prctl (15 /* PR_SET_NAME */, Encoding.ASCII.GetBytes (name + "\0"), IntPtr.Zero, IntPtr.Zero, IntPtr.Zero) != 0) {
|
|
throw new ApplicationException ("Error setting process name: " + Mono.Unix.Native.Stdlib.GetLastError ());
|
|
}
|
|
} catch (EntryPointNotFoundException) {
|
|
// Not every BSD has setproctitle
|
|
try {
|
|
setproctitle (Encoding.ASCII.GetBytes ("%s\0"), Encoding.ASCII.GetBytes (name + "\0"));
|
|
} catch (EntryPointNotFoundException) {
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// The entry point of the program, where the program control starts and ends.
|
|
/// </summary>
|
|
/// <param name="args">The command-line arguments.</param>
|
|
public static void Main (string[] args)
|
|
{
|
|
string configFile = (args.Length > 0) ? args [0] : "/etc/ntpa.conf";
|
|
int pid = getpid ();
|
|
|
|
Main main = new Main (configFile, pid);
|
|
main.Start ();
|
|
}
|
|
}
|
|
}
|