コンテンツにスキップ

X Window Programming/最初のXプログラム

出典: フリー教科書『ウィキブックス(Wikibooks)』

最初のXプログラム

[編集]

X Window Systemの基本的な機能を理解するために、簡単なウィンドウ表示プログラムを作成してみましょう。この章では、最初のXプログラムを作成し、UNIX環境でのコンパイルと実行方法について説明します。

簡単なウィンドウ表示プログラム

[編集]

以下は、Xサーバーに接続して単純なウィンドウを表示するプログラムの例です。このプログラムは、ウィンドウを作成し、それを画面に表示する基本的な機能を実装しています。

#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
    // Xサーバーへの接続
    Display *display = XOpenDisplay(NULL);
    if (!display) {
        fprintf(stderr, "Xサーバーに接続できません\n");
        exit(1);
    }

    // デフォルトスクリーンの取得
    int screen = DefaultScreen(display);

    // ウィンドウの作成
    Window window = XCreateSimpleWindow(
        display, RootWindow(display, screen),
        100, 100, 400, 300, 1,
        BlackPixel(display, screen),
        WhitePixel(display, screen)
    );

    // ウィンドウの名前を設定
    XStoreName(display, window, "最初のXプログラム");

    // イベントマスクの設定
    XSelectInput(display, window, ExposureMask | KeyPressMask);

    // ウィンドウの表示
    XMapWindow(display, window);

    // イベントループ
    for (;;) {
        XEvent event;
        XNextEvent(display, &event);
        if (event.type == Expose) {
            printf("ウィンドウが再描画されました\n");
        } else if (event.type == KeyPress) {
            printf("キーが押されました。終了します。\n");
            break;
        }
    }

    // Xサーバーからの切断
    XDestroyWindow(display, window);
    XCloseDisplay(display);

    return 0;
}

このプログラムでは、次のことを行っています:

  • XOpenDisplay関数でXサーバーに接続
  • XCreateSimpleWindow関数でウィンドウを作成
  • XMapWindow関数でウィンドウを画面に表示
  • イベントループを使ってユーザーの操作を処理

UNIX上でのコンパイルと実行

[編集]

UNIXシステム上でこのプログラムをコンパイルして実行するには、以下の手順を実行します。

必要なツール

[編集]

コンパイルには以下のツールが必要です:

  • Cコンパイラ(例: cc
  • 必要なXライブラリ(libX11

コマンドラインからのコンパイル

[編集]

以下のコマンドでプログラムをコンパイルします:

cc -o myxprogram myxprogram.c -lX11

ここで:

  • -o myxprogramは出力ファイル名を指定
  • -lX11libX11ライブラリをリンクするオプション

プログラムの実行

[編集]

コンパイルが成功したら、以下のコマンドでプログラムを実行します:

./myxprogram

ウィンドウが表示され、再描画イベントやキー入力に応答するプログラムが動作します。

Makefileの利用

[編集]

makeを利用して簡単にコンパイルと実行を管理することもできます。以下は例としてのMakefileです:

CC = cc
CFLAGS = -Wall -g
LDFLAGS = -lX11

TARGET = myxprogram
SRC = myxprogram.c

all: $(TARGET)

$(TARGET): $(SRC)
	$(CC) $(CFLAGS) -o $(TARGET) $(SRC) $(LDFLAGS)

clean:
	rm -f $(TARGET)

以下のコマンドでコンパイルできます:

make

プログラムをクリーンアップするには:

make clean

まとめ

[編集]

この章では、Xサーバーに接続してウィンドウを表示する最初のプログラムを作成しました。また、UNIX環境でのコンパイル方法やMakefileの使用方法について学びました。これを基に、さらに高度なプログラムを構築していきましょう。