5. Files and Directories Manager

5.1. Introduction

The files and directories manager is ...

The directives provided by the files and directories manager are:

  • opendir - Open a Directory
  • readdir - Reads a directory
  • rewinddir - Resets the readdir() pointer
  • scandir - Scan a directory for matching entries
  • telldir - Return current location in directory stream
  • closedir - Ends directory read operation
  • getdents - Get directory entries
  • chdir - Changes the current working directory
  • fchdir - Changes the current working directory
  • getcwd - Gets current working directory
  • open - Opens a file
  • creat - Create a new file or rewrite an existing one
  • umask - Sets a file creation mask
  • link - Creates a link to a file
  • symlink - Creates a symbolic link to a file
  • readlink - Obtain the name of the link destination
  • mkdir - Makes a directory
  • mkfifo - Makes a FIFO special file
  • unlink - Removes a directory entry
  • rmdir - Delete a directory
  • rename - Renames a file
  • stat - Gets information about a file.
  • fstat - Gets file status
  • lstat - Gets file status
  • access - Check permissions for a file.
  • chmod - Changes file mode
  • fchmod - Changes permissions of a file
  • chown - Changes the owner and/ or group of a file
  • utime - Change access and/or modification times of an inode
  • ftruncate - Truncate a file to a specified length
  • truncate - Truncate a file to a specified length
  • pathconf - Gets configuration values for files
  • fpathconf - Get configuration values for files
  • mknod - Create a directory

5.2. Background

5.2.1. Path Name Evaluation

A pathname is a string that consists of no more than PATH_MAX bytes, including the terminating null character. A pathname has an optional beginning slash, followed by zero or more filenames separated by slashes. If the pathname refers to a directory, it may also have one or more trailing slashes. Multiple successive slahes are considered to be the same as one slash.

POSIX allows a pathname that begins with precisely two successive slashes to be interpreted in an implementation-defined manner. RTEMS does not currently recognize this as a special condition. Any number of successive slashes is treated the same as a single slash. POSIX requires that an implementation treat more than two leading slashes as a single slash.

5.3. Operations

There is currently no text in this section.

5.4. Directives

This section details the files and directories manager’s directives. A subsection is dedicated to each of this manager’s directives and describes the calling sequence, related constants, usage, and status codes.

5.4.1. opendir - Open a Directory

CALLING SEQUENCE:

#include <sys/types.h>
#include <dirent.h>
int opendir(
    const char *dirname
);

STATUS CODES:

EACCES Search permission was denied on a component of the path prefix of dirname, or read permission is denied
EMFILE Too many file descriptors in use by process
ENFILE Too many files are currently open in the system.
ENOENT Directory does not exist, or name is an empty string.
ENOMEM Insufficient memory to complete the operation.
ENOTDIR name is not a directory.

DESCRIPTION:

This routine opens a directory stream corresponding to the directory specified by the dirname argument. The directory stream is positioned at the first entry.

NOTES:

The routine is implemented in Cygnus newlib.

5.4.2. readdir - Reads a directory

CALLING SEQUENCE:

#include <sys/types.h>
#include <dirent.h>
    int readdir(
    DIR *dirp
);

STATUS CODES:

EBADF Invalid file descriptor

DESCRIPTION:

The readdir() function returns a pointer to a structure dirent representing the next directory entry from the directory stream pointed to by dirp. On end-of-file, NULL is returned.

The readdir() function may (or may not) return entries for . or .. Your program should tolerate reading dot and dot-dot but not require them.

The data pointed to be readdir() may be overwritten by another call to readdir() for the same directory stream. It will not be overwritten by a call for another directory.

NOTES:

If ptr is not a pointer returned by malloc(), calloc(), or realloc() or has been deallocated with free() or realloc(), the results are not portable and are probably disastrous.

The routine is implemented in Cygnus newlib.

5.4.3. rewinddir - Resets the readdir() pointer

CALLING SEQUENCE:

