首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查X11扩展

检查X11扩展
EN

Stack Overflow用户
提问于 2016-10-18 18:32:40
回答 1查看 961关注 0票数 1

我正在编写一个shell脚本,它需要根据特定X11扩展的存在与否,为被调用的程序提供不同的选择。我有一个可行的解决方案,但我希望有一个更清洁的解决方案。我愿意考虑一个简单的c程序来做测试并返回结果。下面是我作为一个最小功能示例所做的工作:

代码语言:javascript
复制
#!/bin/sh
xdpyinfo |sed -nr '/^number of extensions/,/^[^ ]/s/^  *//p'  | \
    grep -q $EXTENSION && echo present

我认为有一种方法可以简化sed,grep,但我真的不喜欢解析xdpyinfo

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-18 19:39:23

你也有C标签,所以让我建议你自己做xdpyinfo。下面的C程序只打印扩展:

代码语言:javascript
复制
#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static int compare(const void *a, const void *b)
{
  return strcmp(*(char **) a, *(char **) b);
}

static void print_extension_info(Display * dpy)
{
  int n = 0, i;
  char **extlist = XListExtensions(dpy, &n);


  printf("number of extensions:    %d\n", n);
  if (extlist) {
    qsort(extlist, n, sizeof(char *), compare);
    for (i = 0; i < n; i++) {

      printf("    %s\n", extlist[i]);

    }
  }
  // TODO: it might not be a good idea to free extlist, check
}

int main()
{
  Display *dpy;
  char *displayname = NULL;

  dpy = XOpenDisplay(displayname);
  if (!dpy) {
    fprintf(stderr, "Unable to open display \"%s\".\n",
            XDisplayName(displayname));
    exit(EXIT_FAILURE);
  }

  print_extension_info(dpy);

  XCloseDisplay(dpy);
  exit(EXIT_SUCCESS);
}

与GCC一起编译

代码语言:javascript
复制
gcc -O3 -g3  -W -Wall -Wextra  xdpyinfo1.0.2.c  $(pkg-config --cflags --libs x11)  -o xdpyinfo1.0.2

(应该对未使用的argc发出警告,但这是无害的)

只需将printf()更改为您想要的格式即可。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40115567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档