TRUNCATE(3P)

πŸ’… TRUNCATE(3P) β€” POSIX Programmer's Manual πŸ’…

okay bestie, so this one lives in the POSIX Programmer's Manual (that's the 3P in the title, iykyk). Pull up a chair, we're truncating files. ✨


🌸 PROLOG 🌸

okay so real talk first: this manual page is part of the POSIX Programmer's Manual. The Linux implementation of this interface may differ (so like, go check the corresponding Linux manual page for the details on Linux behavior), or the interface may not even be implemented on Linux. no cap. 🫢


✨ NAME ✨

truncate β€” truncate a file to a specified length


πŸŽ€ SYNOPSIS πŸŽ€

#include <unistd.h>

int truncate(const char *path, off_t length);

πŸ’– DESCRIPTION πŸ’–

So the truncate() function shall cause the regular file named by path to have a size which shall be equal to length bytes. That's it, that's the whole vibe. πŸ’…

Now here's the tea on what actually happens depending on what size the file already was:

  • If the file previously was larger than length, the extra data is discarded. bye bye data 🩷
  • If the file was previously shorter than length, its size is increased, and the extended area appears as if it were zero-filled. iconic behavior honestly.

The application shall ensure that the process has write permission for the file. like, you gotta have the permission, bestie.

🚨 If the request would cause the file size to exceed the soft file size limit for the process, the request shall fail and the implementation shall generate the SIGXFSZ signal for the process. that's a whole jumpscare fr fr.

Also important, and this one's lowkey a plot twist: truncate() shall not modify the file offset for any open file descriptions associated with the file. it leaves your file offsets exactly where they were, main character energy, untouched. ✨

Upon successful completion, truncate() shall mark for update the last data modification and last file status change timestamps of the file, and the S_ISUID and S_ISGID bits of the file mode may be cleared. so those setuid/setgid bits? they might just ghost you. πŸ’€


πŸ¦‹ RETURN VALUE πŸ¦‹

Upon successful completion, truncate() shall return 0. slay. πŸŽ‰

Otherwise, -1 shall be returned, and errno set to indicate the error. not slay. 😭


πŸ”₯ ERRORS πŸ”₯

The truncate() function shall fail if:

  • EINTR β€” A signal was caught during execution. rude interruption ngl.
  • EINVAL β€” The length argument was less than 0. bestie, negative bytes?? no.
  • EFBIG or EINVAL β€” The length argument was greater than the maximum file size. (yes, either one, that's just how it is, don't @ me)
  • EACCES β€” A component of the path prefix denies search permission, or write permission is denied on the file.
  • EISDIR β€” The named file is a directory. that's not a file, that's a folder, bestie. πŸ™ˆ
  • ELOOP β€” A loop exists in symbolic links encountered during resolution of the path argument. symlinks going in circles like me at 2am.
  • ENAMETOOLONG β€” The length of a component of a pathname is longer than {NAME_MAX}.
  • ENOENT β€” A component of path does not name an existing file or path is an empty string.
  • ENOTDIR β€” A component of the path prefix names an existing file that is neither a directory nor a symbolic link to a directory, or the path argument contains at least one non-<slash> character and ends with one or more trailing <slash> characters and the last pathname component names an existing file that is neither a directory nor a symbolic link to a directory.
  • EROFS β€” The named file resides on a read-only file system. can't write to a read-only fs, the audacity.
  • EIO β€” An I/O error occurred while reading from or writing to a file system. the hardware said "not today".

The truncate() function may fail if:

  • ELOOP β€” More than {SYMLOOP_MAX} symbolic links were encountered during resolution of the path argument.
  • ENAMETOOLONG β€” The length of a pathname exceeds {PATH_MAX}, or pathname resolution of a symbolic link produced an intermediate result with a length that exceeds {PATH_MAX}.
🌈 heads up: the following sections are informative (aka they're lore, not law).

🧚 EXAMPLES 🧚

None. (yes literally none, the vibes are the example πŸŽ€)


πŸ“ APPLICATION USAGE πŸ“

None. (nothing to add, periodt ✨)


πŸ’œ RATIONALE πŸ’œ

None. (no reasoning given, it just is what it is πŸ’…)


⭐ FUTURE DIRECTIONS ⭐

None. (the future is unknown bestie 🌸)


πŸ‘‘ SEE ALSO πŸ‘‘

  • open()
  • The Base Definitions volume of POSIX.1‐2017, <unistd.h>

Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1-2017, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 7, 2018 Edition, Copyright (C) 2018 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any discrepancy between this version and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at http://www.opengroup.org/unix/online.html .

Any typographical or formatting errors that appear in this page are most likely to have been introduced during the conversion of the source files to man page format. To report such errors, see https://www.kernel.org/doc/man-pages/reporting_bugs.html .


and that's the whole page bestie 🫢 this masterpiece was brought to you by IEEE/The Open Group, 2017, and that's on TRUNCATE(3P). mwah πŸ’‹

πŸ“¦ where this page comes from