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


 
Thread Tools Search this Thread
Top Forums Programming Doubt in C programming (copying data from one file to another)
# 1  
Old 10-10-2010
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  
Old 10-10-2010
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 07:36 PM..
# 3  
Old 10-10-2010
Jim,
Code:
FILE *out=fopen(argv[2], "r");

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

# 4  
Old 10-11-2010
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  
Old 10-11-2010
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  
Old 10-12-2010
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 Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

SQL: copying data up

I need to fix an SQL statement in MySQL that should calculate a field using values from two of the columns and I prefer to do this using set-based programming, ie not procedural. What needs to happen is that in a separate column called "delta" the value of "level" is copied depending on whether... (3 Replies)
Discussion started by: figaro
3 Replies

2. UNIX for Dummies Questions & Answers

Shell script to read lines in a text file and filter user data Shell Programming and Scripting

sxsaaas (3 Replies)
Discussion started by: VikrantD
3 Replies

3. UNIX for Dummies Questions & Answers

Copying part of a data file into another

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... (8 Replies)
Discussion started by: latsyrc
8 Replies

4. Solaris

Copying data from one file server to another

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 ... (2 Replies)
Discussion started by: br1an
2 Replies

5. Programming

SQL: copying data down

I have a series of observations of which one column is sometimes missing (zero): date temp delta 1977 284.54 29.84 1978 149.82 0 1979 320.71 28.45 1980 176.76 0 1981 854.65 0 1984 817.65 0 1985 990.58 27.98 1986 410.21 0 1987 405.93 0 1988 482.9 0 What I would like to achieve is a... (8 Replies)
Discussion started by: figaro
8 Replies

6. Programming

updating data in cvs file using c programming

hi every one i want to read and write data from cvs file using c program. but my problem is that at run time my data is increasing in both row wise and column wise. that means it is continuously updating in both direction. is there any way through which i can find the next colum or row for eg... (0 Replies)
Discussion started by: sajidtariq
0 Replies

7. Programming

Socket programming doubt

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... (5 Replies)
Discussion started by: _korg
5 Replies

8. Shell Programming and Scripting

Copying data from excel file

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... (1 Reply)
Discussion started by: 5ahen
1 Replies

9. UNIX for Advanced & Expert Users

socket programming doubt

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... (1 Reply)
Discussion started by: kic
1 Replies

10. Shell Programming and Scripting

Post Shell programming: Question about source a file and read data from the file

This is shell programming assignment. It needs to create a file called .std_dbrc contains STD_DBROOT=${HOME}/class/2031/Assgn3/STD_DB (which includes all my simple database files) and I am gonna use this .std_dbrc in my script file (read the data from the database files) like this: .... (3 Replies)
Discussion started by: ccwq
3 Replies
Login or Register to Ask a Question