小编Nid*_*ger的帖子

如果file存在且不为空.总是给我错误的价值

我有一个bash脚本:

 echo " enter file name "
 read $file
 if [ -f "$file" ] && [ -s "$file" ]
 then 
    echo " file does not exist, or is empty "
 else
    echo " file exists and is not empty "
 fi
Run Code Online (Sandbox Code Playgroud)

无论我输入什么$file,它都给了我错误的价值.我甚至可以输入一个甚至不存在的文件,它仍然会给我错误的价值.为什么那些家伙?提前致谢

linux bash scripting

35
推荐指数
2
解决办法
6万
查看次数

Protobuf:set_allocated_*会删除分配的对象吗?

我有这个小的protobuf代码(简化,只包含必要的):

message ParamsMessage {
    required int32 temperature = 1;
}

message MasterMessage {
    enum Type { GETPARAMS = 1; SENDPARAMS = 2;}
    required Type type = 1;

    optional ParamsMessage paramsMessage = 2;

}
Run Code Online (Sandbox Code Playgroud)

我现在以下列方式创建一个MasterMessage:

ParamsMessage * params = new ParamsMessage();
params->set_temperature(22);
MasterMessage master;
master.set_type(MasterMessage::SENDPARAMS);
master.set_allocated_paramsmessage(params);
Run Code Online (Sandbox Code Playgroud)

问题是:我是否必须(在处理消息后)删除params消息,或者将protobuf删除给我?我在文档中找不到任何内容.

c++ protocol-buffers

30
推荐指数
1
解决办法
1万
查看次数

SDL2:快速像素处理

我想在显示器上绘制像素,这些像素在某些参数后经常变化.EG如果红色和绿色像素发生碰撞,它们都会消失,等等.

在每一帧中,我必须操纵大约100-1000像素.我这里有一个多线程的方法,它不会给我30FPS(我想要的).目前我在RAM中存储了一个像素阵列,其中包含所有像素并且具有SDL_Surface.当数组中的像素发生变化时,它也会在Surface中发生变化,然后在完成所有操作后,会对屏幕进行blitting.我目前的做法太慢了,我对如何提高速度做了一些思考.

我目前的想法是:

  • 使用OpenGL直接在GPU上进行像素操作,一些论坛告诉我这比我目前的方法慢,因为"这不是GPU的工作原理"
  • 不要存储像素阵列,直接将BMP存储在RAM中,操作它然后将其移动到SDL_SurfaceSDL_Texture

关于如何以快速方式操作像素,还有其他方法吗?

c++ opengl sdl image-processing sdl-2

13
推荐指数
1
解决办法
1万
查看次数

OSX:在登录窗口中枚举屏幕

我试图在登录屏幕上使用OSX通过命令行枚举屏幕(使用ssh).

但两者[NSScreen screens]CGGetActiveDisplays都返回0屏幕.还有另一种屏幕枚举方法吗?

macos objective-c

9
推荐指数
1
解决办法
237
查看次数

Logind和gdbus:没有收到通知

我使用DBus与logind进行通信以获取有关活动会话的信息等.我已经使用了创建代码gdbus-codegen.我可以使用callget方法获取信息,但我没有收到通知(我有一个g_main_loop正在运行!).

我像这样创建会话对象:

GError *error;
session_ = ::login1_session_proxy_new_for_bus_sync(G_BUS_TYPE_SYSTEM,
                                                   G_DBUS_PROXY_FLAGS_NONE,
                                                   "org.freedesktop.login1",
                                                   object_path,
                                                   NULL,
                                                   &error);
Run Code Online (Sandbox Code Playgroud)

使用object_path上述路径并使用调试器进行验证.

我不知道这是否与未收到通知的问题有关.

我注册了这样的回调:

::g_signal_connect_data(proxy, "notify::active", G_CALLBACK(&cb_thunk), this, 0, (GConnectFlags)0);
Run Code Online (Sandbox Code Playgroud)

(我g_signal_connect_data用来设置userdata我当前的类,因为我用C++编写并使用回调thunks).

回调函数具有以下签名:

static void cb_thunk(proxy_t *proxy, first_data_t param1, second_data_t param2, gpointer userdata);
Run Code Online (Sandbox Code Playgroud)

