C Linux上从桌面启动的程序的默认stdin和stdout是什么?
当我从桌面(Ubuntu16.04)而不是从shell启动一个程序,使程序不与终端关联时,这个程序的stdin和stdout是什么?程序启动时,C Linux上从桌面启动的程序的默认stdin和stdout是什么?,c,linux,stdout,stdin,desktop,C,Linux,Stdout,Stdin,Desktop,当我从桌面(Ubuntu16.04)而不是从shell启动一个程序,使程序不与终端关联时,这个程序的stdin和stdout是什么?程序启动时,STDIN\u FILENO和STDOUT\u FILENO文件描述符是否有效?在这种情况下,printf写入到哪里?您可以使用strace程序查看程序正在执行的所有系统调用(如打开、读取、写入、关闭)。将其连接到“桌面程序”(运行程序的程序;使用pstree或proctree)时,可以看到文件描述符0、1和2的情况 看 或者谷歌搜索“gnome运行程序
STDIN\u FILENO
和STDOUT\u FILENO
文件描述符是否有效?在这种情况下,printf
写入到哪里?您可以使用strace
程序查看程序正在执行的所有系统调用(如打开、读取、写入、关闭)。将其连接到“桌面程序”(运行程序的程序;使用pstree
或proctree
)时,可以看到文件描述符0、1和2的情况
看
或者谷歌搜索“gnome运行程序stdout”为什么不试试呢?在Windows中,如果使用了
stdout
,它将打开一个控制台窗口,该窗口在退出时关闭。除非在程序结束时出现提示或暂停,否则它可能发生得太快,以至于在屏幕刷新之前你甚至看不到窗口。@WeatherVane我在Ubuntu上用gcc用C编译了一个Hello World程序。然后我双击桌面上的可执行文件,什么也没发生(没有终端弹出)。当我以这种方式启动该程序时,我仍然无法找到该程序的stdin和stdout是如何设置的。您是否按照我的建议在程序结束时暂停了?这取决于您的桌面环境,但我猜标准描述符将被重定向到/dev/null
。您可以ls-l/proc/$pidOfYourProgram/fd
检查它。它可能是一个unix域套接字。可能有一些守护进程从这个套接字读取内容并将其转储到某种日志文件中。