如何在文件创建时更新 GTK GUI?

How to update a GTK GUI on file creation?

我正在尝试创建一个简单的 GTK 应用程序。一旦某些文件由不同的进程创建,我想在 GUI 上写东西。我想我不能在父进程中执行 while(true),因为那样会冻结 GUI。相反,我试图分叉,检查文件是否存在并操作 GUI,但它似乎不起作用,我笨拙的代码如下:

int check_for_files(){
 FILE *fp;
 int files_set;
 char ch;

 files_set = 0;
 while(!files_set){
  fp = fopen("file", "r");
  if(fp != NULL){
     content_length = 0;
     while(ch=getc(fp) != EOF){
      content_length++;
     }
     fclose(fp);
     files_set = 1;
     return files_set;
  }
  else{
     files_set = 0;
  }
 }
  return 1;
}

int main(int argc, char *argv[]) {
 // Main function the get the application UI

 GtkWidget *window;
 GdkPixbuf *icon;
 GtkWidget *grid;


 gtk_init(&argc, &argv);
 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 gtk_window_set_default_size(GTK_WINDOW(window), 500, 300);
 gtk_container_set_border_width(GTK_CONTAINER(window), 15);
 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

 int pid = fork();

 if (pid == 0){
  int files_set = check_for_files();
  printf("files outside: %d\n",files_set);
  gtk_window_set_title(GTK_WINDOW(window), "Files are present!");
 }
 else{
  icon = create_pixbuf("net.png");
  gtk_window_set_icon(GTK_WINDOW(window), icon);
 // Get the grid
  get_grid(window);
  gtk_widget_show_all(window);
  g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
  g_object_unref(icon);
  gtk_main();
  }
}

当您想执行 I/O 操作时,请查看 gio, which is integrated to GLib. So you should use a GFileMonitor which uses inotify 以获得文件系统更改的通知。 GFileMonitor 的 "Description" 部分介绍了要使用的函数。