unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Joost Kremers <joost.m.kremers@gmail.com>
To: help-gnu-emacs@gnu.org
Subject: Best way to check file modification time?
Date: 17 Nov 2015 11:09:52 GMT	[thread overview]
Message-ID: <db0g80F14poU1@mid.individual.net> (raw)

Hi all,

I'm dealing with files that I do not visit directly, instead I read
their contents into a temp buffer and parse them. At a later point, I
write the new contents into a temp buffer and save them to the original
file, overwriting the previous version.

I would like to check whether the original file may have been
overwritten by some other process (possibly by Emacs itself if the user
visits the same file in a buffer, but also by external programs).

Right now, I'm essentially doing the following:

```
(setq my-file-modtime (nth 5 (file-attributes my-file)))
(my-parse-function file)
```

where `my-parse-function' reads the contents of FILE into a temp buffer
and does the parsing. IOW, there is a function call between saving the
mod time and reading the file.

Saving is basically the same: the mod time of the file on disk is read
again and checked against the saved mod time, then if that checks out, a
function is called that creates the temp buffer, writes out the
information and saves the file.

Now, it seems to me that there may be too much time between checking the
mod time and reading/saving the file, such that it is in principle
possible that the relevant file gets overwritten at just the wrong moment.

I can easily move the mod time checking to a position in the code that's
closer to the actual reading or saving of the file, but I suspect that
only reduces the problem, it doesn't eliminate it altogether. So I'm
wondering if there's a Right Way™ to do this. If not, any advice on how
to reduce the risks as much as possible would be great!

TIA


-- 
Joost Kremers                                   joostkremers@fastmail.fm
Selbst in die Unterwelt dringt durch Spalten Licht
EN:SiS(9)


             reply	other threads:[~2015-11-17 11:09 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-17 11:09 Joost Kremers [this message]
2015-11-17 16:04 ` Best way to check file modification time? Barry Margolin
2015-11-17 17:12   ` Stefan Monnier
     [not found]   ` <mailman.78.1447780399.31583.help-gnu-emacs@gnu.org>
2015-11-19 14:07     ` Joost Kremers
2015-11-20 14:50       ` Stefan Monnier
2015-11-19 14:10   ` Joost Kremers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=db0g80F14poU1@mid.individual.net \
    --to=joost.m.kremers@gmail.com \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).