---
name: "quotactl"
section: "2freebsd"
platform: "linux"
package: "freebsd-manpages"
version: "12.2-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/quotactl/2freebsd"
---

# quotactl(2freebsd)

manipulate file system quotas

## NAME

**quotactl** – manipulate file system quotas

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<sys/types.h\>**

**#include \<ufs/ufs/quota.h\>**

*int*\

**quotactl**(*const char \*path*, *int cmd*, *int id*, *void \*addr*);

## DESCRIPTION

The **quotactl**() system call enables, disables and manipulates file system quotas. A quota control command given by *cmd* operates on the given filename *path* for the given user or group *id*. (NOTE: One should use the QCMD macro defined in ⟨ufs/ufs/quota.h⟩ to formulate the value for *cmd*.) The address of an optional command specific data structure, *addr*, may be given; its interpretation is discussed below with each command.

For commands that use the *id* identifier, it must be either -1 or any positive value. The value of -1 indicates that the current UID or GID should be used. Any other negative value will return an error.

Currently quotas are supported only for the “ufs” file system. For “ufs”, a command is composed of a primary command (see below) and a command type used to interpret the *id*. Types are supported for interpretation of user identifiers (USRQUOTA) and group identifiers (GRPQUOTA). The “ufs” specific commands are:

- Q\_QUOTAON

  Enable disk quotas for the file system specified by *path*. The command type specifies the type of the quotas being enabled. The *addr* argument specifies a file from which to take the quotas. The quota file must exist; it is normally created with the [quotacheck(8)](/quotacheck/8.md) program. The *id* argument is unused. Only the super-user may turn quotas on.

- Q\_QUOTAOFF

  Disable disk quotas for the file system specified by *path*. The command type specifies the type of the quotas being disabled. The *addr* and *id* arguments are unused. Only the super-user may turn quotas off.

- Q\_GETQUOTASIZE

  Get the wordsize used to represent the quotas for the user or group (as determined by the command type). Possible values are 32 for the old-style quota file and 64 for the new-style quota file. The *addr* argument is a pointer to an integer into which the size is stored. The identifier *id* is not used.

- Q\_GETQUOTA

  Get disk quota limits and current usage for the user or group (as determined by the command type) with identifier *id*. The *addr* argument is a pointer to a *struct*, *dqblk* structure (defined in ⟨ufs/ufs/quota.h⟩).

- Q\_SETQUOTA

  Set disk quota limits for the user or group (as determined by the command type) with identifier *id*. The *addr* argument is a pointer to a *struct*, *dqblk* structure (defined in ⟨ufs/ufs/quota.h⟩). The usage fields of the *dqblk* structure are ignored. This system call is restricted to the super-user.

- Q\_SETUSE

  Set disk usage limits for the user or group (as determined by the command type) with identifier *id*. The *addr* argument is a pointer to a *struct*, *dqblk* structure (defined in ⟨ufs/ufs/quota.h⟩). Only the usage fields are used. This system call is restricted to the super-user.

- Q\_SYNC

  Update the on-disk copy of quota usages. The command type specifies which type of quotas are to be updated. The *id* and *addr* arguments are ignored.

## RETURN VALUES

The **quotactl()** function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

## ERRORS

The **quotactl**() system call will fail if:

- \[EOPNOTSUPP\]

  The kernel has not been compiled with the QUOTA option.

- \[EUSERS\]

  The quota table cannot be expanded.

- \[EINVAL\]

  The *cmd* argument or the command type is invalid. In Q\_GETQUOTASIZE, Q\_GETQUOTA, Q\_SETQUOTA, and Q\_SETUSE, quotas are not currently enabled for this file system.

  The *id* argument to Q\_GETQUOTA, Q\_SETQUOTA or Q\_SETUSE is a negative value.

- \[EACCES\]

  In Q\_QUOTAON, the quota file is not a plain file.

- \[EACCES\]

  Search permission is denied for a component of a path prefix.

- \[ENOTDIR\]

  A component of a path prefix was not a directory.

- \[ENAMETOOLONG\]

  A component of either pathname exceeded 255 characters, or the entire length of either path name exceeded 1023 characters.

- \[ENOENT\]

  A filename does not exist.

- \[ELOOP\]

  Too many symbolic links were encountered in translating a pathname.

- \[EROFS\]

  In Q\_QUOTAON, either the file system on which quotas are to be enabled is mounted read-only or the quota file resides on a read-only file system.

- \[EIO\]

  An I/O error occurred while reading from or writing to a file containing quotas.

- \[EINTEGRITY\]

  Corrupted data was detected while reading from the file system.

- \[EFAULT\]

  An invalid *addr* was supplied; the associated structure could not be copied in or out of the kernel.

- \[EFAULT\]

  The *path* argument points outside the process's allocated address space.

- \[EPERM\]

  The call was privileged and the caller was not the super-user.

## SEE ALSO

[quota(1)](/quota/1.md), [fstab(5)](/fstab/5.md), [edquota(8)](/edquota/8.md), [quotacheck(8)](/quotacheck/8.md), [quotaon(8)](/quotaon/8.md), [repquota(8)](/repquota/8.md)

## HISTORY

The **quotactl**() system call appeared in 4.3BSD-Reno.

## BUGS

There should be some way to integrate this call with the resource limit interface provided by [setrlimit(2)](/setrlimit/2.md) and [getrlimit(2)](/getrlimit/2.md).
