/** * @defgroup fcntl Fcntl * @ingroup libc */ #ifndef _FCNTL_H #define _FCNTL_H #ifdef __cplusplus extern "C" { #endif #include #define __NEED_off_t #define __NEED_pid_t #define __NEED_mode_t #ifdef _GNU_SOURCE #define __NEED_size_t #define __NEED_ssize_t #define __NEED_struct_iovec #endif #ifdef __XLT_OS__ #define __NEED_int64_t #endif #include #include struct flock { short l_type; short l_whence; off_t l_start; off_t l_len; pid_t l_pid; }; /** * @ingroup fcntl * * @par Description: * Create a new file or rewrite an existing one. * @param path [IN] Path of the file which need to be created. * @param mode [IN] Describes the permissions of the file, should be an integer type. * (For example: 0666, 0777) * @attention *
    *
  • None.
  • *
* * @retval #0 Upon successful completion. * @retval #-1 Failed and set errno to indicate the error. * * @par Errors *
    *
  • Refer to open.
  • *
* * @par Dependency: *
  • fcntl.h
* @see None * @since Huawei LiteOS V100R001C00 */ int creat(const char *, mode_t); int fcntl(int, int, ...); #ifdef __XLT_OS__ #define fcntl64 fcntl #endif /** * @ingroup fcntl * * @par Description: * The open() function shall establish the connection between a file and a file descriptor. * It shall create an open file description that refers to a file and a file descriptor that refers to that open file * description. The file descriptor is used by other I/O functions to refer to that file. The file status flags * The file offset used to mark the current position within the file shall be set to the beginning of the file. * and file access modes of the open file description shall be set according to the value of oflags. * @param path [IN] Points to a pathname naming the file. * @param oflags [IN] Values for oflags are constructed by a bitwise-inclusive OR of flags from the following list, * defined in . Applications should specify one of the median values * (file access patterns) in the value of oflags in the attention description. * @param "..." [IN] If the file is opened for creation, description file mode_t mode. * @attention *
    *
  • O_RDONLY: Open for reading only.
  • *
  • O_RDWR: Open for reading and writing. The result is undefined if this flag is applied to a FIFO.
  • *
  • O_WRONLY: Open for writing only.
  • *
  • O_CREAT: If the file exists, this flag has no effect except as noted under O_EXCL below. Otherwise, * if O_DIRECTORY is not set the file shall be created as a regular file; the access permission bits of the file mode * shall be set to the value of the argument following the oflag argument taken as type mode_t.
  • *
  • O_EXCL: If O_CREAT and O_EXCL are set, open() shall fail if the file exists. * The check for the existence of the file and the creation of the file if it does not exist shall be atomic with * respect to other threads executing open() naming the same filename in the same directory with O_EXCL and O_CREAT set. * If O_EXCL and O_CREAT are set, and path names a symbolic link, open() shall fail and set errno to [EEXIST], * regardless of the contents of the symbolic link. If O_EXCL is set and O_CREAT is not set, the result is undefined * .
  • *
  • O_NOCTTY: Not support.
  • *
  • O_APPEND: If set, the file offset shall be set to the end of the file prior to each write.
  • *
  • O_NONBLOCK: When opening a FIFO with O_RDONLY or O_WRONLY set: * If O_NONBLOCK is set, an open() for reading-only shall return without delay. * An open() for writing-only shall return an error if no process currently has the file open for reading. * If O_NONBLOCK is clear, an open() for reading-only shall block the calling thread until a thread opens the file * for writing. An open() for writing-only shall block the calling thread until a thread opens the file for reading.
  • *
  • O_TRUNC: If the file exists and is a regular file, and the file is successfully opened O_RDWR or O_WRONLY, * its length shall be truncated to 0, and the mode and owner shall be unchanged. It shall have no effect on FIFO special * files or terminal device files. Its effect on other file types is implementation-defined. * The result of using O_TRUNC without either O_RDWR or O_WRONLY is undefined.
  • *
  • O_DIRECTORY: No support, if set this mode returns error code [EACCES].
  • *
  • O_NOFOLLOW: Not support.
  • *
  • O_DIRECT: Not support.
  • *
