If you want to mount a Path read-only on Linux (>2.6.26 kernels), you have to call two function calls:
mount(src_path, target_path, "", MS_BIND, NULL);
mount(src_path, target_path, "", MS_REMOUNT|MS_RDONLY|MS_BIND, NULL);
That is first bind the two paths and the remount the target path with the read-only flag. Some might find that not so obvious.