proxy_tbeeing定义为Login1Session(由...生成gdbus-codegen).

我在这里弄错了吗?我不明白为什么我没有得到任何关于此的通知.

通过DBus进行回调是有效的,但不是属性,只有dbus中的实际回调函数.

c++ dbus glib systemd

9
推荐指数
1
解决办法
227
查看次数

EGL and OpenGL only produces black screen

I have written the attached example program that uses GTK2 in conjunction with EGL and OpenGL. On my system this works fine. On the PC of friend it only will produce a black window and I cannot put my finger on why this happens. We event straces which libraries get loaded (Which are the same). My PC has a NVIDIA MX150, he has a GTX 1030, he uses Debian Strech and I use Debian buster.

I cannot put my finger …

linux x11 gtk opengl egl

8
推荐指数
0
解决办法
198
查看次数

C/Linux:如何在没有`getlogin`的情况下获取用户登录名

我需要在C程序中检索用户的用户名.我知道getlogingetlogin_r.但我的程序有一个重定向的标准输入(因为一些forks).

我面临的问题在联机帮助页中说明:

请注意,glibc不遵循POSIX规范并使用stdin而不是/ dev/tty.一个bug.(其他最新系统,如SunOS 5.8和HP-UX 11.11以及FreeBSD 4.8,都会在重定向stdin时返回登录名).

有没有其他方法可以检索用户名?

c linux

6
推荐指数
2
解决办法
718
查看次数

从 Xlib 转换为 xcb

我目前正在将我的一个应用程序从 Xlib 移植到 libxcb,但在查找有关我在某个时候使用的 XInput2 扩展的信息时遇到了一些麻烦。libxcb 中是否有 XInput2 实现?如果是,我在哪里可以找到文档。

目前我在使用以下功能时遇到了麻烦:XIQueryDevice, XISelectEvents. 这些主要是我使用的功能。

也许有人可以为我指出文档或为我提供一个非常小的例子来开始。

c linux x11 xlib xcb

6
推荐指数
1
解决办法
957
查看次数

当 fd 关闭时,我会收到来自 epoll 的通知吗?

我目前正在构建一些使用epoll. 它工作得很好,但是当文件描述符从epoll底层fd关闭时被删除时有一个通知会很好。

有没有办法在关闭后epoll立即收到通知fd

linux epoll

6
推荐指数
1
解决办法
2228
查看次数

GTK+2:透明地在其他小部件上方绘制

我被迫使用 Gtk+2。所以请不要讨论切换到 3 或 4。

我需要创建类似于 Gtk3s 的东西GtkOverlay,我需要在其他小部件上绘制透明背景。

我想使用GtkFixed并将我的“普通”小部件放在那里,然后GtkEventBox在将颜色图(如果支持)设置为透明后使用 a放在顶部并连接其公开事件。

我得到了一些工作,但它没有预期的结果。它导致事件框变得半透明(如我所愿),但现在显示下方的小部件,但显示窗口下方的所有内容。

到目前为止,这是我的代码(抱歉弄乱了):

#include <gtk/gtk.h>

GtkWidget *window;
GtkWidget *button;
GtkWidget *vbox;
GtkWidget *fixed;  
GtkWidget *event_overlay;
gboolean supports_alpha = FALSE;

static void screen_changed(GtkWidget *widget, GdkScreen *old_screen, gpointer userdata)
{
    /* To check if the display supports alpha channels, get the colormap */
    GdkScreen *screen = gtk_widget_get_screen(widget);
    GdkColormap *colormap = gdk_screen_get_rgba_colormap(screen);

    if (!colormap)
    {
        printf("Your screen does not support alpha channels!\n");
        colormap = gdk_screen_get_rgb_colormap(screen);
        supports_alpha = FALSE; …
Run Code Online (Sandbox Code Playgroud)

c linux gtk

5
推荐指数
1
解决办法
137
查看次数

标签 统计

linux ×6

c ×3

c++ ×3

gtk ×2

opengl ×2

x11 ×2

bash ×1

dbus ×1

egl ×1

epoll ×1

glib ×1

image-processing ×1

macos ×1

objective-c ×1

protocol-buffers ×1

scripting ×1

sdl ×1

sdl-2 ×1

systemd ×1

xcb ×1

xlib ×1