---
name: "quotactl"
section: "2"
platform: "macos"
package: "xnu"
version: "12377.121.6"
release: "macOS 26.5"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/quotactl"
---

# quotactl(2)

manipulate filesystem quotas

## NAME

**quotactl** – manipulate filesystem quotas

## SYNOPSIS

**#include \<sys/types.h\> /\* types needed by quota.h \*/**

**#include \<sys/quota.h\> /\* for disk quotas \*/**

*int*\

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

## DESCRIPTION

The **quotactl**() call enables, disables and manipulates filesystem quotas. A quota control command given by *cmd* operates on the given filename *path* for the given user *id*. The address of an optional command specific data structure, *addr*, may be given; its interpretation is discussed below with each command.

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 and group identifiers. The specific commands are:

- Q\_QUOTAON

  Enable disk quotas for the filesystem 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 filesystem 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\_GETQUOTA

  Get disk quota limits and current usage for the user or group (as determined by the command type) with identifier *id*. *Addr* is a pointer to a *struct*, *dqblk* structure.

- Q\_SETQUOTA

  Set disk quota limits for the user or group (as determined by the command type) with identifier *id*. *Addr* is a pointer to a *struct*, *dqblk* structure. The usage fields of the *dqblk* structure are ignored. This 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*. *Addr* is a pointer to a *struct*, *dqblk* structure. Only the usage fields are used. This 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* parameters are ignored.

- Q\_QUOTASTAT

  Get the enable status for the filesystem specified by *path*. The command type specifies the type of the quotas whose status is being queried. *Addr* is a pointer to an integer.  Upon return, this integer will hold a zero value if quotas for the given type are not enabled and a non-zero value if quotas for the given type are enabled. The *id* parameter is ignored.

## RETURN VALUES

A successful call returns 0, otherwise the value -1 is returned and the global variable *errno* indicates the reason for the failure.

## ERRORS

A **quotactl**() call will fail if:

- \[ENOTSUP\]

  The kernel has not been compiled with the QUOTA option.

- \[EUSERS\]

  The quota table cannot be expanded.

- \[EINVAL\]

  *Cmd* or the command type is invalid.

- \[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 a pathname exceeded  {NAME\_MAX} characters, or an entire path name exceeded  {PATH\_MAX} characters.

- \[ENOENT\]

  A filename does not exist.

- \[ELOOP\]

  Too many symbolic links were encountered in translating a pathname.

- \[EROFS\]

  In Q\_QUOTAON, the quota file resides on a read-only filesystem.

- \[EIO\]

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

- \[EFAULT\]

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

- \[EFAULT\]

  *Path* 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)

## 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).

## HISTORY

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