How does a C program using popen(3) to interact with system compare with bash shell?

view story

http://stackoverflow.com – Are there any limitations using a C 'shell emulator' in this way for a user to send commands to the kernel (in linux)? As an afterthought question, if you set a user to not have shell access, what stops them using something like this to interact with the kernel? (by say running the program from shell_exec via php)? (by restricting the user, I mean in /etc/passwd) Thanks (HowTos)