firstworks Programming with Rudiments using the sys class

Using the sys class

- Introduction
- Getting System Information
- Reboot
- Shutdown
- Halt

### Introduction

The sys class provides methods for getting information about the operating system and controlling the state of the operating system.

### Getting System Information

In this example, various bits of system information are printed out.

> #include <rudiments/sys.h>
> #include <rudiments/charstring.h>
> #include <rudiments/stdio.h>
> int main(int argc, const char **argv) {
> char *osname=sys::getOperatingSystemName();
> stdoutput.printf("OS Name : %s\n",osname);
> delete[] osname;
> char *release=sys::getOperatingSystemRelease();
> stdoutput.printf("OS Release : %s\n",release);
> delete[] release;
> char *version=sys::getOperatingSystemVersion();
> stdoutput.printf("OS Version : %s\n",version);
> delete[] version;
> char *arch=sys::getOperatingSystemArchitecture();
> stdoutput.printf("OS Arch : %s\n",arch);
> delete[] arch;
> char *hostname=sys::getHostName();
> stdoutput.printf("Host Name : %s\n",hostname);
> delete[] hostname;
> double onemin;
> double fivemin;
> double fifteenmin;
> sys::getLoadAverages(&onemin,&fivemin,&fifteenmin);
> stdoutput.printf("Load Averages : %0.2f %0.2f %0.2f\n",
> onemin,fivemin,fifteenmin);
> stdoutput.printf("Max Cmd Line Arg Length"
> " : %lld\n",
> sys::getMaxCommandLineArgumentLength());
> stdoutput.printf("Max Processes Per User"
> " : %lld\n",
> sys::getMaxProcessesPerUser());
> stdoutput.printf("Max Host Name Length"
> " : %lld\n",
> sys::getMaxHostNameLength());
> stdoutput.printf("Max Login Name Length"
> " : %lld\n",
> sys::getMaxLoginNameLength());
> stdoutput.printf("Clock Ticks Per Second"
> " : %lld\n",
> sys::getClockTicksPerSecond());
> stdoutput.printf("Max Open Files Per Process"
> " : %lld\n",
> sys::getMaxOpenFilesPerProcess());
> stdoutput.printf("Page Size"
> " : %lld\n",
> sys::getPageSize());
> stdoutput.printf("Allocation Granularity"
> " : %lld\n",
> sys::getAllocationGranularity());
> stdoutput.printf("Max Open Streams Per Process"
> " : %lld\n",
> sys::getMaxOpenStreamsPerProcess());
> stdoutput.printf("Max Symlink Loops"
> " : %lld\n",
> sys::getMaxSymlinkLoops());
> stdoutput.printf("Max Terminal Device Name Length"
> " : %lld\n",
> sys::getMaxTerminalDeviceNameLength());
> stdoutput.printf("Max Timezone Name Length"
> " : %lld\n",
> sys::getMaxTimezoneNameLength());
> stdoutput.printf("Max Line Length"
> " : %lld\n",
> sys::getMaxLineLength());
> stdoutput.printf("Physical Page Count"
> " : %lld\n",
> sys::getPhysicalPageCount());
> stdoutput.printf("Available Physical Page Count"
> " : %lld\n",
> sys::getAvailablePhysicalPageCount());
> stdoutput.printf("Processor Count"
> " : %lld\n",
> sys::getProcessorCount());
> stdoutput.printf("Max Processor Count"
> " : %lld\n",
> sys::getMaxProcessorCount());
> stdoutput.printf("Processors Online"
> " : %lld\n",
> sys::getProcessorsOnline());
> stdoutput.printf("Max Supplemental Groups Per User"
> " : %lld\n",
> sys::getMaxSupplementalGroupsPerUser());
> stdoutput.printf("Max Delay Timer Expirations"
> " : %lld\n",
> sys::getMaxDelayTimerExpirations());
> stdoutput.printf("Max Realtime Signals"
> " : %lld\n",
> sys::getMaxRealtimeSignals());
> stdoutput.printf("Max Sempahores Per Process"
> " : %lld\n",
> sys::getMaxSemaphoresPerProcess());
> stdoutput.printf("Max Semaphore Value"
> " : %lld\n",
> sys::getMaxSemaphoreValue());
> stdoutput.printf("Max Signal Queue Length"
> " : %lld\n",
> sys::getMaxSignalQueueLength());
> stdoutput.printf("Max Timers Per Process"
> " : %lld\n",
> sys::getMaxTimersPerProcess());
> stdoutput.printf("Suggested Group Entry Buffer Size"
> " : %lld\n",
> sys::getSuggestedGroupEntryBufferSize());
> stdoutput.printf("Suggested Passwd Entry Buffer Size"
> " : %lld\n",
> sys::getSuggestedPasswordEntryBufferSize());
> stdoutput.printf("Min Thread Stack Size"
> " : %lld\n",
> sys::getMinThreadStackSize());
> stdoutput.printf("Max Threads Per Process"
> " : %lld\n",
> sys::getMaxThreadsPerProcess());
> stdoutput.printf("Thread Destructor Iterations"
> " : %lld\n",
> sys::getThreadDestructorIterations());
> stdoutput.printf("Max Thread Keys"
> " : %lld\n",
> sys::getMaxThreadKeys());
> stdoutput.printf("Max At-Exit Functions"
> " : %lld\n",
> sys::getMaxAtExitFunctions());
> stdoutput.printf("CPUSet Size"
> " : %lld\n",
> sys::getCpuSetSize());
> stdoutput.printf("Max Password Length"
> " : %lld\n",
> sys::getMaxPasswordLength());
> stdoutput.printf("Max Log Name Length"
> " : %lld\n",
> sys::getMaxLogNameLength());
> stdoutput.printf("Max Process ID"
> " : %lld\n",
> sys::getMaxProcessId());
> stdoutput.printf("Directory Separator"
> " : %c\n",
> sys::getDirectorySeparator());
> }

Note that not all systems support every piece of information. If a piece of information is unsupported, then a -1 is returned.

### Reboot

This example reboots the system, when run as root or Administrator.

> #include <rudiments/sys.h>
> #include <rudiments/error.h>
> #include <rudiments/stdio.h>
> int main(int argc, const char **argv) {
> if (!sys::reboot()) {
> char *err=error::getErrorString();
> stdoutput.printf("reboot failed: %s\n",err);
> delete[] err;
> }
> }

### Shutdown

This example performs a graceful system shutdown, when run as root or Administrator.

> #include <rudiments/sys.h>
> #include <rudiments/error.h>
> #include <rudiments/stdio.h>
> int main(int argc, const char **argv) {
> if (!sys::shutDown()) {
> char *err=error::getErrorString();
> stdoutput.printf("shutdown failed: %s\n",err);
> delete[] err;
> }
> }

### Halt

This example performs a less-graceful system halt, when run as root or Administrator.

> #include <rudiments/sys.h>
> #include <rudiments/error.h>
> #include <rudiments/stdio.h>
> int main(int argc, const char **argv) {
> if (!sys::halt()) {
> char *err=error::getErrorString();
> stdoutput.printf("halt failed: %s\n",err);
> delete[] err;
> }
> }