* * @retval #0 Upon successful completion. * @retval #-1 Failed and set errno to indicate the error. * * @par Errors *
    *
  • EACCES: Permission bits of the file mode do not permit the requested access, * or search permission is denied on a component of the path prefix, or set oflags with O_DIRECTORY shall return it.
  • *
  • EINVAL: The path name format is invalid.
  • *
  • ENAMETOOLONG: The length of a component of a pathname is longer than {NAME_MAX}.
  • *
  • ENOENT: O_CREAT is not set and the named file does not exist. Or a directory component in pathname does not * exist or is a dangling symbolic link. This error code is also returned in the fat file system: no valid FAT volume, * not find the file, not find the path
  • *
  • ENOMEM: Out of memory.
  • *
  • ENXIO: Inode is invalid or not a "normal" character driver or not a mountpoint.
  • *
  • EMFILE: All file descriptors available to the process are currently open.
  • *
  • EPERM: Get the file structure corresponding to the file descriptor failed. * In fat file system: This error code is also returned when operation not permitted or access denied due to prohibited * access or directory full.
  • *
  • EEXIST: O_CREAT and O_EXCL are set, and the named file exists. *
  • EIO: A hard error occurred in the low level disk I/O layer ro the physical drive cannot work or Assertion * failed.
  • *
  • EROFS: The named file resides on a read-only file system and either O_WRONLY, O_RDWR, O_CREAT * (if the file does not exist), or O_TRUNC is set in the oflags argument.
  • *
  • ENOSPC: The directory or file system that would contain the new file cannot be expanded, * the file does not exist, and O_CREAT is specified.
  • *
  • ENFILE: The maximum allowable number of files is currently open in the system.
  • *
  • EISDIR: The named file is a directory and oflag includes O_WRONLY or O_RDWR, or includes O_CREAT without * O_DIRECTORY.
  • *
  • ENOTDIR: A component of the path prefix names an existing file that is neither a directory nor a symbolic * link to a directory; or O_CREAT and O_EXCL are not specified, the path argument contains at least one non- * character and ends with one or more trailing characters, and the last pathname component names an existing * file that is neither a directory nor a symbolic link to a directory; or the path * argument resolves to a non-directory file.
  • *
  • EBUSY: The operation is rejected according to the file sharing policy.
  • *
  • ENODEV: No such device.
  • *
  • ENOTEMPTY: Directory not empty.
  • *
  • ELOOP: Too many symbolic links encountered.
  • *
  • EFAULT: Bad address.
  • *
* * @par Dependency: *
  • fcntl.h
