LinuxSir.cn,穿越时空的Linuxsir!

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

下拉列表(Combo Box)中,下拉值的动态加载!

[复制链接]
发表于 2005-5-26 14:52:25 | 显示全部楼层 |阅读模式
1、在程序中一次性给下拉列表加载下拉值,显示成功:
    GList *glist = NULL;
    glist = g_list_append (glist, "AB");
    glist = g_list_append (glist, "CD");
    glist = g_list_append (glist, "EF");
    gtk_combo_set_popdown_strings (GTK_COMBO (combo1), glist);  


2、现在,想把所有Linux分区值做为下拉值:
   1)在终端中利用awk命令:  fdisk -l | awk  '/Linux/ { print $1}'
      显示结果为:/dev/hda7
                  /dev/hda8
      显示结果正确。
   2)可如何将上面两行记录动态性的加载到下拉列表中呢?请指点!


3、我曾试过的方法:
   1)利用awk查询获得相应分区值,再存入数组中,将数组的值赋它:
system("fdisk -l | awk  '/Linux/ {name[x++]=$1};END{for(i=0;i<NR;i++) glist = g_list_append (glist, name)}'");
   结果提示:表达式不能解析。
   2)利用buf值
   //定义并将其值读入buf中:
   FILE *fp;
        char *cmdstring = "fdisk -l | awk  '/Linux/ { print $1}'";
         
        char buf[50];

        if((fp = popen(cmdstring,"r")) == NULL)
                         exit(0);         

        while((fgets(buf,50,fp))!= NULL)
             {
                printf("%s",buf);
                   glist = g_list_append (glist, buf);
             }

        pclose(fp);
    //加载到下拉列表中
        glist = g_list_append (glist, buf);
  结果:
  下拉列表的选中行显示为:/dev/hda8(8的右上有个V,右下有个T;即V、T垂直排列在8后面);
   点击下拉列表的向下箭头,可看到还有两行/dev/hda8(8后无字母,可选中显示时则有字母);
   结果中无:/dev/hda7


问题如2:如何把所有Linux分区值做为下拉值,动态的加载到下拉列表中呢?谢谢!
发表于 2005-5-26 17:03:19 | 显示全部楼层
有个简单实用的方法是用 fdisk -l | awk '/Linux/ { print $1} >  out.txt
然后打开out.txt读入结果,呵呵~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-27 09:29:12 | 显示全部楼层
谢谢Linux_Lyb!>前少了一个单引号',
    应该为:fdisk -l | awk '/Linux/ { print $1}' > out.txt,
    否则得不到输出结果的,并会将提示符改为>的。
这种方法当然可以了:
    1、通过awk命令先重定向到一个文件中,
    2、再读文件的记录进行加载即可。
  可项目要求最好不要给磁盘写东西了,所以就很麻烦了。

谢谢你!期盼各位的指点!
回复 支持 反对

使用道具 举报

发表于 2005-5-27 10:44:43 | 显示全部楼层
请搜索论坛,谢谢!
回复 支持 反对

使用道具 举报

发表于 2005-5-27 10:53:16 | 显示全部楼层
是否可以考虑读/proc呢
回复 支持 反对

使用道具 举报

发表于 2005-5-27 12:21:30 | 显示全部楼层
还是直接给你个用管道的例子吧

[PHP]#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>

int main()
{
FILE *pipe = popen (" fdisk -l | awk '/Linux/ { print $1}'","r");
char buf[255];

        if (pipe == NULL) {
                printf ("pipe error!\n");
                exit(1);
        }

        while (fgets(buf,sizeof(buf)-1,pipe)) {
                printf ("-> %s",buf);
        }
        pclose(pipe);
        exit(0);
}[/PHP]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-30 09:06:12 | 显示全部楼层
谢谢各位,周五已搞定了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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