在脚本的早期,我看到了:
exec 3>&2
Run Code Online (Sandbox Code Playgroud)
然后:
{ $app $conf_file &>$app_log_file & } 1>&3 2>&1
Run Code Online (Sandbox Code Playgroud)
我对此的理解看起来像这样:
33输出重定向到stderrstdout到fd 3,然后重定向stderr到stdout这不是某种循环的疯狂吗?3> stderr> stdout> 3>等?
我特别关注这一行的意图/含义,因为我想开始使用这个脚本运行一些应用程序valgrind.我希望看到valgrind的输出穿插了应用程序的日志语句,所以我希望stderr上面的混乱行捕获默认输出.然而,在导致我想要使用的一些崩溃中valgrind,我已经看到glibc错误直接输出到终端,而不是在应用程序的日志文件中捕获.
那么,问题是:那条执行线到底是做什么的?它捕获了stderr吗?如果是这样,为什么当应用程序崩溃时我在命令行上看到glibc输出?如果没有,我应该如何改变它来实现这一目标?
以下代码来自于GTK + Development的基础 9-11 .通过本书,我一直在尝试迁移任何特定于GTK2的东西(或任何折旧的代码),以了解当前的相关内容.也就是说,这在编译时产生了很多警告.
#define NUM_ENTRIES 13
static GtkActionEntry entries[] =
{
{ "File", NULL, "_File", NULL, NULL, NULL },
{ "Open", GTK_STOCK_OPEN, NULL, NULL, "Open an existing file", G_CALLBACK(open) },
{ "Save", GTK_STOCK_SAVE, NULL, NULL, "Save the document to a file", G_CALLBACK(save) },
{ "Quit", GTK_STOCK_QUIT, NULL, NULL, "Quit the application", G_CALLBACK(quit) },
{ "Edit", NULL, "_Edit", NULL, NULL, NULL },
{ "Cut", GTK_STOCK_CUT, NULL, NULL, "Cut the selection to the clipboard", G_CALLBACK(cut) },
{ …Run Code Online (Sandbox Code Playgroud) 在跟进我之前关于这个问题的问题的答案时,我已经取得了一些进展,并且正在寻找下一点指导.简而言之,我无法使用gtkmm应用程序从Glade加载Treeview.
首先,这是源头.班级:
typedef struct
{
Gtk::Window *window_info;
Gtk::TreeView *treeview_info;
Glib::RefPtr<Gtk::ListStore> liststore_info;
class InfoColumns : public Gtk::TreeModel::ColumnRecord
{
public:
InfoColumns() { add(time); add(message); }
Gtk::TreeModelColumn<string> time;
Gtk::TreeModelColumn<string> message;
} info_columns;
}UiElements;
class GuiManager
{
Glib::RefPtr<Gtk::Builder> builder;
UiElements elements;
public:
GuiManager();
void info_handler(string msg);
};
Run Code Online (Sandbox Code Playgroud)
定义:
GuiManager::GuiManager()
{
builder = Gtk::Builder::create();
builder->add_from_file("GUI3.glade");
builder->get_widget("window_info", elements.window_info);
builder->get_widget("treeview_info", elements.treeview_info);
//these two methods of loading the liststore appear to function identically
elements.liststore_info = Glib::RefPtr<Gtk::ListStore>::cast_dynamic(builder->get_object("liststore_info"));
// elements.liststore_info = Gtk::ListStore::create(elements.info_columns);
elements.treeview_info->set_model(elements.liststore_info);
//if I append the columns, …Run Code Online (Sandbox Code Playgroud) 我有一个基于GTK的ARM项目,历史上是在32位Ubuntu虚拟机上开发的.目前,我正在尝试将其迁移到新的64位Arch Linux开发盒.我不知道如何处理我所采取的两条路线所产生的错误.
如果我告诉链接器使用/ usr/lib,编译将停止告诉我
/usr/lib/librt.so: file not recognized: File format not recognized
Run Code Online (Sandbox Code Playgroud)
因此,假设这是一个32位vs 64位的问题,我将gcc指向/ usr/lib32并收到以下内容
/usr/bin/arm-linux-gnueabi - ld: skipping incompatible /usr/lib32/librt.so when searching for -lrt
/usr/bin/arm-linux-gnueabi - ld: skipping incompatible /usr/lib32/librt.a when searching for -lrt
/usr/bin/arm-linux-gnueabi - ld: skipping incompatible /usr/lib32/libpthread.so when searching for -lpthread
/usr/bin/arm-linux-gnueabi - ld: skipping incompatible /usr/lib32/libpthread.a when searching for -lpthread
/usr/bin/arm-linux-gnueabi - ld: cannot find -lz
/usr/bin/arm-linux-gnueabi - ld: cannot find -lsqlite3
/usr/bin/arm-linux-gnueabi - ld: cannot find -lusb-1.0
/usr/bin/arm-linux-gnueabi - ld: cannot find -lssl
Run Code Online (Sandbox Code Playgroud)
等等.我尝试从Arch存储库安装lib32-sqlite无济于事. …
我试图统一一个ARM项目(特别是运行Linux 2.6.33.3的i.MX27 CPU,用GCC 4.3.2编译)的SQLite交互方法.作为其中的一部分,我创建了一个带有union的结构,该结构用于保存绑定到预准备语句的值.
#define SQLITE_DATA_CHARACTER_STRING_MAX 1024
typedef struct
{
int data_type;
union
{
int integer;
double floating_point;
unsigned char character_string[SQLITE_DATA_CHARACTER_STRING_MAX];
};
}sqlite_data;
Run Code Online (Sandbox Code Playgroud)
原来,这是int,float,char.我想用long long,double和char.但是,这似乎导致了一个问题.如上所述,以下代码生成可预测的输出:
int data_fields = 15;
int data_fields_index = 0;
sqlite_data data[data_fields];
LogMsg(LOG_INFO, "%s: Assigning", __FUNCTION__);
for(data_fields_index = 0; data_fields_index < data_fields; data_fields_index++)
{
data[data_fields_index].data_type = (100 + data_fields_index);
data[data_fields_index].integer = (1000 + data_fields_index);
LogMsg(LOG_INFO, "%s: data[%d] - %d; type - %d", __FUNCTION__, data_fields_index, data[data_fields_index].integer, …Run Code Online (Sandbox Code Playgroud)