Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 确定是否在illumos/solaris中的控制台上运行_C_Console_Solaris_X11 - Fatal编程技术网

C 确定是否在illumos/solaris中的控制台上运行

C 确定是否在illumos/solaris中的控制台上运行,c,console,solaris,x11,C,Console,Solaris,X11,Debian的X包装器中使用了。此函数确定X是否在控制台(虚拟终端)上运行,它是否在linux和freebsd上工作 在illumos/solaris上有哪些方法可以执行相同的操作?可以使用VT\u GETSTATEioctl来确定solaris 11上的活动VT。有关详细信息,请参见。diff--git a/debian/local/xserver wrapper.c b/debian/local/xserver wrapper.c diff --git a/debian/local/xser

Debian的X包装器中使用了。此函数确定X是否在控制台(虚拟终端)上运行,它是否在linux和freebsd上工作


在illumos/solaris上有哪些方法可以执行相同的操作?

可以使用
VT\u GETSTATE
ioctl来确定solaris 11上的活动VT。有关详细信息,请参见。

diff--git a/debian/local/xserver wrapper.c b/debian/local/xserver wrapper.c
diff --git a/debian/local/xserver-wrapper.c b/debian/local/xserver-wrapper.c
index d4a6ab8..31e5343 100644
--- a/debian/local/xserver-wrapper.c
+++ b/debian/local/xserver-wrapper.c
@@ -116,6 +116,9 @@
 #define TTY_MAJOR_DEV 4
 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
 #include <sys/consio.h>
+#elif defined(__sun__)
+#include <sys/kd.h>
+#include <sys/vt.h>
 #endif

 #define X_WRAPPER_CONFIG_FILE "/etc/X11/Xwrapper.config" 
@@ -171,6 +174,10 @@ onConsole()

   if (ioctl(0, VT_GETINDEX, &idx) != -1)
     return TRUE;
+#elif defined(__sun__)
+  int mode;
+  if (ioctl(0, KDGETMODE, &mode) != -1) /* mode = 0 (KD_TEXT) or 1 (KD_GRAPHICS) */
+    return TRUE;
 #else
 #warning This program needs porting to your kernel.
   (void) fprintf(stderr, "X: unable to determine if running on a console\n");
索引d4a6ab8..31e5343 100644 ---a/debian/local/xserver wrapper.c +++b/debian/local/xserver wrapper.c @@ -116,6 +116,9 @@ #定义TTY_MAJOR_DEV 4 #elif已定义(uuFreeBSD_uuuuuuuuuuu)已定义(uuuFreeBSD_uuuuuuuuuu内核) #包括 +#已定义的elif(_sun__;) +#包括 +#包括 #恩迪夫 #定义X_包装器配置文件“/etc/X11/Xwrapper.CONFIG” @@-171,6+174,10@@onsole() 如果(ioctl(0,VT_GETINDEX,&idx)!=-1) 返回TRUE; +#已定义的elif(_sun__;) +int模式; +if(ioctl(0,KDGETMODE,&mode)!=-1)/*mode=0(KD_文本)或1(KD_图形)*/ +返回TRUE; #否则 #警告:此程序需要移植到内核。 (void)fprintf(stderr,“X:无法确定是否在控制台上运行\n”);
是的,我使用了KDGETMODE。我的问题是我不明白ioctl是如何使用的:-)。想法很简单:控制台ioctl只适用于控制台。