program mounts;
{$mode objfpc}{$H+}
uses
BSD;
const
NOTE_MOUNTED = $0008;
NOTE_UMOUNTED = $0010;
var
ke: TKEvent;
kq: Longint;
begin
kq := kqueue();
if kq < 0 then
begin
WriteLn('ERROR: kqueue()');
exit;
end; { if }
FillByte(ke, SizeOf(ke), 0);
EV_SET(@ke, 0, EVFILT_FS, EV_ADD or EV_CLEAR, 0, 0, nil);
if kevent(kq, @ke, 1, nil, 0, nil) = -1 then
begin
WriteLn('ERROR: kevent()');
exit;
end; { if }
FillByte(ke, SizeOf(ke), 0);
while true do
begin
if kevent(kq, nil, 0, @ke, 1, nil) > 0 then
begin
if (ke.FFlags and NOTE_MOUNTED <> 0) then
WriteLn('Filesystem mounted')
else if (ke.FFlags and NOTE_UMOUNTED <> 0) then
begin
WriteLn('Filesystem umounted');
break;
end; { else if }
end; { if }
end; { while }
end.