Recursively copying a direntory using native C code : I was looking to implement the behavior of lunux system commands

1) `cp <src_dir> <dst_dir>` that copies everything inside the 'src_dir' into 'dst_dir' recurcively, and

2) `cp <src_file> <dst_file>` that copies 'src_file' into 'dst_file'

I looked online for help and got a few solutions but they did either of the following that I do not want to do:

i) using `rename(src_dir, dst_dir)`, which essentially 'moves' the contents and not copies.
I need to keep the contents of the 'src_dir' intact. 

ii) Opening the 'src_file' and reading/copying the contents into the 'dst_file'.
I would like to do this w/o opening the files and reading the content (i dont know if this makes sense in the 2nd 'cp' scenario above, but at least in the 1st one?).

Can the above be achieved using C (and no linux system calls)?

Thanks in advance!