函数 | |
static int | CheckNewAttrTime (struct IATTR *attr, struct timespec times[TIMESPEC_TIMES_NUM]) |
static int | GetFullpathNull (int fd, const char *path, char **filePath) |
获取全路径 更多... | |
static int | UserIovItemCheck (const struct iovec *iov, const int iovcnt) |
用户空间 io向量地址范围检查 更多... | |
static int | UserIovCopy (struct iovec **iovBuf, const struct iovec *iov, const int iovcnt, int *valid_iovcnt) |
static int | PollfdToSystem (struct pollfd *fds, nfds_t nfds, int **pollFdsBak) |
static void | RestorePollfd (struct pollfd *fds, nfds_t nfds, const int *pollFds) |
static int | UserPoll (struct pollfd *fds, nfds_t nfds, int timeout) |
使用poll方式 实现IO多路复用的机制 更多... | |
int | SysClose (int fd) |
ssize_t | SysRead (int fd, void *buf, size_t nbytes) |
系统调用|读文件:从文件中读取nbytes长度的内容到buf中(用户空间) 更多... | |
ssize_t | SysWrite (int fd, const void *buf, size_t nbytes) |
系统调用|写文件:将buf中(用户空间)nbytes长度的内容写到文件中 更多... | |
int | SysOpen (const char *path, int oflags,...) |
系统调用|打开文件, 正常情况下返回进程的FD值 更多... | |
int | SysCreat (const char *pathname, mode_t mode) |
创建文件,从实现看 SysCreat 和 SysOpen 并没有太大的区别,只有打开方式的区别 SysCreat函数完全可以被SysOpen函数替代 更多... | |
int | SysLink (const char *oldpath, const char *newpath) |
ssize_t | SysReadlink (const char *pathname, char *buf, size_t bufsize) |
int | SysSymlink (const char *target, const char *linkpath) |
int | SysUnlink (const char *pathname) |
删除链:删除由装入点管理的文件 更多... | |
int | SysExecve (const char *fileName, char *const *argv, char *const *envp) |
动态加载程序过程 更多... | |
int | SysFchdir (int fd) |
int | SysChdir (const char *path) |
off_t | SysLseek (int fd, off_t offset, int whence) |
移动文件指针 更多... | |
off64_t | SysLseek64 (int fd, int offsetHigh, int offsetLow, off64_t *result, int whence) |
static int | NfsMountRef (const char *serverIpAndPath, const char *mountPath, unsigned int uid, unsigned int gid) __attribute__((weakref("nfs_mount"))) |
static int | NfsMount (const char *serverIpAndPath, const char *mountPath, unsigned int uid, unsigned int gid) |
int | SysMount (const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data) |
SysMount 挂载文件系统 挂载是指将一个存储设备挂接到一个已存在的路径上。我们要访问存储设备中的文件,必须将文件所在的分区挂载到一个已存在的路径上, 然后通过这个路径来访问存储设备。如果只有一个存储设备,则可以直接挂载到根目录 / 上,变成根文件系统 更多... | |
int | SysUmount (const char *target) |
卸载文件系统,当某个文件系统不需要再使用了,那么可以将它卸载掉。 更多... | |
int | SysAccess (const char *path, int amode) |
确定文件的可存取性 更多... | |
int | SysRename (const char *oldpath, const char *newpath) |
重命名文件 更多... | |
int | SysMkdir (const char *pathname, mode_t mode) |
创建目录 更多... | |
int | SysRmdir (const char *pathname) |
删除目录 更多... | |
int | SysDup (int fd) |
void | SysSync (void) |
将内存缓冲区数据写回硬盘 更多... | |
int | SysUmount2 (const char *target, int flags) |
卸载文件系统 更多... | |
int | SysIoctl (int fd, int req, void *arg) |
I/O总控制函数 更多... | |
int | SysFcntl (int fd, int cmd, void *arg) |
int | SysPipe (int pipefd[2]) |
int | SysDup2 (int fd1, int fd2) |
复制文件描述符 更多... | |
static int | SelectParamCheckCopy (fd_set *readfds, fd_set *writefds, fd_set *exceptfds, fd_set **fdsBuf) |
select()参数检查 更多... | |
int | SysSelect (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) |
SysSelect 系统调用|文件系统|select .鸿蒙liteos目前也支持epoll方式 更多... | |
int | SysTruncate (const char *path, off_t length) |
系统调用|文件系统|截断功能 更多... | |
int | SysTruncate64 (const char *path, off64_t length) |
系统调用|文件系统|截断功能 更多... | |
int | SysFtruncate (int fd, off_t length) |
系统调用|文件系统|截断功能 更多... | |
int | SysStatfs (const char *path, struct statfs *buf) |
获取指定路径下文件的文件系统信息 更多... | |
int | SysStatfs64 (const char *path, size_t sz, struct statfs *buf) |
获取文件系统信息 更多... | |
int | SysStat (const char *path, struct kstat *buf) |
获取文件状态信息 更多... | |
int | SysLstat (const char *path, struct kstat *buffer) |
参见SysStat 更多... | |
int | SysFstat (int fd, struct kstat *buf) |
参见SysStat 更多... | |
int | SysStatx (int fd, const char *restrict path, int flag, unsigned mask, struct statx *restrict stx) |
int | SysFsync (int fd) |
把文件在内存中的部分写回磁盘 更多... | |
ssize_t | SysReadv (int fd, const struct iovec *iov, int iovcnt) |
通过FD读入数据到缓冲数组中,fd为进程描述符 更多... | |
ssize_t | SysWritev (int fd, const struct iovec *iov, int iovcnt) |
将缓冲数组里的数据写入文件 更多... | |
int | SysPoll (struct pollfd *fds, nfds_t nfds, int timeout) |
SysPoll I/O多路转换 更多... | |
int | SysPrctl (int option,...) |
对进程进行特定操作 更多... | |
ssize_t | SysPread64 (int fd, void *buf, size_t nbytes, off64_t offset) |
对进程进行特定操作 更多... | |
ssize_t | SysPwrite64 (int fd, const void *buf, size_t nbytes, off64_t offset) |
char * | SysGetcwd (char *buf, size_t n) |
ssize_t | SysSendFile (int outfd, int infd, off_t *offset, size_t count) |
int | SysFtruncate64 (int fd, off64_t length) |
int | SysOpenat (int dirfd, const char *path, int oflags,...) |
int | SysMkdirat (int dirfd, const char *pathname, mode_t mode) |
int | SysLinkat (int olddirfd, const char *oldpath, int newdirfd, const char *newpath, int flags) |
int | SysSymlinkat (const char *target, int dirfd, const char *linkpath) |
ssize_t | SysReadlinkat (int dirfd, const char *pathname, char *buf, size_t bufsize) |
int | SysUnlinkat (int dirfd, const char *pathname, int flag) |
int | SysRenameat (int oldfd, const char *oldpath, int newdfd, const char *newpath) |
int | SysFallocate (int fd, int mode, off_t offset, off_t len) |
int | SysFallocate64 (int fd, int mode, off64_t offset, off64_t len) |
ssize_t | SysPreadv (int fd, const struct iovec *iov, int iovcnt, long loffset, long hoffset) |
ssize_t | SysPwritev (int fd, const struct iovec *iov, int iovcnt, long loffset, long hoffset) |
int | SysFormat (const char *dev, int sectors, int option) |
int | SysFstat64 (int fd, struct kstat *buf) |
int | SysFcntl64 (int fd, int cmd, void *arg) |
int | SysGetdents64 (int fd, struct dirent *de_user, unsigned int count) |
char * | SysRealpath (const char *path, char *resolved_path) |
int | SysUtimensat (int fd, const char *path, struct timespec times[TIMESPEC_TIMES_NUM], int flag) |
int | SysChmod (const char *pathname, mode_t mode) |
int | SysFchmodat (int fd, const char *path, mode_t mode, int flag) |
int | SysFchmod (int fd, mode_t mode) |
int | SysFchownat (int fd, const char *path, uid_t owner, gid_t group, int flag) |
int | SysFchown (int fd, uid_t owner, gid_t group) |
int | SysChown (const char *pathname, uid_t owner, gid_t group) |
int | SysFstatat64 (int dirfd, const char *restrict path, struct kstat *restrict buf, int flag) |
int | SysFaccessat (int fd, const char *filename, int amode, int flag) |
int | SysFstatfs (int fd, struct statfs *buf) |
int | SysFstatfs64 (int fd, size_t sz, struct statfs *buf) |
int | SysPpoll (struct pollfd *fds, nfds_t nfds, const struct timespec *tmo_p, const sigset_t *sigMask, int nsig) |
int | SysPselect6 (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const long data[2]) |
static int | DoEpollCreate1 (int flags) |
int | SysEpollCreate (int size) |
int | SysEpollCreate1 (int flags) |
int | SysEpollCtl (int epfd, int op, int fd, struct epoll_event *ev) |
int | SysEpollWait (int epfd, struct epoll_event *evs, int maxevents, int timeout) |
int | SysEpollPwait (int epfd, struct epoll_event *evs, int maxevents, int timeout, const sigset_t *mask) |
|
static |
在文件 fs_syscall.c 第 63 行定义.
在文件 fs_syscall.c 第 2731 行定义.
|
static |
在文件 fs_syscall.c 第 637 行定义.
|
static |
|
static |
select()参数检查
在文件 fs_syscall.c 第 1076 行定义.
int SysChdir | ( | const char * | path | ) |
int SysChown | ( | const char * | pathname, |
uid_t | owner, | ||
gid_t | group | ||
) |
在文件 fs_syscall.c 第 236 行定义.
创建文件,从实现看 SysCreat 和 SysOpen 并没有太大的区别,只有打开方式的区别
SysCreat函数完全可以被SysOpen函数替代
pathname | |
mode | 常用标签如下: O_CREAT:若文件存在,此标志无用;若不存在,建新文件 O_TRUNC:若文件存在,则长度被截为0,属性不变 O_WRONLY:写文件 O_RDONLY:读文件 O_BINARY:此标志可显示地给出以二进制方式打开文件 O_TEXT :此标志可用于显示地给出以文本方式打开文件 O_RDWR :即读也写 O_APPEND:即读也写,但每次写总是在文件尾添加 * |
在文件 fs_syscall.c 第 372 行定义.
复制文件描述符
在文件 fs_syscall.c 第 1038 行定义.
int SysEpollCtl | ( | int | epfd, |
int | op, | ||
int | fd, | ||
struct epoll_event * | ev | ||
) |
int SysEpollPwait | ( | int | epfd, |
struct epoll_event * | evs, | ||
int | maxevents, | ||
int | timeout, | ||
const sigset_t * | mask | ||
) |
在文件 fs_syscall.c 第 2810 行定义.
int SysEpollWait | ( | int | epfd, |
struct epoll_event * | evs, | ||
int | maxevents, | ||
int | timeout | ||
) |
int SysExecve | ( | const char * | fileName, |
char *const * | argv, | ||
char *const * | envp | ||
) |
动态加载程序过程
在文件 fs_syscall.c 第 548 行定义.
在文件 fs_syscall.c 第 2566 行定义.
在文件 fs_syscall.c 第 2081 行定义.
在文件 fs_syscall.c 第 2400 行定义.
在文件 fs_syscall.c 第 2361 行定义.
用来修改已经打开文件的属性的函数包含5个功能: 1.复制一个已有文件描述符,功能和dup和dup2相同,对应的cmd:F_DUPFD、F_DUPFD_CLOEXEC。 当使用这两个cmd时,需要传入第三个参数,fcntl返回复制后的文件描述符,此返回值是之前未被占用的描述符, 并且必须一个大于等于第三个参数值。 F_DUPFD命令要求返回的文件描述符会清除对应的FD_CLOEXEC F_DUPFD_CLOEXEC要求设置新描述符的FD_CLOEXEC标志。 2.获取、设置文件描述符标志,对应的cmd:F_GETFD、F_SETFD。 用于设置FD_CLOEXEC标志,此标志的含义是:当进程执行exec系统调用后此文件描述符会被自动关闭。 3.获取、设置文件访问状态标志,对应的cmd:F_GETFL、F_SETFL。 获取当前打开文件的访问标志,设置对应的访问标志,一般常用来设置做非阻塞读写操作。 4.获取、设置记录锁功能,对应的cmd:F_GETLK、F_SETLK、F_SETLKW。 5.获取、设置异步I/O所有权,对应的cmd:F_GETOWN、F_SETOWN。 获取和设置用来接收SIGIO/SIGURG信号的进程id或者进程组id。返回对应的进程id或者进程组id取负值。 *
fd | |
cmd | |
arg |
在文件 fs_syscall.c 第 957 行定义.
参见SysStat
在文件 fs_syscall.c 第 1401 行定义.
char * SysGetcwd | ( | char * | buf, |
size_t | n | ||
) |
在文件 fs_syscall.c 第 2239 行定义.
int SysLink | ( | const char * | oldpath, |
const char * | newpath | ||
) |
在文件 fs_syscall.c 第 611 行定义.
int SysLstat | ( | const char * | path, |
struct kstat * | buffer | ||
) |
int SysMount | ( | const char * | source, |
const char * | target, | ||
const char * | filesystemtype, | ||
unsigned long | mountflags, | ||
const void * | data | ||
) |
SysMount 挂载文件系统 挂载是指将一个存储设备挂接到一个已存在的路径上。我们要访问存储设备中的文件,必须将文件所在的分区挂载到一个已存在的路径上, 然后通过这个路径来访问存储设备。如果只有一个存储设备,则可以直接挂载到根目录 / 上,变成根文件系统
data | 特定文件系统的私有数据 |
filesystemtype | 挂载的文件系统类型 |
mountflags | 读写标志位 |
source | 已经格式化的块设备名称 |
target | 挂载路径,即挂载点 |
在文件 fs_syscall.c 第 666 行定义.
系统调用|打开文件, 正常情况下返回进程的FD值
在文件 fs_syscall.c 第 294 行定义.
管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。 调用pipe系统函数即可创建一个管道。有如下特质: 1. 其本质是一个伪文件(实为内核缓冲区) 2. 由两个文件描述符引用,一个表示读端,一个表示写端。 3. 规定数据从管道的写端流入管道,从读端流出。 管道的原理: 管道实为内核使用环形队列机制,借助内核缓冲区(4k)实现。 管道的局限性: ① 数据自己读不能自己写。 ② 数据一旦被读走,便不在管道中存在,不可反复读取。 ③ 由于管道采用半双工通信方式。因此,数据只能在一个方向上流动。 ④ 只能在有公共祖先的进程间使用管道。 常见的通信方式有,单工通信、半双工通信、全双工通信。 *
pipefd |
在文件 fs_syscall.c 第 995 行定义.
SysPoll I/O多路转换
fds | fds是一个struct pollfd类型的数组,用于存放需要检测其状态的socket描述符,并且调用poll函数之后fds数组不会被清空; 一个pollfd结构体表示一个被监视的文件描述符,通过传递fds指示 poll() 监视多个文件描述符。 |
nfds | 记录数组fds中描述符的总数量。 |
timeout | 指定等待的毫秒数,无论 I/O 是否准备好,poll() 都会返回,和select函数是类似的。 |
在文件 fs_syscall.c 第 1552 行定义.
int SysPpoll | ( | struct pollfd * | fds, |
nfds_t | nfds, | ||
const struct timespec * | tmo_p, | ||
const sigset_t * | sigMask, | ||
int | nsig | ||
) |
在文件 fs_syscall.c 第 2648 行定义.
对进程进行特定操作
在文件 fs_syscall.c 第 1597 行定义.
在文件 fs_syscall.c 第 2095 行定义.
int SysPselect6 | ( | int | nfds, |
fd_set * | readfds, | ||
fd_set * | writefds, | ||
fd_set * | exceptfds, | ||
const struct timespec * | timeout, | ||
const long | data[2] | ||
) |
在文件 fs_syscall.c 第 2682 行定义.
在文件 fs_syscall.c 第 2134 行定义.
通过FD读入数据到缓冲数组中,fd为进程描述符
在文件 fs_syscall.c 第 1464 行定义.
char * SysRealpath | ( | const char * | path, |
char * | resolved_path | ||
) |
int SysRename | ( | const char * | oldpath, |
const char * | newpath | ||
) |
重命名文件
在文件 fs_syscall.c 第 787 行定义.
int SysRmdir | ( | const char * | pathname | ) |
int SysSelect | ( | int | nfds, |
fd_set * | readfds, | ||
fd_set * | writefds, | ||
fd_set * | exceptfds, | ||
struct timeval * | timeout | ||
) |
SysSelect 系统调用|文件系统|select .鸿蒙liteos目前也支持epoll方式
exceptfds | 文件集将监视文件集中的任何文件是否发生错误,可用于其他的用途, 例如,监视带外数据OOB,带外数据使用MSG_OOB标志发送到套接字上。当select函数返回的时候, exceptfds将清除其中的其他文件描述符,只留下标记有OOB数据的文件描述符。 |
nfds | select监视的文件句柄数,一般设为要监视各文件中的最大文件描述符值加1。 |
readfds | 文件描述符集合监视文件集中的任何文件是否有数据可读,当select函数返回的时候, readfds将清除其中不可读的文件描述符,只留下可读的文件描述符。 |
timeout | 参数是一个指向 struct timeval 类型的指针,它可以使 select()在等待 timeout 时间后 若没有文件描述符准备好则返回。其timeval结构用于指定这段时间的秒数和微秒数。它可以使select处于三种状态: (1) 若将NULL以形参传入,即不传入时间结构,就是将select置于阻塞状态,一定等到监视文件描述符集合中某个文件描述符发生变化为止; (2) 若将时间值设为0秒0毫秒,就变成一个纯粹的非阻塞函数,不管文件描述符是否有变化,都立刻返回继续执行,文件无变化返回0,有变化返回一个正值; (3) timeout的值大于0,这就是等待的超时时间,即select在timeout时间内阻塞,超时时间之内有事件到来就返回了,否则在超时后不管怎样一定返回,返回值同上述。 |
writefds | 文件描述符集合监视文件集中的任何文件是否有数据可写,当select函数返回的时候, writefds将清除其中不可写的文件描述符,只留下可写的文件描述符。 |
在文件 fs_syscall.c 第 1135 行定义.