On 19 sep 2006, at 15:11, Rainer Stratmann wrote:

Second question is how to mount and umount for example "/dev/sda1" in a fpc
program.

Generic solution to this sort of problem:
a) look up how it has to be done in C
b) if it's a "standard" C function, just translate the prototype to Pascal and call it.

In this case, "man 2 mount" gives:

#include <sys/mount.h>

int mount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data);

So this becomes

uses ctypes;

{$linklib c}

function mount(source, target, filesystemtype: pchar; mountflags: culong; data: pointer); cdecl; external;

For the flags values, look in /usr/include/sys/mount. It contains

enum
{
  MS_RDONLY = 1,                /* Mount read-only.  */
#define MS_RDONLY       MS_RDONLY
  MS_NOSUID = 2,                /* Ignore suid and sgid bits.  */
#define MS_NOSUID       MS_NOSUID
etc.

So that becomes

const
  MS_RDONLY = 1;
  MS_NOSUID = 2;
etc.

You can also try running h2pas on it, but I don't know if it can cope with an "enum" definition like that (and if it translates it into a Pascal enumeration, you won't be able to "or" the values together).

If you are allergic to linking to libc, you can also try to translate it to a syscall.

The easiest solution is probably however simply calling the command line utility "mount" from within your program. That's the least likely to break, does not require libc linking either, the simplest to implement and does not require any C knowledge whatsoever.


Jonas
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to