1
0
mirror of https://bitbucket.org/anguist/ntpa synced 2025-10-05 18:41:13 +00:00
Files
ntpa/Ntp.Analyzer.Cli/Main.cs
2016-03-11 23:22:40 +01:00

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 ();
}
}
}