Home » Linux » Linux Basics » How to Get Linux Uptime in C Program: Step-by-Step Guide

How to Get Linux Uptime in C Program: Step-by-Step Guide

In Linux, system uptime refers to the total time a system has been running since it was last booted. Knowing the uptime is helpful for monitoring system performance, troubleshooting, or simply checking how long a server has been operational. While Linux provides the uptime command to easily check this information, you can also retrieve uptime programmatically in C.

In this blog post, we’ll learn how to write a C program to get the uptime of a Linux system by reading from the /proc/uptime file, which stores this information.

How Uptime is Stored in Linux

In Linux systems, uptime is stored in the /proc/uptime file. This file contains two numbers:

  • The first number is the total uptime in seconds.
  • The second number represents the amount of time the system has spent in idle mode.

Here’s a quick example of how the /proc/uptime file looks:

12345.67 5432.10

In this example, the system has been up for 12,345.67 seconds, and 5,432.10 seconds of that time were spent idle.

Step-by-Step C Program to Get Linux Uptime

Here’s a simple C program that reads the uptime from the /proc/uptime file and prints it in a more readable format.

#include <stdio.h>

int main() {
    // File pointer to open the uptime file
    FILE *uptimeFile;
    // Variable to store the uptime in seconds
    double uptimeSeconds;

    // Open the /proc/uptime file in read mode
    uptimeFile = fopen("/proc/uptime", "r");

    // Check if the file was successfully opened
    if (uptimeFile == NULL) {
        printf("Error: Could not open /proc/uptime\n");
        return 1;
    }

    // Read the first number (uptime in seconds) from the file
    fscanf(uptimeFile, "%lf", &uptimeSeconds);

    // Close the file
    fclose(uptimeFile);

    // Calculate hours, minutes, and seconds
    int hours = (int)uptimeSeconds / 3600;
    int minutes = ((int)uptimeSeconds % 3600) / 60;
    int seconds = (int)uptimeSeconds % 60;

    // Print the uptime in a more human-readable format
    printf("System Uptime: %d hours, %d minutes, and %d seconds\n", hours, minutes, seconds);

    return 0;
}

Explanation of the Code

  1. Opening /proc/uptime: We use the fopen() function to open the /proc/uptime file in read mode. This file contains the system’s uptime and idle time in seconds.
  2. Reading Uptime: The fscanf() function is used to read the first number from /proc/uptime, which represents the total system uptime in seconds. We store this value in a double variable because the uptime can include decimal points.
  3. Calculating Hours, Minutes, and Seconds: The total uptime is converted into hours, minutes, and seconds for easier interpretation.
  4. Printing the Uptime: Finally, the program prints the uptime in a user-friendly format, showing the number of hours, minutes, and seconds.

Example Output

When you run the program, you may get an output like this:

System Uptime: 3 hours, 15 minutes, and 42 seconds

This output tells you that the system has been running for 3 hours, 15 minutes, and 42 seconds.

Why Use C to Check Uptime?

While you can easily check uptime with the uptime command in Linux, there are reasons why you might want to retrieve this information in a C program:

  • Automated System Monitoring: If you are building a custom system monitoring tool, this is a lightweight way to include uptime information.
  • Learning Purpose: Reading system files programmatically is a great way to understand Linux internals and learn C file handling.
  • Embedding in Applications: You may want to embed uptime reporting within an application that needs to monitor or report system performance.

Handling Errors

In the example code, we use error checking to ensure the /proc/uptime file is successfully opened. If the file cannot be opened (for example, if the program is run on a non-Linux system), an error message is printed, and the program exits.

You can extend this program to handle more sophisticated error cases or even retrieve idle time information by reading the second number from /proc/uptime.

Reading Linux system uptime programmatically using C is a simple but useful technique for both learning and practical application. By accessing the /proc/uptime file, you can retrieve detailed uptime information and format it in any way you need. Whether for building custom monitoring tools or just for learning C and Linux internals, this technique provides a great hands-on experience.

Leave a Comment