Here is an interesting question: is
getloadavg()
a more or less encapsulated way of getting the load average than (on Linux) reading
/proc/loadavg
? I wound up thinking about this in the aftermath of feeling rueful about discovering Python's interface to
getloadavg()
, and I don't think it's as simple as I made it out to be in my original entry .
For me, what it comes down to is different perspectives. An interface like
getloadavg()
is nicely encapsulated for someone who can easily use the C library; you get an interface that works on any system that supports it. But for someone using alternate languages like Python, Perl, or Ruby, a file as an interface is much more accessible than a something that's wrapped up in the C library, and thus the interface it provides is much more abstract and usable. You would much rather be able to get the information by just reading a file than have it only available if you can figure out how to call a new C library function.
(I would go so far as to say that a new interface that is only available by calling a C library function is not so much wrapped up in the C library as locked up in the C library.)
So: from the perspective of getting the load average on a lot of different Unixes in a C program,
getloadavg()
is more encapsulated. But from the perspective of getting the load average from a lot of different environments on a Linux system, I'd argue that
/proc/loadavg
may be more abstracted and encapsulated, since it's available to everything and you use it just the same way in all of the languages.