#include <sys/types.h>
#include <dirent.h>
void rewinddir(
    DIR *dirp
);

STATUS CODES:

No value is returned.

DESCRIPTION:

The rewinddir() function resets the position associated with the directory stream pointed to by dirp. It also causes the directory stream to refer to the current state of the directory.

NOTES:

NONE

If dirp is not a pointer by opendir(), the results are undefined.

The routine is implemented in Cygnus newlib.

5.4.4. scandir - Scan a directory for matching entries

CALLING SEQUENCE:

#include <dirent.h>
int scandir(
    const char       *dir,
    struct dirent ***namelist,
    int  (*select)(const struct dirent *),
    int  (*compar)(const struct dirent **, const struct dirent **)
);

STATUS CODES:

ENOMEM Insufficient memory to complete the operation.

DESCRIPTION:

The scandir() function scans the directory dir, calling select() on each directory entry. Entries for which select() returns non-zero are stored in strings allocated via malloc(), sorted using qsort() with the comparison function compar(), and collected in array namelist which is allocated via malloc(). If select is NULL, all entries are selected.

NOTES:

The routine is implemented in Cygnus newlib.

5.4.5. telldir - Return current location in directory stream

CALLING SEQUENCE:

#include <dirent.h>
off_t telldir(
    DIR *dir
);

STATUS CODES:

EBADF Invalid directory stream descriptor dir.

DESCRIPTION:

The telldir() function returns the current location associated with the directory stream dir.

NOTES:

The routine is implemented in Cygnus newlib.

5.4.6. closedir - Ends directory read operation

CALLING SEQUENCE:

#include <sys/types.h>
#include <dirent.h>
int closedir(
    DIR *dirp
);

STATUS CODES:

EBADF Invalid file descriptor

DESCRIPTION:

The directory stream associated with dirp is closed. The value in dirp may not be usable after a call to closedir().

NOTES:

NONE

The argument to closedir() must be a pointer returned by opendir(). If it is not, the results are not portable and most likely unpleasant.

The routine is implemented in Cygnus newlib.

5.4.7. chdir - Changes the current working directory

CALLING SEQUENCE:

#include <unistd.h>
int chdir(
    const char *path
);

STATUS CODES:

On error, this routine returns -1 and sets errno to one of the following:

EACCES Search permission is denied for a directory in a file’s path prefix.
ENAMETOOLONG Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in effect.
ENOENT A file or directory does not exist.
ENOTDIR A component of the specified pathname was not a directory when directory was expected.

DESCRIPTION:

The chdir() function causes the directory named by path to become the current working directory; that is, the starting point for searches of pathnames not beginning with a slash.

If chdir() detects an error, the current working directory is not changed.

NOTES:

NONE

5.4.8. fchdir - Changes the current working directory

CALLING SEQUENCE:

#include <unistd.h>
int fchdir(
    int fd
);

STATUS CODES:

On error, this routine returns -1 and sets errno to one of the following:

EACCES Search permission is denied for a directory in a file’s path prefix.
ENAMETOOLONG Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in effect.
ENOENT A file or directory does not exist.
ENOTDIR A component of the specified pathname was not a directory when directory was expected.

DESCRIPTION:

The fchdir() function causes the directory named by fd to become the current working directory; that is, the starting point for searches of pathnames not beginning with a slash.

If fchdir() detects an error, the current working directory is not changed.

NOTES:

NONE

5.4.9. getcwd - Gets current working directory

CALLING SEQUENCE:

#include <unistd.h>
int getcwd( void );

STATUS CODES:

EINVAL Invalid argument
ERANGE Result is too large
EACCES Search permission is denied for a directory in a file’s path prefix.

DESCRIPTION:

The getcwd() function copies the absolute pathname of the current working directory to the character array pointed to by buf. The size argument is the number of bytes available in buf

NOTES:

There is no way to determine the maximum string length that fetcwd() may need to return. Applications should tolerate getting ERANGE and allocate a larger buffer.

