mcu_hi3321_watch/open_source/musl/include/fcntl.h
2025-05-26 20:15:20 +08:00

418 lines
14 KiB
C

/**
* @defgroup fcntl Fcntl
* @ingroup libc
*/
#ifndef _FCNTL_H
#define _FCNTL_H
#ifdef __cplusplus
extern "C" {
#endif
#include <features.h>
#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 <bits/alltypes.h>
#include <bits/fcntl.h>
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
* <ul>
* <li>None.</li>
* </ul>
*
* @retval #0 Upon successful completion.
* @retval #-1 Failed and set errno to indicate the error.
*
* @par Errors
* <ul>
* <li>Refer to open.</li>
* </ul>
*
* @par Dependency:
* <ul><li>fcntl.h</li></ul>
* @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 <libc/kernel/asm-generic/fcntl.h>. 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
* <ul>
* <li><b>O_RDONLY</b>: Open for reading only.</li>
* <li><b>O_RDWR</b>: Open for reading and writing. The result is undefined if this flag is applied to a FIFO.</li>
* <li><b>O_WRONLY</b>: Open for writing only.</li>
* <li><b>O_CREAT</b>: 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.</li>
* <li><b>O_EXCL</b>: 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
* .</li>
* <li><b>O_NOCTTY</b>: Not support.</li>
* <li><b>O_APPEND</b>: If set, the file offset shall be set to the end of the file prior to each write.</li>
* <li><b>O_NONBLOCK</b>: 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.</li>
* <li><b>O_TRUNC</b>: 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.</li>
* <li><b>O_DIRECTORY</b>: No support, if set this mode returns error code [EACCES].</li>
* <li><b>O_NOFOLLOW</b>: Not support.</li>
* <li><b>O_DIRECT</b>: Not support.</li>
* </ul>
*
* @retval #0 Upon successful completion.
* @retval #-1 Failed and set errno to indicate the error.
*
* @par Errors
* <ul>
* <li><b>EACCES</b>: 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.</li>
* <li><b>EINVAL</b>: The path name format is invalid.</li>
* <li><b>ENAMETOOLONG</b>: The length of a component of a pathname is longer than {NAME_MAX}.</li>
* <li><b>ENOENT</b>: 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</li>
* <li><b>ENOMEM</b>: Out of memory.</li>
* <li><b>ENXIO</b>: Inode is invalid or not a "normal" character driver or not a mountpoint.</li>
* <li><b>EMFILE</b>: All file descriptors available to the process are currently open.</li>
* <li><b>EPERM</b>: 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.</li>
* <li><b>EEXIST</b>: O_CREAT and O_EXCL are set, and the named file exists.
* <li><b>EIO</b>: A hard error occurred in the low level disk I/O layer ro the physical drive cannot work or Assertion
* failed.</li>
* <li><b>EROFS</b>: 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.</li>
* <li><b>ENOSPC</b>: The directory or file system that would contain the new file cannot be expanded,
* the file does not exist, and O_CREAT is specified.</li>
* <li><b>ENFILE</b>: The maximum allowable number of files is currently open in the system.</li>
* <li><b>EISDIR</b>: The named file is a directory and oflag includes O_WRONLY or O_RDWR, or includes O_CREAT without
* O_DIRECTORY.</li>
* <li><b>ENOTDIR</b>: 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-<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; or the path
* argument resolves to a non-directory file.</li>
* <li><b>EBUSY</b>: The operation is rejected according to the file sharing policy.</li>
* <li><b>ENODEV</b>: No such device.</li>
* <li><b>ENOTEMPTY</b>: Directory not empty.</li>
* <li><b>ELOOP</b>: Too many symbolic links encountered.</li>
* <li><b>EFAULT</b>: Bad address.</li>
* </ul>
*
* @par Dependency:
* <ul><li>fcntl.h</li></ul>
* @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
* <ul>
* <li>None.</li>
* </ul>
*
* @retval #0 Upon successful completion.
* @retval #-1 Failed and set errno to indicate the error.
*
* @par Errors
* <ul>
* <li><b>EINVAL</b>: 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.</li>
* <li><b>EBADF</b>: The fd argument is not a valid file descriptor or or the underlying file system does not support
* this operation.</li>
* <li><b>EAGAIN</b>: The file list is NULL.</li>
* <li><b>EACCES</b>: Permission bits of the file mode do not permit the requested access,
* or search permission is denied on a component of the path prefix.</li>
* <li><b>ENOENT</b>: A directory component in pathname does not exist or is a dangling symbolic link.</li>
* <li><b>EEXIST</b>: The file/directory object is already exist.</li>
* <li><b>EIO</b>: An I/O error occurred while reading from or writing to a file system.</li>
* <li><b>EROFS</b>: The physical drive is write protected.</li>
* <li><b>ENOSPC</b>: The directory or file system that would contain the new file cannot be expanded,
* the file does not exist, and O_CREAT is specified.</li>
* <li><b>ENFILE</b>: The maximum allowable number of files is currently open in the system.</li>
* <li><b>ENOTEMPTY</b>: Directory not empty.</li>
* <li><b>EISDIR</b>: The named file is a directory.</li>
* <li><b>ENOTDIR</b>: 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.</li>
* <li><b>EPERM</b>: Operation not permitted or access denied due to prohibited access or directory full.</li>
* <li><b>EBUSY</b>: The operation is rejected according to the file sharing policy.</li>
* </ul>
*
* @par Dependency:
* <ul><li>fcntl.h</li></ul>
* @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