Re: is this correct way to open file in buffer?



Well, 
my final goal is to able to edit the file, but not save every time
something  has changed. 
So, in irc and other place, i was instructed to use get_contents method.
Can you kindly clarify where I went wrong?
On Wed, 2013-01-30 at 07:57 +0800, Gregory Hosler wrote:
On 01/30/2013 07:39 AM, Rudra Banerjee wrote:
Dear friends, I am trying hard to get rid of file reading and editing (as
evident from my previous post) Here is a small code where I tried to open
my file in a buffer and scan. Its small, 50 line code. I will be grateful
if anybody kindly have a look and tell if this is really opening the file
from buffer or still using the file. Please help.

I am coming late into this thread, so please forgive the following question(s).

I would like clarification "opening the file from buffer or still using the file".

In C, there is an api that allows us to open a file, and then associate a
memory location with the file's contents. There after, any modification to the
file, automatically shows in the buffer (i.e. no read() or re-read is
required) and any modification to the file buffer will automatically show on
disk (without the necessity of a write()).

Is this what you are trying to do ?

If yes, then the below will not accomplish this. The C api is to do a standard
open(2) and then a mmap(2) to associate the file's buffer to a fixed memory
location - I am happy to supply more details upon a confirmation.

All the best,

-Greg

void open_file(GtkWidget *widget, gpointer data){ GScanner *scanner; 
GHashTable *table; char* fd; gsize length; GError* error=NULL; GtkWidget
*dialog; //, *entry; GtkFileFilter *filter; dialog =
gtk_file_chooser_dialog_new("Open File", NULL, 
GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, 
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);

filter = gtk_file_filter_new(); gtk_file_filter_set_name(filter, "All files
(*.*)"); gtk_file_filter_add_pattern(filter, "*"); 
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);

filter = gtk_file_filter_new(); gtk_file_filter_set_name(filter, "Bibtex
file (*.bib)"); gtk_file_filter_add_pattern(filter, "*.bib"); 
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter); 
gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter);

if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { filename =
gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); 
gtk_list_store_clear (store); g_file_get_contents(filename, &fd, &length ,
&error); g_assert(!error);

scanner = g_scanner_new (NULL); g_scanner_input_text (scanner, fd,
CHAR_BUFF);

table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); 
do { g_hash_table_remove_all (table); parse_entry (scanner, table); 
output_entry (table);

g_scanner_peek_next_token (scanner); } while (scanner->next_token !=
G_TOKEN_EOF && scanner->next_token != G_TOKEN_ERROR);


/* finsish parsing */ g_scanner_destroy (scanner); g_hash_table_destroy
(table);

gtk_label_set_text(GTK_LABEL(flabel), filename); 
gtk_widget_destroy(dialog); } else gtk_widget_destroy(dialog); }

_______________________________________________ gtk-app-devel-list mailing
list gtk-app-devel-list gnome org 
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list








[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]