It is possible for getcwd() to return EACCES if, say, login puts the process into a directory without read access.

The 1988 standard uses int instead of size_t for the second parameter.

5.4.10. open - Opens a file

CALLING SEQUENCE:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(
    const char *path,
    int         oflag,
    mode_t      mode
);

STATUS CODES:

EACCES Search permission is denied for a directory in a file’s path prefix.
EEXIST The named file already exists.
EINTR Function was interrupted by a signal.
EISDIR Attempt to open a directory for writing or to rename a file to be a directory.
EMFILE Too many file descriptors are in use by this process.
ENAMETOOLONG Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in effect.
ENFILE Too many files are currently open in the system.
ENOENT A file or directory does not exist.
ENOSPC No space left on disk.
ENOTDIR A component of the specified pathname was not a directory when a directory was expected.
ENXIO No such device. This error may also occur when a device is not ready, for example, a tape drive is off-line.
EROFS Read-only file system.

DESCRIPTION:

The open function establishes a connection between a file and a file descriptor. The file descriptor is a small integer that is used by I/O functions to reference the file. The path argument points to the pathname for the file.

The oflag argument is the bitwise inclusive OR of the values of symbolic constants. The programmer must specify exactly one of the following three symbols:

O_RDONLY Open for reading only.
O_WRONLY Open for writing only.
O_RDWR Open for reading and writing.

Any combination of the following symbols may also be used.

O_APPEND Set the file offset to the end-of-file prior to each write.
O_CREAT If the file does not exist, allow it to be created. This flag indicates that the mode argument is present in the call to open.
O_EXCL This flag may be used only if O_CREAT is also set. It causes the call to open to fail if the file already exists.
O_NOCTTY Do not assign controlling terminal.
O_NONBLOCK Do no wait for the device or file to be ready or available. After the file is open, the read and write calls return immediately. If the process would be delayed in the read or write opermation, -1 is returned and``errno`` is set to EAGAIN instead of blocking the caller.
O_TRUNC This flag should be used only on ordinary files opened for writing. It causes the file to be tuncated to zero length..

Upon successful completion, open returns a non-negative file descriptor.

NOTES:

NONE

5.4.11. creat - Create a new file or rewrite an existing one

CALLING SEQUENCE:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int creat(
    const char *path,
    mode_t      mode
);

STATUS CODES:

EEXIST path already exists and O_CREAT and O_EXCL were used.
EISDIR path refers to a directory and the access requested involved writing
ETXTBSY path refers to an executable image which is currently being executed and write access was requested
EFAULT path points outside your accessible address space
EACCES The requested access to the file is not allowed, or one of the directories in path did not allow search (execute) permission.
ENAMETOOLONG path was too long.
ENOENT A directory component in path does not exist or is a dangling symbolic link.
ENOTDIR A component used as a directory in path is not, in fact, a directory.
EMFILE The process alreadyh has the maximum number of files open.
ENFILE The limit on the total number of files open on the system has been reached.
ENOMEM Insufficient kernel memory was available.
EROFS path refers to a file on a read-only filesystem and write access was requested

DESCRIPTION:

creat attempts to create a file and return a file descriptor for use in read, write, etc.

NOTES:

NONE

The routine is implemented in Cygnus newlib.

5.4.12. umask - Sets a file creation mask.

CALLING SEQUENCE:

#include <sys/types.h>
#include <sys/stat.h>
mode_t umask(
    mode_t cmask
);

STATUS CODES:

DESCRIPTION:

The umask() function sets the process file creation mask to cmask. The file creation mask is used during open(), creat(), mkdir(), mkfifo() calls to turn off permission bits in the mode argument. Bit positions that are set in cmask are cleared in the mode of the created file.

NOTES:

NONE

The cmask argument should have only permission bits set. All other bits should be zero.

