⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myviewwin1.c~

📁 在Linux下实现文件的拷贝
💻 C~
字号:
#include <gtk/gtk.h>#include <strings.h>#include <unistd.h>#include <fcntl.h>#include <sys/types.h>#include <sys/stat.h>#include <dirent.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <time.h>struct fileinfo{  char * tiaomu;  struct fileinfo *next;};struct fileinfo * list(char *);void printout(char *,char *);/*void printout(char *dir,char *name){    int i,j;    char perms[10];    struct stat sbuf;    char newname[1024];    sprintf(newname,"%s/%s",dir,name);    stat(newname,&sbuf);    printf("%5d KB",(sbuf.st_size+1024-1)/1024);    printf("%3d个(uid)%5d(gid)%5d",sbuf.st_nlink,sbuf.st_uid,sbuf.st_gid);    printf("(size)%7d%.20s",sbuf.st_size,ctime(&sbuf.st_mtime));    printf("%s\n",name);}*/struct fileinfo * list(char * name){    DIR *dp;    struct dirent *dir;    struct fileinfo *dir_node;    struct fileinfo *head=NULL;    if((dp=opendir(name))==NULL)                sprintf(stderr,"%s:cannt open.\n",name);    while((dir=readdir(dp))!=NULL)          {       dir_node = (struct fileinfo *)malloc(sizeof(struct fileinfo));       dir_node -> tiaomu = dir -> d_name;       dir_node -> next = head;       head = dir_node;       //printout(name,dir->d_name);          }    close(dp);    return head;}/* 必须的基本回调 */static void print_hello( GtkWidget *w,                         gpointer   data ){  g_message ("Hello, World!\n");}gint delete( GtkWidget *widget,             GtkWidget *event,             gpointer   data ){    gtk_main_quit ();    return FALSE;}/* 这是用来生成新菜单的 GtkItemFactoryEntry 结构。   第一项:菜单路径。下划线后的字母指出菜单打开时           的快捷键。   第二项:这个条目的快捷键   第三项:回调函数。   第四项:回调动作。这个改变被调用的函数的参数。默认是0.   第五项:项类型,用来定义它是哪种项,           这里是可能的值:           NULL               -> "<Item>"           ""                 -> "<Item>"           "<Title>"          -> 创建一个标题(title)项           "<Item>"           -> 创建一个简单(simple)项           "<CheckItem>"      -> 创建一个检查(check)项           "<ToggleItem>"     -> 创建一个开关(toggle)项           "<RadioItem>"      -> 创建一个选择(radio)项           <path>             -> 选择项连接到的路径           "<Separator>"      -> 创建一个分隔线(separator)           "<Branch>"         -> 创建一个包含子项的项(可选)           "<LastBranch>"     -> 创建一个右对齐的分枝(branch)*/static GtkItemFactoryEntry menu_items[] = {  {"/监视器(_M)", NULL,NULL,0,"<Branch>" }, {"/监视器(_M)/退出(_Q)", "<control>Q",gtk_main_quit,0,NULL},  {"/编辑(_E)", NULL,NULL,0,"<Branch>" },  {"/编辑(_E)/停止进程(_S)", "<control>S",print_hello,0,NULL},  { "/编辑(_E)/继续进程(_C)",   "<control>C", print_hello,0,NULL },  { "/编辑(_E)/sep1",NULL,NULL, 0, "<Separator>" },  { "/编辑(_E)/结束进程(_P)",    "<control>P",print_hello,0,NULL },  { "/编辑(_E)/杀死进程(_K)",    "<control>K",print_hello,0,NULL },  { "/编辑(_E)/sep1",NULL, NULL, 0, "<Separator>" },  { "/编辑(_E)/更改优先级(_C)",    "<control>R",print_hello, 0, NULL },  { "/编辑(_E)/sep1",     NULL,         NULL, 0, "<Separator>" },  { "/编辑(_E)/首选项(_N)",             NULL,         NULL, 0, NULL },  { "/查看(_V)",  NULL,         NULL, 0, "<Branch>" },  { "/查看(_V)/活动的进程(_A)",     NULL,         NULL, 0, NULL },  { "/查看(_V)/全部进程(_L)",         NULL,         NULL, 0, NULL },  { "/查看(_V)/我的进程(_Y)",         NULL,         NULL, 0, NULL },  { "/查看(_V)/sep1",        NULL,         NULL, 0, "<Separator>" },  { "/查看(_V)/依赖关系(_D)",    "<control>D",    print_hello, 0, NULL },  { "/查看(_V)/sep1",        NULL,         NULL, 0, "<Separator>" },  { "/查看(_V)/隐藏进程(_H)",    "<control>H",    print_hello, 0, NULL }, { "/查看(_V)/隐藏的进程(_H)",    "<control>P",   print_hello, 0, NULL }, { "/查看(_V)/sep1",        NULL,         NULL, 0, "<Separator>" }, { "/查看(_V)/内存镜像(_M)",    "<control>M",    print_hello, 0, NULL }, { "/查看(_V)/打开的文件(_F)",    "<control>F",    print_hello, 0, NULL }, { "/帮助(_H)",        NULL,         NULL, 0, "<LastBranch>"  }, { "/帮助(_H)/关于",      "F" ,         print_hello, 0, NULL  }, { "/帮助(_H)/内容",        NULL,        print_hello, 0, NULL  },};void get_main_menu( GtkWidget  *window,                    GtkWidget **menubar ){  GtkItemFactory *item_factory;  GtkAccelGroup *accel_group;  gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);  accel_group = gtk_accel_group_new ();  /* 这个函数初始化套件。     参数1:菜单类型 - 可以是GTK_TYPE_MENU_BAR, GTK_TYPE_MENU,            或GTK_TYPE_OPTION_MENU。     参数2:菜单路径。     参数3:指向一个gtk_accel_group的指针。套件在生成菜单时设置            好加速表(accelerator table)。  */  item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", 				       accel_group);  /* 这个函数生成菜单项。把数组里项的数量,数组自身,和菜单项的任     意回调数据依次传递给套件。 */  gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);  /* 把新的加速组绑定到窗口。 */  gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);  if (menubar)    /* 最后,返回套件已经创建的菜单栏。 */     *menubar = gtk_item_factory_get_widget (item_factory, "<main>");}/* 创建一个"信息"列表 */GtkWidget * create_list(struct fileinfo *file ){    int i;   GtkListStore * model;   GtkTreeIter iter;   GtkCellRenderer *cell;   GtkTreeViewColumn *column;   GtkWidget *tree_view;   GtkWidget *scrolled_window;   struct fileinfo *fileline;    /* 创建一个新的滚动窗口(scrolled window),只有需要时,滚动条才出现 */    scrolled_window = gtk_scrolled_window_new (NULL, NULL);    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),				    GTK_POLICY_AUTOMATIC, 				    GTK_POLICY_AUTOMATIC);       model = gtk_list_store_new (1, G_TYPE_STRING);    tree_view = gtk_tree_view_new ();    gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window),                                            tree_view);    gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), GTK_TREE_MODEL (model));    gtk_widget_show (tree_view);       /* 在窗口中添加一些消息 */     for(fileline=file;fileline!=NULL;fileline=fileline->next)           {        gchar *msg = g_strdup_printf ("%s", fileline);        gtk_list_store_append (GTK_LIST_STORE (model), &iter);        gtk_list_store_set (GTK_LIST_STORE (model), &iter,0, msg,  -1);	     g_free (msg);           }     cell = gtk_cell_renderer_text_new ();     column = gtk_tree_view_column_new_with_attributes ("Messages",cell,"text",  0,NULL);       gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view),	  		         GTK_TREE_VIEW_COLUMN (column));    return scrolled_window;}int main( int argc,          char *argv[] ){  GtkWidget *window;  static GtkWidget *window1;  GtkWidget *main_vbox;  GtkWidget *sub1_vbox;  GtkWidget *box;  GtkWidget *menubar;  GtkWidget *table;  GtkWidget *label;  GtkWidget *notebook;  GtkWidget *button;  GtkWidget *scrolled_window;  GtkWidget *vpaned;  GtkWidget *list;  GtkWidget *text;   DIR *dirp;  struct dirent *direntp;  struct stat statbuf;  struct fileinfo * test,*headp;  char buf[80];  char * read;  FILE *fp;  int i;  char *bufferl[3]={"proc文件信息",  "资源", "文件系统"}; if(stat("/proc/meminfo",&statbuf)<0)        perror("/proc/meminfo");  if((statbuf.st_mode&S_IFMT)==S_IFDIR)        test=list("/proc/meminfo");// else   printout(".",argv[1]); //  for(headp=test;headp!=NULL;headp=headp->next)  //     puts(headp->tiaomu);  gtk_init (&argc, &argv);    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  g_signal_connect (G_OBJECT (window), "delete_event",	              G_CALLBACK (delete), NULL);  g_signal_connect (G_OBJECT (window), "destroy", 		    G_CALLBACK (gtk_main_quit), 		    NULL);  gtk_window_set_title (GTK_WINDOW (window), "系统监视器");  gtk_widget_set_size_request (GTK_WIDGET (window), 300, 200);    main_vbox = gtk_vbox_new (FALSE, 1);  gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 1);  gtk_container_add (GTK_CONTAINER (window), main_vbox);  gtk_widget_show (main_vbox);    get_main_menu (window, &menubar);  gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, TRUE, 0);  gtk_widget_show (menubar);     /* 创建一个新的笔记本,将标签页放在顶部 */  notebook = gtk_notebook_new ();  gtk_box_pack_start (GTK_BOX (main_vbox),notebook, TRUE, TRUE, 0);  gtk_widget_show (notebook);       /* 在笔记本后面追加几个页面 */  for (i = 0; i < 3; i++)    {	          	  vpaned = gtk_vpaned_new ();  gtk_widget_show (vpaned);  /*switch(i)     {           case 0:  if((fp=open("/proc/meminfo","r"))==NULL)                                                     {                       printf("File can't open!\n");                       break;                                                      }                   while((read=fgets(buf,80,fp))!=NULL)                     list=create_list( read);                                                       break;          default:break;         }*/  list=create_list( test );  gtk_paned_add1 (GTK_PANED (vpaned), list);  gtk_widget_show (list);	  label = gtk_label_new (bufferl[i]);	  gtk_notebook_append_page (GTK_NOTEBOOK (notebook),vpaned, label);    }  button = gtk_button_new_with_label ("关闭");   g_signal_connect (G_OBJECT (button), "clicked",		      G_CALLBACK (delete), "button 1");  gtk_box_pack_end (GTK_BOX(main_vbox), button, FALSE, FALSE, 0);  gtk_widget_show (button);  gtk_widget_show (window);  gtk_main ();    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -