当前时区 GMT+8, 现在时间是 2008-9-6 02:59 游客: 注册 登录 仅登录论坛 | 搜索 帮助
标题: 问个读文件的问题
ruru605
新手上路
Rank: 1



UID 233116
精华 0
积分 13
帖子 5
阅读权限 10
注册 2006-12-11
状态 离线
发表于 2006-12-23 02:27  资料  短消息  加为好友 
问个读文件的问题

请教:
    我知道用cat /proc/cpuinfo可以看到cpu的所有信息,但是如果我想用C或者C++语言写个程序运行返回其中cache size或者model name的值应该如何做呢?

十分感谢
提前祝大家圣诞快乐

顶部
mozilla
公社特别嘉宾
Rank: 10Rank: 10Rank: 10


UID 315
精华 7
积分 17883
帖子 7268
阅读权限 120
注册 2002-7-1
来自 China
状态 离线
发表于 2006-12-23 10:28  资料  短消息  加为好友  ICQ 状态
cpuid之类的指令可以取这些信息吧
你可以看看内核里是怎么实现的

顶部
loveccy
中级会员
Rank: 3Rank: 3



UID 38841
精华 0
积分 773
帖子 333
阅读权限 30
注册 2003-5-21
来自 China
状态 离线
发表于 2006-12-23 13:17  资料  短消息  加为好友 
fopen
fread
strstr
sscanf

这样不是很简单吗?不用看内核里是怎么做的吧。
而且用户程序不能像内核那样吧,直接跟机器打交道。

顶部
ruru605
新手上路
Rank: 1



UID 233116
精华 0
积分 13
帖子 5
阅读权限 10
注册 2006-12-11
状态 离线
发表于 2006-12-24 01:03  资料  短消息  加为好友 
谢谢楼上,用楼上的意见写的代码,希望指点:
#include <string.h>
#include <stdio.h>
main()
{

      FILE *fp;
      char buffer[1024*5];
      size_t bytesRead;
      char *match;
      char model_name[40];

      fp = fopen("/proc/cpuinfo","r");
      if (fp == 0)
          {
         printf("open /proc/cpuinfo file error\n");
         return 0;
      }

       bytesRead = fread(buffer, 1, sizeof(buffer),fp);

       fclose(fp);
       if (bytesRead == 0 || bytesRead == sizeof(buffer))
           {
       printf("readBytes NULL OR large than buffer \n");
       return 0;
       }
       buffer[bytesRead] = '\0';

       match = strstr (buffer, "model name");
       if (match == NULL)
           {
       printf("match error\n");
       return 0;
       }
            sscanf (match ,"model name : %50[^\n]", &model_name);
        printf( "model name :%s\n",model_name);

                return 0;
}

顶部
ruru605
新手上路
Rank: 1



UID 233116
精华 0
积分 13
帖子 5
阅读权限 10
注册 2006-12-11
状态 离线
发表于 2006-12-24 01:04  资料  短消息  加为好友 
其中感觉sscanf这个函数挺麻烦的

顶部
loveccy
中级会员
Rank: 3Rank: 3



UID 38841
精华 0
积分 773
帖子 333
阅读权限 30
注册 2003-5-21
来自 China
状态 离线
发表于 2006-12-24 11:55  资料  短消息  加为好友 
:neutral: 指点我可不敢。两年多以前我就买了 ``Kernel Projects for Linux'' ,信誓旦旦地说,又学英语又学 Linux ,这世界太美好了……现在我连第五个实验都没看完呢,真正做了的就是前两个……不过英语倒真是多亏了 Linux 啊,我从没抱着课本和词典溜达过。

那个 sscanf ,我想的也是用 %[^\n] 。你要是有更简单的办法了就告诉我一声啊。

char model_name[40]; ──这小了点儿吧?

顶部
 


Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
清除 Cookies - 联系我们 - 中国Linux公社 - WAP