Attenzione a quello che scrivi: con questo

codice:
(fd=open("config.dat","O_RDONLY") == -1)
a fd stai assegnando il valore booleano di open(...) == -1, questo perché l'operatore di uguaglianza == ha precedenza su quello di assegnazione =. Inoltre O_RDONLY è una costante simbolica, non va indicata come stringa, quindi elimina quei doppi apici.

Quando fai assegnazioni e confronti nei costrutti if() utilizza *sempre* le parentesi per "isolare" l'assegnazione, altrimenti errori come questi ti capiteranno spesso e non sono mai facilissimi da individuare (a volte comunque con opportune opzioni di compilazione viene sollevato un warning su certe espressioni).