March 16, 2008 TRUNCATE 2

### NAME

truncate, ftruncate - truncate a file to a specified length

### LIBRARY

Standard C Library (libc, -lc)

### SYNOPSIS

```int` truncate(```const char *path``, off_t length`)
```int` ftruncate(```int fd``, off_t length`)

### DESCRIPTION

truncate(``) causes the file named by ```path` or referenced by ```fd` to have a size of ```length` bytes. If the file previously was larger than this size, the extra data is discarded. If it was previously shorter than ```length`, its size is increased to the specified value and the extended area appears as if it were zero-filled.

With ftruncate(``), the file must be open for writing; for truncate(``), the process must have write permissions for the file.

### RETURN VALUES

A value of 0 is returned if the call succeeds. If the call fails a -1 is returned, and the global variable errno specifies the error.

### ERRORS

Error return codes common to truncate(``) and ftruncate(``) are:

[```EISDIR`]
  The named file is a directory.

[```EROFS`]
  The named file resides on a read-only file system.

[```ETXTBSY`]
  The file is a pure procedure (shared text) file that is being executed.

[```EIO`]
  An I/O error occurred updating the inode.

[```ENOSPC`]
  There was no space in the filesystem to complete the operation.

Error codes specific to truncate(``) are:

[```ENOTDIR`]
  A component of the path prefix is not a directory.

[```ENAMETOOLONG`]
  A component of a pathname exceeded ```{NAME_MAX}` characters, or an entire path name exceeded ```{PATH_MAX}` characters.

[```ENOENT`]
  The named file does not exist.

[```EACCES`]
  Search permission is denied for a component of the path prefix, or the named file is not writable by the user.

[```ELOOP`]
  Too many symbolic links were encountered in translating the pathname.

[```EFAULT`]
  ```path` points outside the process's allocated address space.

Error codes specific to ftruncate(``) are:

[```EBADF`]
  The ```fd` is not a valid descriptor.

[```EINVAL`]
  The ```fd` references a socket, not a file, or the ```fd` is not open for writing.

### SEE ALSO

open(2)

### STANDARDS

Use of truncate(``) to extend a file is an IEEE Std 1003.1-2004 (``POSIX.1'') extension, and is thus not portable. Files can be extended in a portable way seeking (using lseek(2)) to the required size and writing a single character with write(2).

### HISTORY

The truncate(``) and ftruncate(``) function calls appeared in 4.2BSD.

### BUGS

These calls should be generalized to allow ranges of bytes in a file to be discarded.