2 // Mono.Posix/PosixEnvironment.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.
33 namespace Mono
.Posix
{
35 public sealed /* static */ class PosixEnvironment
37 private PosixEnvironment () {}
39 public static string CurrentDirectory
{
41 return PosixDirectory
.GetCurrentDirectory ();
44 PosixDirectory
.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 PosixMarshal
.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 PosixMarshal
.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 PosixMarshal
.ThrowExceptionForLastErrorIf (r
);
91 public static string UserName
{
92 get {return PosixUser.GetCurrentUserName();}
95 public static int CreateSession ()
97 return Syscall
.setsid ();
100 public static void SetProcessGroup ()
102 int r
= Syscall
.setpgrp ();
103 PosixMarshal
.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 PosixMarshal
.ThrowExceptionForLastError ();
116 uint[] groups
= new uint[ngroups
];
117 int r
= Syscall
.getgroups (groups
);
118 PosixMarshal
.ThrowExceptionForLastErrorIf (r
);
122 public static void SetSupplementaryGroups (uint[] list
)
124 int r
= Syscall
.setgroups (list
);
125 PosixMarshal
.ThrowExceptionForLastErrorIf (r
);