Copy a directory from source to destination
Overall, it is good, but I would apply the following changes:


Use const for read only function parameters. All the char* pointers you are passing to the functions are actually only read from, so you should use const char* to document that.
Personally, I'm not a big fan of returning -1, 0, 1, etc. This kind of error codes are popular with UNIX system calls, but I find them rather error prone. It is easy to make a mistake with the return value of a function if you don't carefully read the documentation. If the function has only two possible outcomes, success and failure, then include &lt;stdbool.h&gt; and return true or false. There is no chance of misunderstanding it this way.
A few magic numbers that could be named constants. For example, why did you choose 512 and 256 for buffer sizes? That is not obvious. Named constants would be better for these cases. Also, even though the 0700 constant on mkdir is well known for UNIX users, it might not be so for others less familiar with the architecture. I would also make that a named constant.
I suggest keeping the parameter names on function prototypes. In int copyFile(char*, char*); which one is the source file and which is the dest? Can't tell for sure just by reading the function prototype. Parameter names would make that clear without having to look at the implementation.
I suspect you have too many #includes for such a tiny program. &lt;time.h&gt; is certainly not used here. Make sure to only import the dependencies that your program actually requires.
A few system calls are not being checked for failure, so your program is not as robust as it could be.