动态 版块 发帖 消息 我的
小绿叶技术博客
小绿叶技术博客
小绿叶技术Lv150   
c语言-kvm虚拟机管理案例     



#include <stdio.h>
#include <string.h>
// 1.输入和输出如打印字符, 2.各种字符和数组操作

#define Lengtha 30 
#define Lengthb 30
// 容器要大于 存放量,否则溢出

struct myIN 
{
  char name[Lengtha];
  char suzhi[Lengthb];
};
// 定义结构体 名字: myIN  成员: name 和 suzhi ,它们为数组 特征是 中括号,长度为 30 
// 作用:变量不用重复定义类型


void kvmlist(void *qstatus,void *qname)
{
// 定义函数,需要给参数才执行

    FILE *fp=NULL;
    char temp64[64]={0};
    char qlist[999]={0};
    memcpy(temp64,"virsh list --all",20);
// 定义指针变量 默认为空,类型是文件
// 定义两个数组变量初始为0
// memcpy 替换复制内容

    fp=popen(temp64,"r");
    fread(qlist, 999,1,fp );
    pclose(fp);
    printf(" \n %s \n",qlist);
// 由 popen 函数去执行 shell 命令获取虚拟机 
// 读取函数: 1.内存块指针; 2.读取每个元素的大小,字节;3.元素个数; 指针文件或流
// pclose 关闭  和 打印

    struct myIN dy[3]={
        {"rv1126","工程编译主机"},{"win2012","办公windos桌面"},{"www","开发网站"}
    };
// 结构体直接传值:数组dy  继承结构体 myIN ,有两个成员,数组两个元素对应成员

//---------- 结构体赋值 -----------#
    struct myIN *csp;
    csp = &dy;
    printf(" csp 结构体取出 dy 数据,结构体赋值。 目前只打印第一个名字:%s \n ", csp[0].name     );

// 结构体 -> 含义 重新赋值   
//    dy[1]->name = "0"; 
// 如果符号前是指针类型,那么用 -> 否则用 .

//------------------------
    for(int i=0;i<3;i++){
        printf("列出主机名称: %s  说明: %s\n", dy[i].name,dy[i].suzhi );
    }
// dy[i]->name 表示:i 是数数数组角标,结构体数组 第一组成员 中的name 的值

    printf("\n \n您需要控制主机:%s  状态为:%s \n 格式:virsh   start/shutdown  www \n", qname, qstatus);
    memcpy(temp64,"virsh ",10);

    strcat(temp64,qstatus);
    strcat(temp64,qname);

    printf("\n 复制字符串的结果为:%s \n",temp64);
    system(temp64);
}


qemu_img()
{
    char qcow2[99] = {0};
    char status[99] = {0};
    char qemuml[]={"qemu-img snapshot -"};
    FILE *fp=NULL;
    char qlist[999];

    printf("\n \n #----------- 镜像快照管理 ------------#  \n \
    请输入管理方式 和镜像 : l 查看  a 恢复  c 创建  d 删除 , 案例: l www.qcow2  \n");

    printf("请输入两个参数,用空格隔开: ");
    scanf("%s  %s", status , qcow2 );     // scanf  方式获取键盘输入
    printf("控制状态: %s 主机名称:%s 镜像字符长度: %d  \n",status,qcow2 );
// scanf 中的 %s 不能有逗号,否则无法接收完全

    strcat(qemuml,status);
    memcpy(qcow2,qemuml,strlen(qemuml));
    printf("操作的快照指令为:%s \n", qemuml);
// memcpy 替换复制到字符串前面,但是 本身字符被替换

    fp=popen(qemuml,"r");
    fread(qlist, 999,1,fp );
    pclose(fp);
    printf(" \n 查看当前镜像下的快照:\n  %s \n",qlist);


}






char main(int sl, char *sz[])
// 第一个变量是参数数量,第二个是指针数组,接收输入参数
{
    printf("程序本身名字也占一个参数位置 sz[0],总参数:  %d\n",sl);
    char a[Lengtha];
    char b[Lengtha];
    char c[Lengtha];
// 数组才能被数组赋值,此处是数组长度。角标是指针数组
    memcpy(a,sz[1],Lengthb);
    memcpy(b,sz[2],Lengthb);
    memcpy(c,sz[3],Lengthb);
// 定义变量 a b c d 为:数组第 1234 个元素的值

    printf("输入的第一个参数a : %s\n 输入的第二个参数b : %s \n  第三个参数: %s \n" ,a,b,c);

    char qstatus[20];
    char qname[20];

    memset(qname,' ',2);
    memset(qstatus,' ',2);


    strcat(qstatus,b);
    strcat(qname,c);

    printf("传递两个参数: qname: %s  ;    qstatus: %s \n \n", qname,qstatus); 
    kvmlist(qstatus,qname);
    qemu_img();
    return 0;
}






 1  已被阅读了180次  楼主 2022-12-12 17:13:23
回复列表

回复:c语言-kvm虚拟机管理案例

guest
登录之后更精彩~
Powered by HadSky 7.7.16
© 2015-2023 PuYueTian
您的IP:8.219.134.200,2023-02-01 15:20:21,Processed in 0.00837 second(s).
Powered by HadSky
小绿叶技术博客