Re: is this correct way to open file in buffer?
- From: Rudra Banerjee <rudra banerjee aol co uk>
- To: Gregory Hosler <ghosler redhat com>
- Cc: gtk-app-devel-list gnome org
- Subject: Re: is this correct way to open file in buffer?
- Date: Wed, 30 Jan 2013 00:08:30 +0000
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]