* @see None * @since Huawei LiteOS V100R001C00 */ int open(const char *, int, ...); int openat(int, const char *, int, ...); int posix_fadvise(int, off_t, off_t, int); int posix_fallocate(int, off_t, off_t); #define O_SEARCH O_PATH #define O_EXEC O_PATH #define O_TTY_INIT 0 #define O_ACCMODE (03|O_SEARCH) #define O_RDONLY 00 #define O_WRONLY 01 #define O_RDWR 02 #define F_OFD_GETLK 36 #define F_OFD_SETLK 37 #define F_OFD_SETLKW 38 #define F_DUPFD_CLOEXEC 1030 #define F_RDLCK 0 #define F_WRLCK 1 #define F_UNLCK 2 #define FD_CLOEXEC 1 #define AT_FDCWD (-100) #define AT_SYMLINK_NOFOLLOW 0x100 #define AT_REMOVEDIR 0x200 #define AT_SYMLINK_FOLLOW 0x400 #define AT_EACCESS 0x200 #define POSIX_FADV_NORMAL 0 #define POSIX_FADV_RANDOM 1 #define POSIX_FADV_SEQUENTIAL 2 #define POSIX_FADV_WILLNEED 3 #ifndef POSIX_FADV_DONTNEED #define POSIX_FADV_DONTNEED 4 #define POSIX_FADV_NOREUSE 5 #endif #undef SEEK_SET #undef SEEK_CUR #undef SEEK_END #define SEEK_SET 0 #define SEEK_CUR 1 #define SEEK_END 2 #ifndef S_IRUSR #define S_ISUID 04000 #define S_ISGID 02000 #define S_ISVTX 01000 #define S_IRUSR 0400 #define S_IWUSR 0200 #define S_IXUSR 0100 #define S_IRWXU 0700 #define S_IRGRP 0040 #define S_IWGRP 0020 #define S_IXGRP 0010 #define S_IRWXG 0070 #define S_IROTH 0004 #define S_IWOTH 0002 #define S_IXOTH 0001 #define S_IRWXO 0007 #endif #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) #define AT_NO_AUTOMOUNT 0x800 #define AT_EMPTY_PATH 0x1000 #define AT_STATX_SYNC_TYPE 0x6000 #define AT_STATX_SYNC_AS_STAT 0x0000 #define AT_STATX_FORCE_SYNC 0x2000 #define AT_STATX_DONT_SYNC 0x4000 #define AT_RECURSIVE 0x8000 #define FAPPEND O_APPEND #define FFSYNC O_SYNC #define FASYNC O_ASYNC #define FNONBLOCK O_NONBLOCK #define FNDELAY O_NDELAY #define F_OK 0 #define R_OK 4 #define W_OK 2 #define X_OK 1 #define F_ULOCK 0 #define F_LOCK 1 #define F_TLOCK 2 #define F_TEST 3 #define F_SETLEASE 1024 #define F_GETLEASE 1025 #define F_NOTIFY 1026 #define F_CANCELLK 1029 #define F_SETPIPE_SZ 1031 #define F_GETPIPE_SZ 1032 #define F_ADD_SEALS 1033 #define F_GET_SEALS 1034 #define F_SEAL_SEAL 0x0001 #define F_SEAL_SHRINK 0x0002 #define F_SEAL_GROW 0x0004 #define F_SEAL_WRITE 0x0008 #define F_SEAL_FUTURE_WRITE 0x0010 #define F_GET_RW_HINT 1035 #define F_SET_RW_HINT 1036 #define F_GET_FILE_RW_HINT 1037 #define F_SET_FILE_RW_HINT 1038 #define RWF_WRITE_LIFE_NOT_SET 0 #define RWH_WRITE_LIFE_NONE 1 #define RWH_WRITE_LIFE_SHORT 2 #define RWH_WRITE_LIFE_MEDIUM 3 #define RWH_WRITE_LIFE_LONG 4 #define RWH_WRITE_LIFE_EXTREME 5 #define DN_ACCESS 0x00000001 #define DN_MODIFY 0x00000002 #define DN_CREATE 0x00000004 #define DN_DELETE 0x00000008 #define DN_RENAME 0x00000010 #define DN_ATTRIB 0x00000020 #define DN_MULTISHOT 0x80000000 int lockf(int, int, off_t); #endif #if defined(_GNU_SOURCE) #define F_OWNER_TID 0 #define F_OWNER_PID 1 #define F_OWNER_PGRP 2 #define F_OWNER_GID 2 #ifndef __XLT_OS__ struct file_handle { unsigned handle_bytes; int handle_type; unsigned char f_handle[]; }; #endif struct f_owner_ex { int type; pid_t pid; }; #define FALLOC_FL_KEEP_SIZE 1 #define FALLOC_FL_PUNCH_HOLE 2 #define MAX_HANDLE_SZ 128 #define SYNC_FILE_RANGE_WAIT_BEFORE 1 #define SYNC_FILE_RANGE_WRITE 2 #define SYNC_FILE_RANGE_WAIT_AFTER 4 #define SPLICE_F_MOVE 1 #define SPLICE_F_NONBLOCK 2 #define SPLICE_F_MORE 4 #define SPLICE_F_GIFT 8 /** * @ingroup fcntl * * @par Description: * The fallocate() function shall ensure that any required storage for regular file data starting at offset and * continuing for len bytes is allocated on the file system storage media. * @param fd [IN] File descriptor. * @param mode [IN] Operation mode. Only support FALLOC_FL_KEEP_SIZE. * @param offset [IN] Offset of the file to allocated. * @param len [IN] The size to allocate for the file. * @attention *
    *
  • None.
  • *