In a system which supports multiple processes, the file creation mask is inherited across fork() and exec() calls. This makes it possible to alter the default permission bits of created files. RTEMS does not support multiple processes so this behavior is not possible.

5.4.16. mkdir - Makes a directory

CALLING SEQUENCE:

#include <sys/types.h>
#include <sys/stat.h>
int mkdir(
    const char *path,
    mode_t      mode
);

STATUS CODES:

EACCES Search permission is denied for a directory in a file’s path prefix
EEXIST The name file already exist.
EMLINK The number of links would exceed LINK_MAX
ENAMETOOLONG Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in effect.
ENOENT A file or directory does not exist.
ENOSPC No space left on disk.
ENOTDIR A component of the specified pathname was not a directory when a directory was expected.
EROFS Read-only file system.

DESCRIPTION:

The mkdir() function creates a new diectory named path. The permission bits (modified by the file creation mask) are set from mode. The owner and group IDs for the directory are set from the effective user ID and group ID.

The new directory may (or may not) contain entries for . and .. but is otherwise empty.

NOTES:

NONE

5.4.17. mkfifo - Makes a FIFO special file

CALLING SEQUENCE:

#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(
    const char *path,
    mode_t      mode
);

STATUS CODES:

EACCES Search permission is denied for a directory in a file’s path prefix
EEXIST The named file already exists.
ENOENT A file or directory does not exist.
ENOSPC No space left on disk.
ENOTDIR A component of the specified path was not a directory when a directory was expected.
EROFS Read-only file system.

DESCRIPTION:

The mkfifo() function creates a new FIFO special file named path. The permission bits (modified by the file creation mask) are set from mode. The owner and group IDs for the FIFO are set from the efective user ID and group ID.

NOTES:

NONE

5.4.18. unlink - Removes a directory entry

CALLING SEQUENCE:

#include <unistd.h>
int unlink(
    const char path
);

STATUS CODES:

EACCES Search permission is denied for a directory in a file’s path prefix
EBUSY The directory is in use.
ENAMETOOLONG Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in effect.
ENOENT A file or directory does not exist.
ENOTDIR A component of the specified path was not a directory when a directory was expected.
EPERM Operation is not permitted. Process does not have the appropriate priviledges or permissions to perform the requested operations.
EROFS Read-only file system.

DESCRIPTION:

The unlink function removes the link named by path and decrements the link count of the file referenced by the link. When the link count goes to zero and no process has the file open, the space occupied by the file is freed and the file is no longer accessible.

NOTES:

NONE

5.4.19. rmdir - Delete a directory

CALLING SEQUENCE:

#include <unistd.h>
int rmdir(
    const char *pathname
);

STATUS CODES:

EPERM The filesystem containing pathname does not support the removal of directories.
EFAULT pathname points ouside your accessible address space.
EACCES Write access to the directory containing pathname was not allowed for the process’s effective uid, or one of the directories in``pathname`` did not allow search (execute) permission.
EPERM The directory containing pathname has the stickybit (S_ISVTX) set and the process’s effective uid is neither the uid of the file to be delected nor that of the director containing it.
ENAMETOOLONG pathname was too long.
ENOENT A dirctory component in pathname does not exist or is a dangling symbolic link.
ENOTDIR pathname, or a component used as a directory in pathname, is not, in fact, a directory.
ENOTEMPTY pathname contains entries other than . and .. .
EBUSY pathname is the current working directory or root directory of some process
EBUSY pathname is the current directory or root directory of some process.
ENOMEM Insufficient kernel memory was available
EROGS pathname refers to a file on a read-only filesystem.
ELOOP pathname contains a reference to a circular symbolic link

DESCRIPTION:

rmdir deletes a directory, which must be empty

NOTES:

NONE

5.4.20. rename - Renames a file

CALLING SEQUENCE:

#include <unistd.h>
int rename(
    const char *old,
    const char *new
);

STATUS CODES:

