【C语言显示Linux系统参数】
在C语言中,可以通过调用Linux系统提供的API来获取和显示系统参数。以下是一些常见的系统参数及其获取方法:
1. 获取系统名称和版本
可以使用uname
函数来获取系统名称、版本等信息。
#include <stdio.h>
#include <sys/utsname.h>
int main() {
struct utsname sysinfo;
if (uname(&sysinfo) == -1) {
perror("uname");
return 1;
}
printf("系统名称: %s\n", sysinfo.sysname);
printf("节点名称: %s\n", sysinfo.nodename);
printf("发行版本: %s\n", sysinfo.release);
printf("系统版本: %s\n", sysinfo.version);
printf("硬件类型: %s\n", sysinfo.machine);
return 0;
}
2. 获取CPU信息
可以通过读取/proc/cpuinfo
文件来获取CPU信息。
#include <stdio.h>
int main() {
FILE *fp = fopen("/proc/cpuinfo", "r");
if (fp == NULL) {
perror("fopen");
return 1;
}
char line[256];
while (fgets(line, sizeof(line), fp)) {
printf("%s", line);
}
fclose(fp);
return 0;
}
3. 获取内存信息
可以通过读取/proc/meminfo
文件来获取内存信息。
#include <stdio.h>
int main() {
FILE *fp = fopen("/proc/meminfo", "r");
if (fp == NULL) {
perror("fopen");
return 1;
}
char line[256];
while (fgets(line, sizeof(line), fp)) {
printf("%s", line);
}
fclose(fp);
return 0;
}
4. 获取系统时间
可以使用time
函数获取系统时间。
#include <stdio.h>
#include <time.h>
int main() {
time_t rawtime;
struct tm *timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime);
printf("当前时间: %s", asctime(timeinfo));
return 0;
}
5. 获取系统负载
可以通过读取/proc/loadavg
文件来获取系统负载信息。
#include <stdio.h>
int main() {
FILE *fp = fopen("/proc/loadavg", "r");
if (fp == NULL) {
perror("fopen");
return 1;
}
char line[256];
if (fgets(line, sizeof(line), fp)) {
printf("系统负载: %s", line);
}
fclose(fp);
return 0;
}
6. 获取系统运行时间
可以通过读取/proc/uptime
文件来获取系统运行时间。
#include <stdio.h>
int main() {
FILE *fp = fopen("/proc/uptime", "r");
if (fp == NULL) {
perror("fopen");
return 1;
}
double uptime, idle_time;
fscanf(fp, "%lf %lf", &uptime, &idle_time);
printf("系统运行时间: %.2f 秒\n", uptime);
printf("空闲时间: %.2f 秒\n", idle_time);
fclose(fp);
return 0;
}
7. 获取网络接口信息
可以通过ioctl
函数和ifconfig
命令来获取网络接口信息。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <arpa/inet.h>
int main() {
int fd;
struct ifreq ifr;
fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
perror("socket");
return 1;
}
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
if (ioctl(fd, SIOCGIFADDR, &ifr) == 0) {
printf("IP 地址: %s\n", inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));
} else {
perror("ioctl");
}
close(fd);
return 0;
}
8. 获取磁盘信息
可以通过statvfs
函数获取磁盘使用情况。
#include <stdio.h>
#include <sys/statvfs.h>
int main() {
struct statvfs buf;
if (statvfs("/", &buf) == -1) {
perror("statvfs");
return 1;
}
printf("文件系统块大小: %lu\n", buf.f_bsize);
printf("总块数: %lu\n", buf.f_blocks);
printf("可用块数: %lu\n", buf.f_bfree);
printf("可用块数(非超级用户): %lu\n", buf.f_bavail);
printf("总文件节点数: %lu\n", buf.f_files);
printf("可用文件节点数: %lu\n", buf.f_ffree);
return 0;
}
这些代码片段展示了如何在C语言中获取和显示Linux系统的各种参数。你可以根据需要将这些代码组合在一起,或者进一步扩展它们以获取更多的系统信息。