2 // Mono.Unix/UnixEnvironment.cs
5 // Jonathan Pryor (jonpryor@vt.edu)
7 // (C) 2004 Jonathan Pryor
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35 public sealed /* static */ class UnixEnvironment
37 private UnixEnvironment () {}
39 public static string CurrentDirectory {
41 return UnixDirectory.GetCurrentDirectory ();
44 UnixDirectory.SetCurrentDirectory (value);
48 public static string MachineName {
50 StringBuilder buf = new StringBuilder (8);
55 r = Syscall.gethostname (buf);
56 } while (r == (-1) && ((e = Syscall.GetLastError()) == Error.EINVAL) ||
57 (e == Error.ENAMETOOLONG));
59 UnixMarshal.ThrowExceptionForLastError ();
60 return buf.ToString ();
63 Syscall.sethostname (value);
67 public static long GetConfigurationValue (SysConf name)
69 long r = Syscall.sysconf (name);
70 if (r == -1 && Syscall.GetLastError() == Error.EINVAL)
71 UnixMarshal.ThrowExceptionForLastError ();
75 public static string GetConfigurationString (ConfStr name)
77 ulong len = Syscall.confstr (name, null, 0);
80 StringBuilder buf = new StringBuilder ((int) len+1);
81 len = Syscall.confstr (name, buf, len);
82 return buf.ToString ();
85 public static void SetNiceValue (int inc)
87 int r = Syscall.nice (inc);
88 UnixMarshal.ThrowExceptionForLastErrorIf (r);
91 public static string UserName {
92 get {return UnixUser.GetCurrentUserName();}
95 public static int CreateSession ()
97 return Syscall.setsid ();
100 public static void SetProcessGroup ()
102 int r = Syscall.setpgrp ();
103 UnixMarshal.ThrowExceptionForLastErrorIf (r);
106 public static int GetProcessGroup ()
108 return Syscall.getpgrp ();
111 public static uint[] GetSupplementaryGroups ()
113 int ngroups = Syscall.getgroups (0, new uint[]{});
115 UnixMarshal.ThrowExceptionForLastError ();
116 uint[] groups = new uint[ngroups];
117 int r = Syscall.getgroups (groups);
118 UnixMarshal.ThrowExceptionForLastErrorIf (r);
122 public static void SetSupplementaryGroups (uint[] list)
124 int r = Syscall.setgroups (list);
125 UnixMarshal.ThrowExceptionForLastErrorIf (r);