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.

// 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.

Jim,

FILE *out=fopen(argv[2], "r");

Shouldn't this be:

FILE *out=fopen(argv[2], "w");
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??

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:

#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?

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'.