* * @retval #0 Upon successful completion. * @retval #-1 Failed and set errno to indicate the error. * * @par Errors *
    *
  • EINVAL: The len argument or the offset argument is less than zero or greater than INT_MAX, * or operation mode is not equal to FALLOC_FL_KEEP_SIZE.
  • *
  • EBADF: The fd argument is not a valid file descriptor or or the underlying file system does not support * this operation.
  • *
  • EAGAIN: The file list is NULL.
  • *
  • EACCES: Permission bits of the file mode do not permit the requested access, * or search permission is denied on a component of the path prefix.
  • *
  • ENOENT: A directory component in pathname does not exist or is a dangling symbolic link.
  • *
  • EEXIST: The file/directory object is already exist.
  • *
  • EIO: An I/O error occurred while reading from or writing to a file system.
  • *
  • EROFS: The physical drive is write protected.
  • *
  • ENOSPC: The directory or file system that would contain the new file cannot be expanded, * the file does not exist, and O_CREAT is specified.
  • *
  • ENFILE: The maximum allowable number of files is currently open in the system.
  • *
  • ENOTEMPTY: Directory not empty.
  • *
  • EISDIR: The named file is a directory.
  • *
  • 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 resolves to a non-directory file.
  • *
  • EPERM: Operation not permitted or access denied due to prohibited access or directory full.
  • *
  • EBUSY: The operation is rejected according to the file sharing policy.
  • *
* * @par Dependency: *
  • fcntl.h
* @see None * @since Huawei LiteOS V100R001C00 */ int fallocate(int, int, off_t, off_t); #ifndef __XLT_OS__ #define fallocate64 fallocate int name_to_handle_at(int, const char *, struct file_handle *, int *, int); int open_by_handle_at(int, struct file_handle *, int); #endif ssize_t readahead(int, off_t, size_t); int sync_file_range(int, off_t, off_t, unsigned); ssize_t vmsplice(int, const struct iovec *, size_t, unsigned); ssize_t splice(int, off_t *, int, off_t *, size_t, unsigned); ssize_t tee(int, int, size_t, unsigned); #if defined(__XLT_OS__) && !defined(__LP64__) typedef long long _loff_t; #define loff_t _loff_t #else #define loff_t off_t #endif #endif #if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE) #ifdef __XLT_OS__ #define F_GETLK64 F_GETLK #define F_SETLK64 F_SETLK #define F_SETLKW64 F_SETLKW #define flock64 flock #define off64_t int64_t int open64 (const char *, int, ...); int openat64(int, const char *, int, ...); int creat64(const char *, mode_t); int lockf64(int, int, off64_t); int posix_fadvise64(int, off64_t, off64_t, int); int posix_fallocate64(int, off64_t, off64_t); int fallocate64(int, int, off64_t, off64_t); #else #define F_GETLK64 F_GETLK #define F_SETLK64 F_SETLK #define F_SETLKW64 F_SETLKW #define flock64 flock #define open64 open #define openat64 openat #define creat64 creat #define lockf64 lockf #define posix_fadvise64 posix_fadvise #define posix_fallocate64 posix_fallocate #define off64_t off_t #endif #endif #ifdef __cplusplus } #endif #endif