The language doesnt matter that much, its more of a matter of preference, as for me i like C++...
Also its important that you decide what enviroment to work with, linux or win32.
In win32 you have a pretty robust serial api. Not sure if Linux supports it now, but when i checked it didnt support dsr/dtr, you could manually access them, but operating system would not work with them.
in windows you can do it basically 2 ways.. synch and asynch too... sync is blocking calls.. a function to read or write block till operations is finished, asynch (called overallping in win32) is the opposite... functions return immediatly and keep working in background...