EACCES Search permission is denied for a directory in a file’s path prefix.
EBUSY The directory is in use.
EEXIST The named file already exists.
EINVAL Invalid argument.
EISDIR Attempt to open a directory for writing or to rename a file to be a directory.
EMLINK The number of links would exceed LINK_MAX.
ENAMETOOLONG Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in effect.
ENOENT A file or directory does no exist.
ENOSPC No space left on disk.
ENOTDIR A component of the specified pathname was not a directory when a directory was expected.
ENOTEMPTY Attempt to delete or rename a non-empty directory.
EROFS Read-only file system
EXDEV Attempt to link a file to another file system.

DESCRIPTION:

The rename() function causes the file known bo old to now be known as new.

Ordinary files may be renamed to ordinary files, and directories may be renamed to directories; however, files cannot be converted using rename(). The new pathname may not contain a path prefix of old.

NOTES:

If a file already exists by the name new, it is removed. The rename() function is atomic. If the rename() detects an error, no files are removed. This guarantees that the rename("x", "x") does not remove x.

You may not rename dot or dot-dot.

The routine is implemented in Cygnus newlib using link() and unlink().

5.4.21. stat - Gets information about a file

CALLING SEQUENCE:

#include <sys/types.h>
#include <sys/stat.h>
int stat(
    const char  *path,
    struct stat *buf
);

STATUS CODES:

EACCES Search permission is denied for a directory in a file’s path prefix.
EBADF Invalid file descriptor.
ENAMETOOLONG Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in effect.
ENOENT A file or directory does not exist.
ENOTDIR A component of the specified pathname was not a directory when a directory was expected.

DESCRIPTION:

The path argument points to a pathname for a file. Read, write, or execute permission for the file is not required, but all directories listed in path must be searchable. The stat() function obtains information about the named file and writes it to the area pointed to by buf.

NOTES:

NONE

5.4.22. fstat - Gets file status

CALLING SEQUENCE:

#include <sys/types.h>
#include <sys/stat.h>
int fstat(
    int          fildes,
    struct stat *buf
);

STATUS CODES:

EBADF Invalid file descriptor

DESCRIPTION:

The fstat() function obtains information about the file associated with fildes and writes it to the area pointed to by the buf argument.

NOTES:

If the filesystem object referred to by fildes is a link, then the information returned in buf refers to the destination of that link. This is in contrast to lstat() which does not follow the link.

5.4.23. lstat - Gets file status

CALLING SEQUENCE:

#include <sys/types.h>
#include <sys/stat.h>
int lstat(
    int          fildes,
    struct stat *buf
);

STATUS CODES:

EBADF Invalid file descriptor

DESCRIPTION:

The lstat() function obtains information about the file associated with fildes and writes it to the area pointed to by the buf argument.

NOTES:

If the filesystem object referred to by fildes is a link, then the information returned in buf refers to the link itself. This is in contrast to fstat() which follows the link.

The lstat() routine is defined by BSD 4.3 and SVR4 and not included in POSIX 1003.1b-1996.

5.4.24. access - Check permissions for a file

CALLING SEQUENCE:

#include <unistd.h>
int access(
    const char *pathname,
    int         mode
);

STATUS CODES:

EACCES The requested access would be denied, either to the file itself or one of the directories in pathname.
EFAULT pathname points outside your accessible address space.
EINVAL Mode was incorrectly specified.
ENAMETOOLONG pathname is too long.
ENOENT A directory component in pathname would have been accessible but does not exist or was a dangling symbolic link.
ENOTDIR A component used as a directory in pathname is not, in fact, a directory.
ENOMEM Insufficient kernel memory was available.

DESCRIPTION:

Access checks whether the process would be allowed to read, write or test for existence of the file (or other file system object) whose name is pathname. If pathname is a symbolic link permissions of the file referred by this symbolic link are tested.

Mode is a mask consisting of one or more of R_OK, W_OK, X_OK and F_OK.

NOTES:

NONE

5.4.25. chmod - Changes file mode.

