如果我想编写一个C程序与Linux上的X服务器通信并产生最简单的可视化结果,例如:在显示器上设置一个像素,我该怎么办?
我想尽可能少地使用库,从头开始理解它,无论代码多么低效/混乱.
更新 – 通过“没有库”,我的意思是基本上没有任何可用于X的辅助库,也没有图形工具包.
更新 – 答案是“通过unix socket”,特别是/tmp/.X11-unix/X0(至少在这台机器上,大概是显示0).实际上,绘制一个像素太复杂了,我想在这里得不到答案.
解决方法:
如果您想完全不使用库,则需要执行以下步骤:
>了解您所针对的平台的装配
>了解如何在不使用目标上的libc的情况下制作二进制文件.这可能涉及编写用于设置初始堆栈帧的程序集
>了解如何在不使用目标上的libc的情况下进行系统调用.这可能涉及组装.
>学习和理解网络编程以及POSIX套接字API的工作原理
>了解如何在不使用目标上的libc的情况下打开网络连接
>学习并理解X11 protocol
>实现您需要的X11协议子集
>打开与X服务器的网络连接
>告诉X服务器创建一个窗口
>与X服务器协商色彩空间
>告诉X服务器为窗口中的单个像素着色
如果要使用libc和libsocket,则只保留以下步骤(大致):
>学习和理解网络编程以及POSIX套接字API的工作原理
>学习并理解X11协议
>实现您需要的X11协议子集
>打开与X服务器的网络连接
>告诉X服务器创建一个窗口
>与X服务器协商色彩空间
>告诉X服务器为窗口中的单个像素着色