El chmod en C se usa sin "0x", prueba:
chmod(fileName,00777);
Para el caso de tu programa, creo que al OPEN debes indicar cada permiso con RWX y asi tu umask te limita en la creacion del archivo, ejemplo:
file = open(name,O_RDWR | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO);
Y si tu umask es 0022, entonces tus archivos se crearan con "-rwxr-xr-x"..