delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2007/05/29/12:12:27

X-Spam-Check-By: sourceware.org
To: cygwin AT cygwin DOT com
From: Eric Blake <ebb9 AT byu DOT net>
Subject: Re: [Spam?]Re: problem concating (>>) to a large file
Date: Tue, 29 May 2007 16:11:40 +0000 (UTC)
Lines: 33
Message-ID: <loom.20070529T180537-567@post.gmane.org>
References: <001201c79ea3$4d82bce0$8500a8c0 AT RUSNAK> <4656D47E DOT 5050906 AT byu DOT net> <001201c79f49$b57b3c90$8500a8c0 AT RUSNAK> <46582F2B DOT 2000300 AT byu DOT net> <000001c7a1d8$c2178e40$8500a8c0 AT RUSNAK> <loom DOT 20070529T161539-287 AT post DOT gmane DOT org> <loom DOT 20070529T172200-251 AT post DOT gmane DOT org> <20070529155024 DOT GE6003 AT calimero DOT vinschen DOT de>
Mime-Version: 1.0
User-Agent: Loom/3.14 (http://gmane.org/)
X-IsSubscribed: yes
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

Corinna Vinschen <corinna-cygwin <at> cygwin.com> writes:

> > 
> > assert (0 == lseek (open("existing", O_WRONLY | O_APPEND), 0, SEEK_CUR));
> 
> Can you give me a pointer?

http://www.opengroup.org/onlinepubs/009695399/functions/open.html
"The file offset used to mark the current position within the file shall be set 
to the beginning of the file."

This is stated prior to any mention of O_APPEND, and O_APPEND does not change 
that statement.  And for O_APPEND|O_RDWR, it is a necessity.

Later, in http://www.opengroup.org/onlinepubs/009695399/functions/write.html:
"If the O_APPEND flag of the file status flags is set, the file offset shall be 
set to the end of the file prior to each write and no intervening file 
modification operation shall occur between changing the file offset and the 
write operation."

so:

int fd = open("existing", O_WRONLY | O_APPEND);
assert (0 == lseek (fd, 0, SEEK_CUR);
if (write (fd, " ", 1) > 0)
  {
    assert (0 != lseek (fd, 0, SEEK_CUR));
    assert (lseek (fd, 0, SEEK_CUR) == lseek (fd, 0, SEEK_END));
  }

-- 
Eric Blake



--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019