Linux系统编程19-fcntl
fcntl
是Linux中的一个系统调用,用于对文件描述符进行控制操作。其主要功能包括文件复制、文件描述符的获取和设置、非阻塞I/O等操作。
#include <unistd.h>
#include <fcntl.h>
int fcntl(int fd, int cmd, .../* arg */); // arg
参数:
fd : 需要操作的文件描述符
cmd: 对文件描述符如何操作
- F_DUPFD 复制文件描述符 ,返回一个新的文件描述符
int ret = fcntl(fd, F_DUPFD);
- F_GETFL 获取指定的文件描述符文件状态 flag
获取的flag和通过open函数传递的flag是一个东西
- F_SETFL 设置文件描述符文件状态flag
必选 : O_RDONLY, O_WRONLY, O_RDWR 不可修改
可选 : O_APPEND(追加数据), O_NONBLOCK(非阻塞)
阻塞与非阻塞: 描述的是函数调用的行为
返回:执行成功或失败的状态。
实例:
fcntl.c
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
int fd = open("a.txt", O_RDWR);
if (fd == -1)
{
perror("open err");
return -1;
}
//复制文件描述符
// int ret = fcntl(fd,F_DUPFD);
//修改或者获取文件状态FLAG
int flag = fcntl(fd, F_GETFL);
//加入O_APPEND标记
flag |= O_APPEND;
int ret = fcntl(fd, F_SETFL, flag);
if (ret == -1)
{
perror("fcntl err");
return -1;
}
char *str = "\nnihao";
write(fd, str, strlen(str));
close(fd);
return 0;
}
本文作者:言叶以上
本文链接:https://www.cnblogs.com/anqwjoe/p/16793209.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
Linux
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步