CALLING SEQUENCE:

#include <sys/types.h>
#include <sys/stat.h>
int chmod(
    const char *path,
    mode_t      mode
);

STATUS CODES:

EACCES Search permission is denied for a directory in a file’s path prefix
ENAMETOOLONG Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in effect.
ENOENT A file or directory does not exist.
ENOTDIR A component of the specified pathname was not a directory when a directory was expected.
EPERM Operation is not permitted. Process does not have the appropriate priviledges or permissions to perform the requested operations.
EROFS Read-only file system.

DESCRIPTION:

Set the file permission bits, the set user ID bit, and the set group ID bit for the file named by path to mode. If the effective user ID does not match the owner of the file and the calling process does not have the appropriate privileges, chmod() returns -1 and sets errno to EPERM.

NOTES:

NONE

5.4.26. fchmod - Changes permissions of a file

CALLING SEQUENCE:

#include <sys/types.h>
#include <sys/stat.h>
int fchmod(
    int    fildes,
    mode_t mode
);

STATUS CODES:

EACCES Search permission is denied for a directory in a file’s path prefix.
EBADF The descriptor is not valid.
EFAULT path points outside your accessible address space.
EIO A low-level I/o error occurred while modifying the inode.
ELOOP path contains a circular reference
ENAMETOOLONG Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in effect.
ENOENT A file or directory does no exist.
ENOMEM Insufficient kernel memory was avaliable.
ENOTDIR A component of the specified pathname was not a directory when a directory was expected.
EPERM The effective UID does not match the owner of the file, and is not zero
EROFS Read-only file system

DESCRIPTION:

The mode of the file given by path or referenced by filedes is changed.

NOTES:

NONE

5.4.27. getdents - Get directory entries

CALLING SEQUENCE:

#include <unistd.h>
#include <linux/dirent.h>
#include <linux/unistd.h>
long getdents(
    int   dd_fd,
    char *dd_buf,
    int   dd_len
);

STATUS CODES:

A successful call to getdents returns th the number of bytes read. On end of directory, 0 is returned. When an error occurs, -1 is returned, and errno is set appropriately.

EBADF Invalid file descriptor fd.
EFAULT Argument points outside the calling process’s address space.
EINVAL Result buffer is too small.
ENOENT No such directory.
ENOTDIR File descriptor does not refer to a directory.

DESCRIPTION:

getdents reads several dirent structures from the directory pointed by fd into the memory area pointed to by dirp. The parameter count is the size of the memory area.

NOTES:

NONE

5.4.28. chown - Changes the owner and/or group of a file.

CALLING SEQUENCE:

#include <sys/types.h>
#include <unistd.h>
int chown(
    const char *path,
    uid_t       owner,
    gid_t       group
);

STATUS CODES:

EACCES Search permission is denied for a directory in a file’s path prefix
EINVAL Invalid argument
ENAMETOOLONG Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in effect.
ENOENT A file or directory does not exist.
ENOTDIR A component of the specified pathname was not a directory when a directory was expected.
EPERM Operation is not permitted. Process does not have the appropriate priviledges or permissions to perform the requested operations.
EROFS Read-only file system.

DESCRIPTION:

The user ID and group ID of the file named by path are set to owner and path, respectively.

For regular files, the set group ID (S_ISGID) and set user ID (S_ISUID) bits are cleared.

Some systems consider it a security violation to allow the owner of a file to be changed, If users are billed for disk space usage, loaning a file to another user could result in incorrect billing. The chown() function may be restricted to privileged users for some or all files. The group ID can still be changed to one of the supplementary group IDs.

NOTES:

This function may be restricted for some file. The pathconf function can be used to test the _PC_CHOWN_RESTRICTED flag.

5.4.29. utime - Change access and/or modification times of an inode

CALLING SEQUENCE:

#include <sys/types.h>
int utime(
    const char     *filename,
    struct utimbuf *buf
);

STATUS CODES:

