Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > how to rewind to file beginning immediately after writing...

Reply
Thread Tools

how to rewind to file beginning immediately after writing...

 
 
Rajorshi Biswas
Guest
Posts: n/a
 
      07-20-2006
Hi all,
I'm aware that this might not be a "C-specific" question, if so,
please let me know which group is the most appropriate for this kind of
question.

This is a question on unix filehandling in C, all I have to do is
rewind to the beginning of the file immediately after "write"ing some
bytes. My code looks something like this -


/* create a file and write something into it */
int fd = open("test.txt", O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR);
char b[100] = "this is some stupid text!\n";
write(fd, b, sizeof(b));

p = lseek(fd, 0, SEEK_SET);
printf("lseek returned = %d\n",p); /* returns 0 */

/* char block[BUFSIZ]; */
/* char tmp[] = "/tmp/fileXXXXXX"; */

newfd = mkstemp(tmp);

//copy contents of fd to newfd
while((nread = read(fd, block, sizeof(block))) > 0) /* READ FAILS
HERE <<< */
write(newfd, block, nread);



I am clueless as to why after a write to a new file, and an lseek to
position zero, a subsequent read fails. Even if I do an fsync() after
the write, it fails. I'm on RHEL3.


Thanks in advance.
Raj

 
Reply With Quote
 
 
 
 
Rajorshi Biswas
Guest
Posts: n/a
 
      07-20-2006
Sorry folks, fixed it - a simple case of changing O_WRONLY to O_RDWR ..
duh
Rajorshi Biswas wrote:
> Hi all,
> I'm aware that this might not be a "C-specific" question, if so,
> please let me know which group is the most appropriate for this kind of
> question.
>
> This is a question on unix filehandling in C, all I have to do is
> rewind to the beginning of the file immediately after "write"ing some
> bytes. My code looks something like this -
>
>
> /* create a file and write something into it */
> int fd = open("test.txt", O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR);
> char b[100] = "this is some stupid text!\n";
> write(fd, b, sizeof(b));
>
> p = lseek(fd, 0, SEEK_SET);
> printf("lseek returned = %d\n",p); /* returns 0 */
>
> /* char block[BUFSIZ]; */
> /* char tmp[] = "/tmp/fileXXXXXX"; */
>
> newfd = mkstemp(tmp);
>
> //copy contents of fd to newfd
> while((nread = read(fd, block, sizeof(block))) > 0) /* READ FAILS
> HERE <<< */
> write(newfd, block, nread);
>
>
>
> I am clueless as to why after a write to a new file, and an lseek to
> position zero, a subsequent read fails. Even if I do an fsync() after
> the write, it fails. I'm on RHEL3.
>
>
> Thanks in advance.
> Raj


 
Reply With Quote
 
 
 
 
Flash Gordon
Guest
Posts: n/a
 
      07-20-2006
Rajorshi Biswas wrote:
> Hi all,
> I'm aware that this might not be a "C-specific" question, if so,
> please let me know which group is the most appropriate for this kind of
> question.
>
> This is a question on unix filehandling in C, all I have to do is
> rewind to the beginning of the file immediately after "write"ing some
> bytes. My code looks something like this -
>
> /* create a file and write something into it */
> int fd = open("test.txt", O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR);


open and friends are not part of standard C so you would do better
asking on comp.unix.programmer, however I would point out that if
O_WRONLY has the obvious meaning of opening the file for writing only
you will not be able to read from it.

<snip>

> while((nread = read(fd, block, sizeof(block))) > 0) /* READ FAILS
> HERE <<< */


<snip>

If you want further information on using open and friends, please ask in
comp.unix.programmer
--
Flash Gordon, living in interesting times.
Web site - http://home.flash-gordon.me.uk/
comp.lang.c posting guidelines and intro:
http://clc-wiki.net/wiki/Intro_to_clc
 
Reply With Quote
 
Rajorshi Biswas
Guest
Posts: n/a
 
      07-20-2006
Thanks for pointing me to the appropriate group, Gordon!

~Rajorshi

Flash Gordon wrote:
> Rajorshi Biswas wrote:
> > Hi all,
> > I'm aware that this might not be a "C-specific" question, if so,
> > please let me know which group is the most appropriate for this kind of
> > question.
> >
> > This is a question on unix filehandling in C, all I have to do is
> > rewind to the beginning of the file immediately after "write"ing some
> > bytes. My code looks something like this -
> >
> > /* create a file and write something into it */
> > int fd = open("test.txt", O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR);

>
> open and friends are not part of standard C so you would do better
> asking on comp.unix.programmer, however I would point out that if
> O_WRONLY has the obvious meaning of opening the file for writing only
> you will not be able to read from it.
>
> <snip>
>
> > while((nread = read(fd, block, sizeof(block))) > 0) /* READ FAILS
> > HERE <<< */

>
> <snip>
>
> If you want further information on using open and friends, please ask in
> comp.unix.programmer
> --
> Flash Gordon, living in interesting times.
> Web site - http://home.flash-gordon.me.uk/
> comp.lang.c posting guidelines and intro:
> http://clc-wiki.net/wiki/Intro_to_clc


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
index of string from beginning of line vs beginning of file Jesse B. Ruby 9 03-27-2010 04:04 PM
Strategy for read and rewind file for unordered data iksrazal@terra.com.br Java 2 08-26-2005 03:01 PM
beginning page load immediately on postback with a long load time ? Mad Scientist Jr ASP .Net 7 06-30-2004 07:40 PM
[BUG] File#rewind, File#syswrite, File#pos on Cygwin build Alan Davies Ruby 7 11-27-2003 04:52 PM



Advertisments