# The Storage Kit: File System Info C Functions

Declared in: be/kernel/fs_info.h

Library: libroot.so

## Overview

From time to time, it can be useful to know certain information about the capabilities of the file system on a device. While the BVolume class provides you easy access to this information, it can occasionally be helpful to have more direct access to this information.

This section describes three C functions which can be used to obtain information about the file system on a device. One of these functions, `fs_stat_dev()`, returns this information given a device number. The other two functions, `dev_for_path()` and `next_dev()`, provide two ways to obtain a device number for use with `fs_stat_dev()`.

Note that these functions don't set `errno`.

## C Functions

### dev_for_path()

          dev_t dev_for_path(const char *path)

Given a pathname, returns the device number of the device on which the path is located. If the result is negative, it is a return code specifying an error.

RETURN CODES

- `B_ENTRY_NOT_FOUND.,path` does not exist, or is `NULL` or an empty string.
- `B_BAD_VALUE`. path is null or an empty string.
- `B_NAME_TOO_LONG`. path is too long.
- `B_NO_MEMORY`. Insufficient memory to complete the operation.
- `B_FILE_ERROR`. A file system error prevented the operation from succeeding.

### next_dev()

          dev_t next_dev(int32 *pos)

The `next_dev()` function allows you to iterate through all devices, receiving their device numbers as a result each time. If the result is negative, it is an error code. When the end of the device list is reached, the return value `B_BAD_VALUE` is returned.

You should initially set pos to 0, then call `next_dev()` in a loop to obtain each device number until an error occurs. For example:

       void ScanDevices(void) {
          int pos;

          pos = 0;
          while(next_dev(&pos) >=0) {
             do_something(pos);
          }
       }

RETURN CODES

- B_BAD_VALUE. No matching device found.

### fs_stat_dev()

          int fs_stat_dev(dev_t dev, fs_info *info)

          struct {} fs_info

`fs_stat_dev()` returns information about the specified device. This can be used in conjunction with `next_dev()` to scan all devices and record information your application requires.

This function returns 0 if the request was successful or -1 if an error occurred. Use the `errno()` function to determine what error in particular occurred.

The `fs_info` structure is defined as:

          typedef struct fs_info {
                dev_t      dev;
                ino_t      root;
                uint32      flags;
                off_t      block_size;
                off_t      io_size;
                off_t      total_blocks;
                off_t      free_blocks;
                off_t      total_nodes;
                off_t      free_nodes;
                char      device_name[128];
                char      volume_name[B_FILE_NAME_LENGTH];
                char      fsh_name[B_OS_NAME_LENGTH];
             };

The structure's fields are:

- `dev`. The device number of the device.
- root. The inode of the root of the device.
- `flags`. Flags describing the device's capabilities.
- `block_size`. The fundamental block size of the device.
- `io_size`. Optimal I/O size of the device.
- `total_blocks`. The total number of blocks on the device.
- `free_blocks`. The number of free (unused) blocks on the device.
- `total_nodes`. The total number of nodes on the device.
- `free_nodes`. The number of free (unused) nodes on the device.
- `device_name`. Name of the device holding the file system.
- `volume_name`. Name of the volume contained by the device.
- `fsh_name`. Name of the file system handler for the device.

The `flags` can be any combination of the following values, which specify the attributes of the file system on the device:

- `B_FS_IS_READONLY`. The file system on the device is read-only.
- `B_FS_IS_REMOVABLE`. The device contains removable media.
- `B_FS_IS_PERSISTENT`. Data written to the device remains even while the device is off.
- `B_FS_IS_SHARED`. The file system is being shared on a network.
- `B_FS_HAS_MIME`. The file system supports the MIME typing system used by the BeOS.
- `B_FS_HAS_ATTR`. The file system supports node attributes.
- `B_FS_HAS_QUERY`. THe file system supports the BeOS query mechanism.

The information in the `fs_info` structure is guaranteed to be internally consistent, but the structure as a whole should be considered to be out-of-date as soon as you receive it. It provides a picture of a device as it exists just before the info-retrieving function returns. In particular, the number of free blocks and of free nodes can easily change immediately after you receive this information.

RETURN CODES

- `B_OK`. The device was found; info contains valid information.
- `B_BAD_VALUE`. dev doesn't identify an existing device.

The Be Book, in lovely HTML, for BeOS Release 3.

Copyright © 1998 Be, Inc. All rights reserved.

Last modified March 26, 1998.