EACCES Permission to write the file is denied
ENOENT Filename does not exist

DESCRIPTION:

Utime changes the access and modification times of the inode specified by filename to the actime and modtime fields of buf respectively. If buf is NULL, then the access and modification times of the file are set to the current time.

NOTES:

NONE

5.4.30. ftruncate - truncate a file to a specified length

CALLING SEQUENCE:

#include <unistd.h>
int ftrunctate(
    int    fd,
    size_t length
);

STATUS CODES:

ENOTDIR A component of the path prefix is not a directory.
EINVAL The pathname contains a character with the high-order bit set.
ENAMETOOLONG The length of the specified pathname exceeds PATH_MAX bytes, or the length of a component of the pathname exceeds NAME_MAX bytes.
ENOENT The named file does not exist.
EACCES The named file is not writable by the user.
EACCES Search permission is denied for a component of the path prefix.
ELOOP Too many symbolic links were encountered in translating the pathname
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.
EFAULT Path points outside the process’s allocated address space.
EBADF The fd is not a valid descriptor.

DESCRIPTION:

truncate() causes the file named by path or referenced by fd to be truncated to at most length bytes in size. If the file previously was larger than this size, the extra data is lost. With ftruncate(), the file must be open for writing.

NOTES:

NONE

5.4.31. truncate - truncate a file to a specified length

CALLING SEQUENCE:

#include <unistd.h>
int trunctate(
    const char *path,
    size_t      length
);

STATUS CODES:

ENOTDIR A component of the path prefix is not a directory.
EINVAL The pathname contains a character with the high-order bit set.
ENAMETOOLONG The length of the specified pathname exceeds PATH_MAX bytes, or the length of a component of the pathname exceeds NAME_MAX bytes.
ENOENT The named file does not exist.
EACCES The named file is not writable by the user.
EACCES Search permission is denied for a component of the path prefix.
ELOOP Too many symbolic links were encountered in translating the pathname
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.
EFAULT Path points outside the process’s allocated address space.
EBADF The fd is not a valid descriptor.

DESCRIPTION:

truncate() causes the file named by path or referenced by``fd`` to be truncated to at most length bytes in size. If the file previously was larger than this size, the extra data is lost. With ftruncate(), the file must be open for writing.

NOTES:

NONE

5.4.32. pathconf - Gets configuration values for files

CALLING SEQUENCE:

#include <unistd.h>
int pathconf(
    const char *path,
    int         name
);

STATUS CODES:

EINVAL Invalid argument
EACCES Permission to write the file is denied
ENAMETOOLONG Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in effect.
ENOENT A file or directory does not exist
ENOTDIR A component of the specified path was not a directory whan a directory was expected.

DESCRIPTION:

pathconf() gets a value for the configuration option name for the open file descriptor filedes.

The possible values for name are:

_PC_LINK_MAX Returns the maximum number of links to the file. If filedes or``path`` refer to a directory, then the value applies to the whole directory. The corresponding macro is _POSIX_LINK_MAX.
_PC_MAX_CANON Returns the maximum length of a formatted input line, where filedes or path must refer to a terminal. The corresponding macro is _POSIX_MAX_CANON.
_PC_MAX_INPUT Returns the maximum length of an input line, where filedes or path must refer to a terminal. The corresponding macro is``_POSIX_MAX_INPUT``.
_PC_NAME_MAX Returns the maximum length of a filename in the directory path or filedes. The process is allowed to create. The corresponding macro is _POSIX_NAME_MAX.
_PC_PATH_MAX returns the maximum length of a relative pathname when path or``filedes`` is the current working directory. The corresponding macro is _POSIX_PATH_MAX.
_PC_PIPE_BUF returns the size of the pipe buffer, where filedes must refer to a pipe or FIFO and path must refer to a FIFO. The corresponding macro is _POSIX_PIPE_BUF.
_PC_CHOWN_RESTRICTED Returns nonzero if the chown(2) call may not be used on this file. If``filedes`` or path refer to a directory, then this applies to all files in that directory. The corresponding macro is _POSIX_CHOWN_RESTRICTED.

