Well, lsof does work on multiple operating systems including Linux and Solaris. For example, lsof revision 4.74 lists information about files opened by processes for the following UNIX dialects:
AIX 5.[123]
Apple Darwin 6.x and 7.x for Power Macintosh systems
BSDI BSD/OS 4.3.1 for x86-based systems
DEC OSF/1, Digital UNIX, Tru64 UNIX 4.0, and 5.1
FreeBSD 4.[2-9], 4.1[01], 5.[012] and 6.0 for x86-based systems
FreeBSD 5.[012] and 6.0 for Alpha, AMD64 and Sparc64 based systems
HP-UX 11.00 and 11.11
Linux 2.1.72 and above for x86-based systems
NetBSD 1.[456] and 2.x for Alpha, x86, and SPARC-based systems
NEXTSTEP 3.[13] for NEXTSTEP architectures
OpenBSD 2.[89] and 3.[0123456] for x86-based systems
OPENSTEP 4.x
Caldera OpenUNIX 8
SCO OpenServer Release 5.0.6 for x86-based systems
SCO|Caldera UnixWare 7.1.4 for x86-based systems
Solaris 2.6, 8, 9 and 10
The path to where lsof is installed my vary slightly but you can modify your code to pick the right one depending on which OS you are on at the time. So McDarren's example should give you what you need.