【C】代码中获取如 /proc 下的值

【C】代码中获取如 /proc 下的值

使用 popen

以获取 /proc/uptime 为例:

在终端中获取:

$ cat /proc/uptime
521373.84 4154516.97
$ 

在代码中使用 popen 获取1

不要使用 fscanf() 来读取 popen 打开的文件指针1
关于 fgets 的基本用法亦可参考我的另一篇 blog > [C] fgets() 用法测试

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
	FILE *fp = popen("cat /proc/uptime", "r");
	unsigned char buffer[256] = {'\0'};
	fgets(buffer, 255, fp);
	pclose(fp);
	printf("%s", buffer); // 注意,此时 buffer 含有换行符。

	/**
	 * 获取值到变量中
	 */
	float uptime = 0.00;
	sscanf(buffer, "%f", &uptime); // 只获取第一个 uptime 值。
	printf("uptime: %f", uptime);
	return 0;
}

上面代码中,

  1. 使用 pclose 来关闭 popen 打开的文件指针,而非 fclose2
  2. 使用 sscanf 来将 string 类型转化为 float。

同样也是使用 sscanf 将 string 类型转化为 int 值,以获得更好的安全性(避免代码崩溃)。3

一份使用 sscanf 转化 string to integer 的示例代码可以在下文 ? 找到

运行效果:

joseph@LINUX:C$ gcc get_proc_uptime.c 
joseph@LINUX:C$ ./a.out 
520327.93 1039065.77
uptime: 520327.937500
joseph@LINUX:C$

使用 sscanf 转化 string to integer 示例

int integer_num = 0;
sscanf(var_from_fgets_popen_fp, "%d", &integer_num);

如果是个“长整形”,可以考虑使用 strtol 来转换。

一个完善的彻底解决的方案暂时没有这个需求以及没有看到相关资料,如果有好的建议或意见欢迎在评论区指出。


  1. Stackoverflow: linux command executing by popen on C code ? ↩︎ ↩︎

  2. POPEN(3) Linux Programmer’s Manual ? ↩︎

  3. Stackoverflow: How to convert a string to integer in C? ?
    ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值