NOTES:

Files with name lengths longer than the value returned for name equal _PC_NAME_MAX may exist in the given directory.

5.4.33. fpathconf - Gets configuration values for files

CALLING SEQUENCE:

#include <unistd.h>
int fpathconf(
    int filedes,
    int name
);

STATUS CODES:

EINVAL Invalid argument
EACCES Permission to write the file is denied
ENAMETOOLONG Length of a filename string exceeds PATH_MAX and _POSIX_NO_TRUNC is in effect.
ENOENT A file or directory does not exist
ENOTDIR A component of the specified path was not a directory whan a directory was expected.

DESCRIPTION:

pathconf() gets a value for the configuration option name for the open file descriptor filedes.

The possible values for name are:

_PC_LINK_MAX Returns the maximum number of links to the file. If filedes or path refer to a directory, then the value applies to the whole directory. The corresponding macro is _POSIX_LINK_MAX.
_PC_MAX_CANON returns the maximum length of a formatted input line, where filedes or path must refer to a terminal. The corresponding macro is _POSIX_MAX_CANON.
_PC_MAX_INPUT Returns the maximum length of an input line, where filedes or path must refer to a terminal. The corresponding macro is _POSIX_MAX_INPUT.
_PC_NAME_MAX Returns the maximum length of a filename in the directory path or filedes. The process is allowed to create. The corresponding macro is _POSIX_NAME_MAX.
_PC_PATH_MAX Returns the maximum length of a relative pathname when path or filedes is the current working directory. The corresponding macro is _POSIX_PATH_MAX.
_PC_PIPE_BUF Returns the size of the pipe buffer, where filedes must refer to a pipe or FIFO and path must refer to a FIFO. The corresponding macro is _POSIX_PIPE_BUF.
_PC_CHOWN_RESTRICTED Returns nonzero if the chown() call may not be used on this file. If filedes or path refer to a directory, then this applies to all files in that directory. The corresponding macro is _POSIX_CHOWN_RESTRICTED.

NOTES:

NONE

5.4.34. mknod - create a directory

CALLING SEQUENCE:

#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
long mknod(
    const char *pathname,
    mode_t      mode,
    dev_t       dev
);

STATUS CODES:

mknod returns zero on success, or -1 if an error occurred (in which case, errno is set appropriately).

ENAMETOOLONG pathname was too long.
ENOENT A directory component in pathname does not exist or is a dangling symbolic link.
ENOTDIR A component used in the directory pathname is not, in fact, a directory.
ENOMEM Insufficient kernel memory was available
EROFS pathname refers to a file on a read-only filesystem.
ELOOP pathname contains a reference to a circular symbolic link, ie a symbolic link whose expansion contains a reference to itself.
ENOSPC The device containing pathname has no room for the new node.

DESCRIPTION:

mknod attempts to create a filesystem node (file, device special file or named pipe) named pathname, specified by mode and dev.

mode specifies both the permissions to use and the type of node to be created.

It should be a combination (using bitwise OR) of one of the file types listed below and the permissions for the new node.

The permissions are modified by the process’s umask in the usual way: the permissions of the created node are (mode & ~umask).

The file type should be one of S_IFREG, S_IFCHR, S_IFBLK and S_IFIFO to specify a normal file (which will be created empty), character special file, block special file or FIFO (named pipe), respectively, or zero, which will create a normal file.

If the file type is S_IFCHR or S_IFBLK then dev specifies the major and minor numbers of the newly created device special file; otherwise it is ignored.

The newly created node will be owned by the effective uid of the process. If the directory containing the node has the set group id bit set, or if the filesystem is mounted with BSD group semantics, the new node will inherit the group ownership from its parent directory; otherwise it will be owned by the effective gid of the process.

NOTES:

NONE