// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Process etc.

package os

import (
	"syscall";
	"os";
	"unsafe";
)

var Args []string;	// provided by runtime
var Envs []string;	// provided by runtime


// Getuid returns the numeric user id of the caller.
func Getuid() int {
	return syscall.Getuid();
}

// Geteuid returns the numeric effective user id of the caller.
func Geteuid() int {
	return syscall.Geteuid();
}

// Getgid returns the numeric group id of the caller.
func Getgid() int {
	return syscall.Getgid();
}

// Getegid returns the numeric effective group id of the caller.
func Getegid() int {
	return syscall.Getegid();
}

// Getgroups returns a list of the numeric ids of groups that the caller belongs to.
func Getgroups() ([]int, os.Error) {
	gids, errno := syscall.Getgroups();
	return gids, NewSyscallError("getgroups", errno);
}

// Exit causes the current program to exit with the given status code.
// Conventionally, code zero indicates success, non-zero an error.
func Exit(code int) {
	syscall.Exit(code);
}

