linux下怎么用c获取硬盘物理序列号

作者&投稿:于牵 (若有异议请与网页底部的电邮联系)
在Linux下用c编程怎么获取网卡序列号和硬盘序列号~

其中wifi-name为无线网卡的名字,比如网卡eth0就是系统默认的网卡名字,

system(执行shell命令)相关函数fork,execve,waitpid,popen表头文件#include定义函数intsystem(constchar*string);函数说明system()会调用fork()产生子进程,由子进程来调用/bin/sh-cstring来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD信号会被暂时搁置,SIGINT和SIGQUIT信号则会被忽略。返回值如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为system()调用/bin/sh失败所返回的127,因此最好能再检查errno来确认执行成功。附加说明在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题。

1、在Linux系统中通过C语言获取硬盘序列号,可以借助于ioctl()函数,该函数原型如下:

int ioctl(int fd, unsigned long request, ...);
ioctl的第一个参数是文件标识符,用open()函数打开设备时获取。
ioctl第二个参数为用于获得指定文件描述符的标志号,获取硬盘序列号,一般指明为HDIO_GET_IDENTITY。
ioctl的第三个参数为一些辅助参数,要获取硬盘序列号,需要借助于struct hd_driveid结构体来保存硬盘信息 ,该结构体在Linux/hdreg.h中,struct hd_driveid的声明如下
struct hd_driveid {
unsigned short    config;        / lots of obsolete bit flags */
unsigned short    cyls;        /* Obsolete, "physical" cyls */
unsigned short    reserved2;    /* reserved (word 2) */
unsigned short    heads;        /* Obsolete, "physical" heads */
unsigned short    track_bytes;    /* unformatted bytes per track */
unsigned short    sector_bytes;    /* unformatted bytes per sector */
unsigned short    sectors;    /* Obsolete, "physical" sectors per track */
unsigned short    vendor0;    /* vendor unique */
unsigned short    vendor1;    /* vendor unique */
unsigned short    vendor2;    /* Retired vendor unique */
unsigned char    serial_no[20];    /* 0 = not_specified */
unsigned short    buf_type;    /* Retired */
unsigned short    buf_size;    /* Retired, 512 byte increments
* 0 = not_specified
*/
……
};


2、源代码如下

#include <stdio.h>
//ioctl()的声明头文件
#include <sys/ioctl.h>
//硬盘参数头文件, hd_driveid结构声明头文件
#include <linux/hdreg.h>
//文件控制头文件
#include <sys/fcntl.h>
int main()
{
   //用于保存系统返回的硬盘数据信息
   struct hd_driveid id;
   //这里以第一块硬盘为例,用户可自行修改
   //用open函数打开获取文件标识符,类似于windows下的句柄
   int fd = open("/dev/sda", O_RDONLY|O_NONBLOCK);
   //失败返回 
   if (fd < 0) {
     perror("/dev/sda");
     return 1; }
    //调用ioctl()
    if(!ioctl(fd, HDIO_GET_IDENTITY, &id))
     {
       printf("Serial Number=%s
",id.serial_no);
     }
    return 0;
}

编译完成后,执行效果如下:



linux下可以使用hdparm命令查看硬盘的信息。
你可以在C语言里面,调用hdparm,并获取其输出信息即可。
也可以查找hdparm程序的源代码,把查找序列号的代码加进来。


linux怎么运行c程序
1、打开linux系统,在linux的桌面的空白处右击。2、在弹出的下拉选项里,点击打开终端。3、在终端窗口中创建一个文件并命名为test.c。在终端输入touch test.c打开。4、在终端中输入vim test.c打开这个文件并编写代码。5、在终端中输入gcc test.cgcc编译源文件。6、在a.out文件的目录下在终端里输入....

linux执行c文件linux执行c文件
1、进入linux系统,创建C文件“vimtest.c”同时进入vim编辑界面,也可以利用指令“touchtest.c”创建后,然后“vimtest.c”进入vim编辑界面。2、vim编辑界面,由“ESC”建来切换三种模式,一般模式:在Linux终端中输入“vim文件名”就进入了一般模式,但不能输入文字。编辑模式:在一般模式下按i就会进入...

linux如何运行c文件linux如何运行
linux如何暂停?linux停止命令方法一终止当前正在执行的某个命令最快的方法是按下组合键“Ctrl+C”。这个方法只有在用户能够从某个虚拟控制台上控制这个程序的时候才奏效。linux停止命令方法二终止某个出错程序的另外一个办法是kill(杀)掉它的进程。请按照下面的方法进行操作:输入“ps”命令获取进程的PID...

linux怎么运行c程序
printf("Hello,Linux.\\n");exit(0);} 将源文件保存为hello.c,开始进行编译 gcc -o hello hello.c 编译成功完成后,在当前路径下,生成一个名为hello的文件,然后执行 .\/hello 在屏幕上,你将会看到打印结果:Hello,Linux.说明:在默认情况下,编译成功完成后,会在当前路径下,生成一个名为a.out的文...

在Linux系统中,如何运行一个C语言程序?
1、打开kali linux的终端。创建一个文件并命名为test.c。在终端输入:touch test.c。2、可以看到已经生成了一个后缀为test.c的源文件。然后用vim工具打开这个文件并编写代码。在终端中输入:vim test.c或者gvim test.c打开这个文件并编写代码。3、编写完了这个代码。现在开始编译源文件。在终端中输入:...

