LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 914|回复: 10

编译一个C有问题,帮忙看看

[复制链接]
发表于 2009-10-15 09:16:07 | 显示全部楼层 |阅读模式
#include <stdio.h>                                                                              
#include <fcntl.h>                                                                              
#include <linux/hdreg.h>                                                                        
                                                                                                
                                                                                                
int main(void)                                                                                   
{                                                                                                
int fd;                                                                                          
struct hd_driveid hdinfo;                                                                  
fd = open("/dev/hda" , O_RDONLY);
printf("%d   %p\n", fd, &hdinfo);                                                               
if (ioctl(fd , HDIO_GET_IDENTITY , &hdinfo))                                                     
printf("module:/%s,serialno:/%s\n" ,hdinfo.model,hdinfo.serial_no);                                
printf("\n");                                                                                    
return 0;                                                                                       
}                                                                                                
            
系统FC11 输出serialno时显示乱码!网上找到的获取硬盘ID的程序
发表于 2009-10-15 12:34:13 | 显示全部楼层
1.fedora11应该是 /dev/sda
2.应该用root执行

#include <stdio.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/hdreg.h>
#include <cstring>

int main(void)
{
   int fd;
   struct hd_driveid hdinfo;
   fd = open("/dev/sda" , O_RDONLY);
   printf("%d %p\n", fd, &hdinfo);
   if(ioctl(fd, HDIO_GET_IDENTITY , &hdinfo) == -1){
       perror("Found error when get hdinfo:");
   }
   else{
       printf("module:%s,serialno:%s\n" , hdinfo.model,hdinfo.serial_no);
   }
   printf("\n");
   return 0;
}

上述代码调试通过,只是显示有点不太好看~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-15 15:05:15 | 显示全部楼层
感谢楼上相助,但我机子编译出错,提示没有cstring这个文件!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-15 15:50:08 | 显示全部楼层
用G++编译,顺利通过,不过输出的是不是唯一值?如果是其他磁盘阵列阿或其他存储设备,该如何?
回复 支持 反对

使用道具 举报

发表于 2009-10-15 22:55:03 | 显示全部楼层
是不是唯一不了解,其他阵列……目前还没见过……汗~
回复 支持 反对

使用道具 举报

发表于 2009-10-17 01:06:24 | 显示全部楼层
磁盘阵列的话就不只sda了。
另外hd和sd就是串口SATA和并口IDE的区别,现在基本上都是串口的盘了。。。
回复 支持 反对

使用道具 举报

发表于 2009-10-17 01:07:26 | 显示全部楼层
想看自己有什么设备,去/dev/下找找就OK。。。话说我的U盘被识别成sdb。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-23 09:35:49 | 显示全部楼层
可不可以用python重写阿?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-23 16:01:13 | 显示全部楼层
想把这个C写成python的模块,该怎么写?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-23 16:44:59 | 显示全部楼层
按照写成模块的思路,在编译的过程出现问题,运行setup.py build的时候系统是用Gcc来编,但要用G++编才行,怎么办阿?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表