QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1563|回复: 7

在glade中想实现点击按钮执行shell脚本,出错,大家快

[复制链接]
发表于 2005-8-15 21:32:42 | 显示全部楼层 |阅读模式
大家好:
  我想在glade中点击按钮从而执行一个shell脚本,shell脚本文件名是nessus,脚本的路径是/root/project/nessus,因此我在glade项目的callbacks.c文件中加入了以下命令.
#include <unistd.h> //添加头文件
void OpenNessus()
{
execl("/bin/bash","/bin/sh","/root/project/nessus",NULL);
}

gtk_signal_connect(GTK_OBJECT(button),
"clicked",
GTK_SIGNAL_FUNC(OpenNessus),
NULL);//按钮连接信号

现在的问题是每次编译后都成功,主窗口正常显示,但是在点击按钮执行shell脚本时提示"应用程序异常退出"错误,并关闭应用程序.后台显示错误:invalid cast from `GtkAlignment' to `GtkLabel'.shell脚本没错误,exec语句也正确,就是不知道到底哪出错了.
高手们快来帮帮我阿
发表于 2005-8-16 08:57:53 | 显示全部楼层
记得GTK_SIGNAL_FUNC需要的函数定义是
void func (gpointer* button, gpointer func_data)
第一个参数是触发者的指针
可能是这个缘故
回复

使用道具 举报

 楼主| 发表于 2005-8-16 09:09:43 | 显示全部楼层
大侠非常感谢您,我试过了,GTK_SIGNAL_FUNC的函数定义是:
void func(GtkWidget * ,gpointer);
重新定义了opennessus函数后,还是相同的错误,真恨不得把整个应用程序代码都贴上来
回复

使用道具 举报

 楼主| 发表于 2005-8-16 09:21:47 | 显示全部楼层
#ifdef fdef HAVE_CONFIG_H
# include <config.h>
#endif

#include <gnome.h>

#include "callbacks.h"
#include "interface.h"
#include "support.h"
#include <unistd.h>

void OpenNessus(GtkWidget * button,gpointer data)
{
execl("/bin/bash","/bin/sh","/root/project/nessus",NULL);
}

GtkWidget * AddButton(GtkWidget * box,const gchar * buttonText)
{
GtkWidget * button;
button=gtk_button_new_with_label(buttonText);
gtk_box_pack_start(GTK_BOX(box),button,FALSE,TRUE,0);

gtk_widget_show(button);

}

void
on_scan_clicked (GtkButton *button,
gpointer user_data)
{
GtkWidget * window1;
GtkWidget * box;

window1=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window1),320,200);
gtk_window_set_title(GTK_WINDOW(window1),"Scan Tool List");
gtk_container_border_width(GTK_CONTAINER(window1),5);

box=gtk_hbox_new(TRUE,5);
button=AddButton(box,"Nessus");

gtk_signal_connect(GTK_OBJECT(button),
"clicked",
GTK_SIGNAL_FUNC(OpenNessus),
NULL);

gtk_container_add(GTK_CONTAINER(window1),box);
gtk_widget_show(box);
gtk_widget_show(window1);
}
我把跟这部分功能相关的函数帖出来了,大家帮我看看,我检查了两天也不知道哪错了,麻烦大家了 Embarassed
回复

使用道具 举报

发表于 2005-8-16 09:25:06 | 显示全部楼层
要不尝试一下把execl去掉
我没试过在x程序里跑一个脚本 是不是由于脚本需要终端输出的缘故?
回复

使用道具 举报

发表于 2005-8-16 09:39:37 | 显示全部楼层
button=AddButton(box,"Nessus");   这行的问题吧,BUTTON的地址没有返回~
回复

使用道具 举报

 楼主| 发表于 2005-8-16 09:54:51 | 显示全部楼层
谢谢两位高手问题终于解决了,button的地址是没有返回,加上return button;就好了.
真得很谢谢kan的提醒指点
回复

使用道具 举报

发表于 2005-8-16 13:59:52 | 显示全部楼层
  

gtk+-2.4 就不建议使用 gtk_signal_connect 了。建议使用 g_signal_connect 替换它。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-5 13:44 , Processed in 0.055170 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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