到底怎么在Linux里编写c程序啊?
在linux下通常使用gedit或vim直接编写.c程序,然后通过gcc指令编译。以Ubuntu系统为例,详细过程如下:1、进入桌面Temp文件夹 2、右键新建空白文件 3、将文件命名为hello.c 4、进入hello.c,开始编写代码(默认gedit为编辑器)5、编写代码,保存退出 6、点击右列“终端”,或者直接Ctrl+Alt+T通过快捷...

怎样学习在linux操作系统下用C语言编程
Linux下C语言编程基础知识:1.源程序的编译 在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 下面我们以一个实例来说明如何使用gcc编译器. 假设我们有下面一个非常简单的源程序(hello.c): int main(int argc,char **argv) { printf("Hello Linuxn"); } 要编译这个程序,我们只要在命令行...

Linux中,运行一个C语言程序如何运行
在Linux中,可以使用gcc编译器编译C语言程序,生成可执行文件,并最终执行。具体步骤如下:1、编译。由.c文件生成.o文件,写作:gcc a.c -o a.o -c这个命令可以将a.c编译成a.o。如果存在多个文件,可以逐个编译,即a.c b.c...生成a.o b.o...等。2、链接。由.o文件生成可执行文件,...

Linux的终端怎么运行C语言
1、先在你要实现C程序的目录下建立一个C程序,如:先进入要实现C的目录cd \/home 然后mkdir os(自己取的文件名)2、使用vi命令编译你的C程序。如:vi 100.c(自己取的C文件名) ,按 i 键进入编辑命令,接下来就是编辑了,输完之后,按ESC,然后按shift+冒号,提示为冒号,输入wq(保存并退出...

在linux虚拟机中怎么用c语言编译输出"hellolinux"。。。求详细过程...
1、编译生成的执行程序,例:gcc -W hello.c -o hello 2、执行生成的执行程序,例: chmod +x hello; .\/hello 3、编写源代码:include <stdio.h> int main(){ printf("hellolinux\\r\\n");return 0;}

浏阳市17269219388: linux下怎么用c获取硬盘物理序列号 -
步绿肿节: 1、在Linux系统中通过C语言获取硬盘序列号,可以借助于ioctl()函数,该函数原型如下:int ioctl(int fd, unsigned long request, ...);ioctl的第一个参数是文件标识符,用open()函数打开设备时获取. ioctl第二个参数为用于获得指定文件描述...

浏阳市17269219388: Linux下怎么获得硬盘序列号 -
步绿肿节: Linux查看硬盘序列号的命令是:hdparm -i /dev/sda,若该用户没有执行该命令的权限,可以加sudo 提升权限.-i参数用于显示驱动器的基本信息./dev/sda为要查看的硬盘.可以使用fdisk -l命令查看硬盘名. hdparm参数说明: -a<快取分区> 设...

浏阳市17269219388: Linux下如何用C语言获取硬盘使用情况 -
步绿肿节: system(执行shell命令)相关函数fork,execve,waitpid,popen表头文件#include定义函数intsystem(constchar*string);函数说明system()会调用fork()产生子进程,由子进程来调用/bin/sh-cstring来执行参数string字符串所代表的命令,此命令执...

浏阳市17269219388: 我要用c编写程序读写磁盘,在linux中磁盘为文件,怎样用c语言获取磁盘的文件描述符,然后对磁盘进行读写? -
步绿肿节: linux下面的概念是一切皆文件.所以没有像c盘d盘这样的东西,有的只是各种各样的文件夹和文件.要读一个linux下面的文件很简单,命令pwd可以得到当前路径,然后路径接上你打开的文件名就可以知道这个文件的详细路径了.直接open就可以了.

浏阳市17269219388: linux系统下,C++编程获得硬盘及主板序列号?执行的时候不要加sudo -
步绿肿节: 既然是sudo才能执行该命令,说明这些命令是只有root用户才能执行的.因此,执行代码要加到root用户下,即:属主改为root 属性为755, 所有用户都要执行权限

浏阳市17269219388: 如何让linux分区编号按硬盘物理顺序排列 -
步绿肿节: Linux的分区编号是按分区生成的先后顺序编排的,而不是按其物理顺序排列的.比如,你中途删除了某个分区,然后新建了分区,那么新建的分区就排到了原来分区的最后面. 至于Linux下有没有方法更改分区排序,我也不知道.但是,比较费时的办法就是删除所有的分区,然后重建分区是可以达到目的的,只是这样数据就全没了.

浏阳市17269219388: 怎样程序实现获取Linux下的硬件信息 -
步绿肿节: C语言有一个system函数(在头中,C++则为头),可以用来调用终端命令.原型如下: int system(const char *cmdline /* 命令字符串 */);例如,Linux系统中,调用system("ls -la");将输出当前目录下的所有文件详细信息.

浏阳市17269219388: 硬盘在linux下的顺序如何计算? -
步绿肿节: 名称前两个字表示硬盘类型:IDE-> hd; SCSI -> sd.第三个字母由硬盘位置决定:第一个硬盘为a,第二个为b,等等.第四个字母由磁盘如何分区决定:四个主分区分别指定为1、2、3、4.第一个生成的逻辑盘在5,即使只有一个主分区.

浏阳市17269219388: linux下java怎么获取CPU和硬盘序列号 -
步绿肿节: JDK 目录 jdk1.6.0_21\demo\management\MemoryMonitor 位置 jar demo源码自参考

浏阳市17269219388: python如何获取硬盘的物理序列号 -
步绿肿节: 这种语言重在嵌入,你还要借助C语言等其他语言生成识别模块,嵌入后运行.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网