ARM技术论坛
直播中

嵌入式小能手

2年用户 1496经验值
擅长:嵌入式技术
私信 关注
[经验]

飞凌嵌入式ElfBoard-文件I/O的了解探究之fcntl和ioctl

1.3.9.1 fcntl
用于对一个已经打开的文件描述符执行一系列控制操作,比如复制一个文件描述符(与 dup、dup2 作用相同)、获取/设置文件描述符标志、获取/设置文件状态标志等。
1.头文件
#include
#include
2.函数原型
int fcntl(int fd, int cmd, ...)
3.参数
fd:表示要操作文件的文件描述符。
cmd:操作命令。cmd 操作命令大致可以分为以下 5 种功能:
⚫复制文件描述符(cmd=F_DUPFD 或 cmd=F_DUPFD_CLOEXEC);
⚫获取/设置文件描述符标志(cmd=F_GETFD 或 cmd=F_SETFD);
⚫获取/设置文件状态标志(cmd=F_GETFL 或 cmd=F_SETFL);
⚫获取/设置异步 IO 所有权(cmd=F_GETOWN 或 cmd=F_SETOWN);
⚫获取/设置记录锁(cmd=F_GETLK 或 cmd=F_SETLK);
…:表示附加可变参数,需要根据不同的cmd来传入对应的实参,配合cmd来使用。。
cmd        含义        第三个参数类型        成功时返回值
F_DUPFD        复制文件描述符        int        复制的新文件描述符
F_GETFD        获取文件描述符标志        无        文件描述符标志位(整数)
F_SETFD        设置文件描述符标志        int        0:成功;-1:失败
F_GETFL        获取文件状态标志        无        文件状态标志位(整数)
F_SETFL        设置文件状态标志        int        0:成功;-1:失败
F_GETLK        获取记录锁        struct flock *        0:无冲突;-1:失败
F_SETLK        设置记录锁        const struct flock *        0:成功;-1:失败
F_SETLKW        设置记录锁(阻塞版本)        const struct flock *        0:成功;-1:失败
F_GETOWN        获取异步I/O所有权        无        所有权的进程ID(整数)
F_SETOWN        设置异步I/O所有权        pid_t        0:成功;-1:失败
F_GETLK64        获取记录锁(64位版本)        struct flock64 *        0:成功;-1:失败
F_SETLK64        设置记录锁(64位版本)        const struct flock64 *        0:成功;-1:失败
F_SETLKW64        设置记录锁(阻塞版本,64位版本)        const struct flock64 *        0:成功;-1:失败
F_GETSIG        获取信号        无        信号值(整数)
F_SETSIG        设置信号        int        0:成功;-1:失败
F_GETLEASE        获取文件租约状态        无        租约状态
F_SETLEASE        设置文件租约        int        0:成功;-1:失败
F_NOtiFY        监视文件状态变化        int        0:成功;-1:失败
F_GETPIPE_SZ        获取管道容量        无        管道容量        (整数)
F_SETPIPE_SZ        设置管道容量        int        0:成功;-1:失败
F_GET_SEALS        获取文件封印状态        无        文件封印状态(整数)
F_ADD_SEALS        添加文件封印        unsigned int        0:成功;-1:失败
F_GET_RW_HINT        获取读写优化提示        无        读写优化提示(整数)
F_SET_RW_HINT        设置读写优化提示        unsigned int        0:成功;-1:失败
F_GET_FILE_RW_HINT        获取文件读写优化提示        无        读写优化提示(整数)
F_SET_FILE_RW_HINT        设置文件读写优化提示        unsigned int        0:成功;-1:失败
F_GETLKPID        获取记录锁并返回占有者的进程ID        struct flock *        整数:占有者的进程ID;
-1:失败
F_OFD_GETLK        获取OFD记录锁        struct flock *        0:无冲突;-1:失败
F_OFD_SETLK        设置OFD记录锁        const struct flock *        0:成功;-1:失败
F_OFD_SETLKW        设置OFD记录锁(阻塞版本)        const struct flock *        0:成功;-1:失败
4.返回值
执行失败情况下,返回-1,并且会设置errno;执行成功的情况下,其返回值与cmd(操作命令)有关,譬如cmd=F_DUPFD(复制文件描述符)将返回一个新的文件描述符、cmd=F_GETFD(获取文件描述符标志)将返回文件描述符标志、cmd=F_GETFL(获取文件状态标志)将返回文件状态标志等。
1.3.9.2 ioctl
用于操作特殊文件或硬件外设,需结合内核驱动,目前不需深入了解。        
1.头文件
#include         
2.函数原型
int ioctl(int fd, unsigned long request, ...);        
3.参数
fd:表示要操作文件的文件描述符。
request:此参数与具体要操作的对象有关,没有统一值。
4.返回值
若函数调用成功返回 0,失败返回-1。

更多回帖

发帖
×
20
完善资料,
赚取积分