我知道我可以使用xdpyinfo从Linux上的命令行获得屏幕分辨率,但是也可以在C程序中这样做吗?如果是,怎么办?

最佳答案

如果xdpyinfo对你有用,就用它。创建一些管道,fork(),连接管道,exec(xdpyinfo)这比计算libX11要容易很多倍;有人已经为你做了这些工作。这不是我要用的成语,但它让我明白了这一点:

int filedes[2];
if (pipe(filedes) == -1) {
  perror("pipe");
  exit(1);
}

pid_t pid = fork();
if (pid == -1) {
  perror("fork");
  exit(1);
} else if (pid == 0) {
  while ((dup2(filedes[1], STDOUT_FILENO) == -1) && (errno == EINTR)) {}
  close(filedes[1]);
  close(filedes[0]);
  execl(cmdpath, cmdname, (char*)0);
  perror("execl");
  _exit(1);
}
close(filedes[1]);

while(...EINTR))循环只是为了防止在文件描述符关闭和复制期间出现中断。

10-06 12:00