QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1512|回复: 10

如何在glade中添加execl函数?

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

    现在的问题是每次编译后都成功,但是运行时有错误,请问有什么错误吗?
发表于 2005-8-15 16:59:51 | 显示全部楼层
是什么错误,是GTK发出的,还是那个脚本发出的?
回复

使用道具 举报

 楼主| 发表于 2005-8-15 20:00:18 | 显示全部楼层
大侠您好:
    编译成功,是运行后提示的,主窗口正常显示,在点击按钮执行shell脚本时提示"应用程序异常退出"错误,并关闭应用程序.是不是execl的参数不合理?
回复

使用道具 举报

 楼主| 发表于 2005-8-15 20:01:37 | 显示全部楼层
后台显示错误:invalid cast from `GtkAlignment' to `GtkLabel'
回复

使用道具 举报

 楼主| 发表于 2005-8-15 20:48:29 | 显示全部楼层
我的shell脚本应该没错误,我已经成功运行了.
大家快来帮帮我,谢谢
回复

使用道具 举报

 楼主| 发表于 2005-8-15 21:09:32 | 显示全部楼层
我找到错误所在了,是execl参数设置的不对.
应该是execl("/bin/bash","/bin/sh","/root/project/nessus",NULL);
回复

使用道具 举报

 楼主| 发表于 2005-8-15 21:14:27 | 显示全部楼层
哭, 还是不行,高手们快来帮帮我,execl哪个语句没错了,我在c语言中单独运行调试了,可以达到预期效果.可是在glade运行结果中还是提示"应用程序异常错误"
回复

使用道具 举报

发表于 2005-8-16 08:34:42 | 显示全部楼层
不运行脚本,看看GTK的程序有没有错误!
回复

使用道具 举报

 楼主| 发表于 2005-8-16 09:18:03 | 显示全部楼层
#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);
}
我把跟这部分功能相关的函数帖出来了,大家帮我看看,我检查了两天也不知道哪错了,麻烦大家了
回复

使用道具 举报

发表于 2005-8-16 09:38:33 | 显示全部楼层
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"); ///这行代码干吗?AddButton又不会返回BUTTON的。你的ADDBUTTON又没有返回BUTTON的地址!
回复

使用道具 举报

发表于 2005-8-19 20:13:54 | 显示全部楼层
execl("/bin/sh","sh","-c","/root/project/nessus");

这样试试?
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-5 13:49 , Processed in 0.047251 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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