Not quite what you're asking for, but in a past life I wrote a fairly straightforward user space program that accomplished something like you described. IIRC it setup some named pipes and then allowed read/writes via those pipes to query/set the levels of the modem control lines (i.e. RTS/CTS and friends) via the standard ioctls...