Doubt in C programming (copying data from one file to another)


Login or Register to Reply

 
Thread Tools Search this Thread
# 1  
Doubt in C programming (copying data from one file to another)

Hello, i'm new to the forum and so am i to C programming.
Recently i've gotten a task to create a program that will read an existing .bin file and copy the data to a non existing (so i have to create it) .txt file (some type of conversion)

Now, i now how to put the arguments, opening and creating the files, the doubts i get is in the part where i have to read the .bin and paste it to the .txt

I thought of using the function read, but i'm not sure how to do the copying part this way.
I also thought maybe getc and putc might help?

As you see i'm really lost, i'd gladly recieve a bit of help that could put me again on the road.
Thank you very much.
Lyric.
# 2  
Code:
// copy.c useage: copy inputfile outputfile
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

void copy(FILE *in, FILE *out)
{
     char buf[8192]={0x0};
     ssize_t len=0;
     while( ( len=read(fileno(in), buf, sizeof(buf) ) )>0)
            write(fileno(out), buf, len);
}

int main(int argc, char **argv)
{
          FILE *in=fopen(argv[1], "r");
          FILE *out=fopen(argv[2], "w");  /* edit thanks to franklin! change to "w"  */
          if(in==NULL || out==NULL)
          {
                perror("cannot open file");
                exit(1);
          }
          copy(in, out);
          fclose(in);
          fclose(out);
          return 0;
}

If you read K&R there is an even simpler version of copy a file in there.

Last edited by jim mcnamara; 10-10-2010 at 06:36 PM..
# 3  
Jim,
Code:
FILE *out=fopen(argv[2], "r");

Shouldn't this be:
Code:
FILE *out=fopen(argv[2], "w");

# 4  
Code:
void copy(FILE *in, FILE *out)
{
     char buf[8192]={0x0};
     ssize_t len=0;
     while( ( len=read(fileno(in), buf, sizeof(buf) ) )>0)
            write(fileno(out), buf, len);
}

Why bother converting between 'FILE *' and 'int'??
does partial write need be considered??
# 5  
Why bother converting between 'FILE *' and 'int'??
Because it is easier to use fopen for a beginner. open requires flags and mode settings.

does partial write need be considered??
That is what len does. It remembers how many bytes the read call got, for the write call.
the K&R code which seems to confuse people:
Code:
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv)
{
    char buf[8192]={0x0};
    int sz=0;
    while( (sz=read(0, buf, sizeof(buf) ) )>0  )
           write(1, buf, sz);
    return 0;
}

-- usage: ./copy < infile > outfile
That simple enough?
# 6  
Quote:
Originally Posted by jim mcnamara
does partial write need be considered??
That is what len does. It remembers how many bytes the read call got, for the write call.
the K&R code which seems to confuse people:
by 'partial write', I mean that "write does not promise it will the exact number of bytes you required on success, It will return the actual number of bytes written"
'len' has nothing to do with this.

my fault.
this solution event does not check the return value of 'write'.
Login or Register to Reply

|
Thread Tools Search this Thread
Search this Thread:
Advanced Search

More UNIX and Linux Forum Topics You Might Find Helpful
Copying part of a data file into another
latsyrc
Hi, I have a large number of data files each containing simple integers from 1 to around 25000 in ascending order. However, they are not in a specific progression; some numbers are missing in each file. For ex. datfile1 may have the numbers in order 1 2 4 6 7 8 12 ... 24996 24999 while datfile2...... UNIX for Dummies Questions & Answers
8
UNIX for Dummies Questions & Answers
Copying data from one file server to another
br1an
Hello people, I have a question regarding transferring data from one file server to another. The server is a Solaris 9 box The old file server is connected via Ethernet cable, and the new file server we are switching is a Fiber channel. can I use the dd if=server:/app1 of=server2:/app1 ...... Solaris
2
Solaris
Socket programming doubt
_korg
I am aware that TCP sockets are stream based and a single write may not send all the data. Is this the case with recv as well ? I am in process of deciding a protocol to handle communication. I wanted some tips as to handle transactions. The data sent / received would be fixed length. Hence...... Programming
5
Programming
Copying data from excel file
5ahen
Hii friends, I am a newbie to unix/shell scripting and got stuck in implementing a functionality.Dear experts,kindly spare some time to bring me out of dark pit :confused:.. My requirement is somewhat wierd,let me explain what i have and what i need to do... 1) there are several excel...... Shell Programming and Scripting
1
Shell Programming and Scripting
socket programming doubt
kic
can we create multiple sockets in a machine with different ip addresses and all port listen to one single port ???? i hav one tool which creates virtual interface and i m using that to create multiple ip addresses in a linux machine and i use thos eip addresses to create multiple sockets and...... UNIX for Advanced & Expert Users
1
UNIX for Advanced & Expert Users