我是靠谱客的博主 迷人小蝴蝶,最近开发中收集的这篇文章主要介绍SPICE之spicy主函数源码分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


  1. int main(int argc, char *argv[])
  2. {
  3.     GError *error = NULL;
  4.     GOptionContext *context;
  5.     spice_connection *conn;
  6.     gchar *conf_file, *conf;
  7.     char *host = NULL, *port = NULL, *tls_port = NULL;


  8. #if !GLIB_CHECK_VERSION(2,31,18)
  9.     g_thread_init(NULL);
  10. #endif
  11. /*国际化*/
  12.     bindtextdomain(GETTEXT_PACKAGE, SPICE_GTK_LOCALEDIR);
  13.     bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
  14.     textdomain(GETTEXT_PACKAGE);


  15. /*信号处理函数*/
  16.     signal(SIGINT, signal_handler);
  17.     signal(SIGTERM, signal_handler);
  18.     segv_handler = signal(SIGSEGV, signal_handler);
  19.     abrt_handler = signal(SIGABRT, signal_handler);
  20.     fpe_handler = signal(SIGFPE, signal_handler);
  21.     ill_handler = signal(SIGILL, signal_handler);
  22.     
  23. #ifndef WIN32
  24.     signal(SIGHUP, signal_handler);
  25.     bus_handler = signal(SIGBUS, signal_handler);
  26. #endif


  27. /*读取配置文件*/
  28.     keyfile = g_key_file_new();


  29.     int mode = S_IRWXU;
  30.     conf_file = g_build_filename(g_get_user_config_dir(), "spicy", NULL);
  31.     if (g_mkdir_with_parents(conf_file, mode) == -1)
  32.         SPICE_DEBUG("failed to create config directory");
  33.     g_free(conf_file);


  34.     conf_file = g_build_filename(g_get_user_config_dir(), "spicy", "settings", NULL);
  35.     if (!g_key_file_load_from_file(keyfile, conf_file,
  36.                                    G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS, &error)) {
  37.         SPICE_DEBUG("Couldn't load configuration: %s", error->message);
  38.         g_clear_error(&error);
  39.     }
  40.     
  41. /*解析命令行传入的参数*/
  42.     /* parse opts */
  43.     gtk_init(&argc, &argv);
  44.     context = g_option_context_new(_("- spice client test application"));
  45.     g_option_context_set_summary(context, _("Gtk+ test client to connect to Spice servers."));
  46.     g_option_context_set_description(context, _("Report bugs to " PACKAGE_BUGREPORT "."));
  47.     g_option_context_add_group(context, spice_get_option_group());
  48.     g_option_context_set_main_group(context, spice_cmdline_get_option_group());
  49.     g_option_context_add_main_entries(context, cmd_entries, NULL);
  50.     g_option_context_add_group(context, gtk_get_option_group(TRUE));
  51.     if (!g_option_context_parse (context, &argc, &argv, &error)) {
  52.         g_print(_("option parsing failed: %sn"), error->message);
  53.         exit(1);
  54.     }
  55.     g_option_context_free(context);


  56.     if (version) {
  57.         g_print("spicy " PACKAGE_VERSION "n");
  58.         exit(0);
  59.     }




  60.     g_type_init();
  61.     mainloop = g_main_loop_new(NULL, false);


  62. /*设置conn的通道默认回调函数,设置内部默认参数,读取命令行参数*/
  63.     conn = connection_new();
  64.     spice_set_session_option(conn->session);
  65.     spice_cmdline_session_setup(conn->session);


  66.     g_object_get(conn->session,
  67.                  "host", &host,
  68.                  "port", &port,
  69.                  "tls-port", &tls_port,
  70.                  NULL);
  71.     /* If user doesn't provide hostname and port, show the dialog window
  72.        instead of connecting to server automatically */
  73.     if (host == NULL || (port == NULL && tls_port == NULL)) {
  74.         int ret = connect_dialog(conn->session);
  75.         if (ret != 0) {
  76.             exit(0);
  77.         }
  78.     }
  79.     g_free(host);
  80.     g_free(port);
  81.     g_free(tls_port);


  82.     watch_stdin();


  83. /*创建主通道,激活channel_new()*/
  84.     connection_connect(conn);
  85.     if (connections > 0)
  86.         g_main_loop_run(mainloop);
  87.     g_main_loop_unref(mainloop);


  88.     if ((conf = g_key_file_to_data(keyfile, NULL, &error)) == NULL ||
  89.         !g_file_set_contents(conf_file, conf, -1, &error)) {
  90.         SPICE_DEBUG("Couldn't save configuration: %s", error->message);
  91.         g_error_free(error);
  92.         error = NULL;
  93.     }


  94.     g_free(conf_file);
  95.     g_free(conf);
  96.     g_key_file_free(keyfile);


  97.     g_free(spicy_title);


  98.     setup_terminal(true);
  99.     return 0;
  100. }


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(2594) | 评论(0) | 转发(1) |
0

上一篇:gobject 中 g_object_new 流程简介

下一篇:Linux Used内存到底哪里去了?

相关热门文章
  • linux设备驱动之USB数据传输分...
  • QEMU源码分析系列(四)...
  • 研究说:失眠的人刷微博、朋友...
  • 物联网MQTT协议分析和开源Mosq...
  • APP开发报价单,如何计算APP报...
  • [官版翻译ing]OpenStack云计算...
  • [官版翻译ing]OpenStack云计算...
  • hive的安装和配置
  • OpenStack安装记
  • Hadoop运行class类出现Excepti...
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议

最后

以上就是迷人小蝴蝶为你收集整理的SPICE之spicy主函数源码分析的全部内容,希望文章能够帮你解决SPICE之spicy主函数源码分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部