系统编程之高级文件IO(十)——文件描述符操作(重定向)

简介: 系统编程之高级文件IO(十)——文件描述符操作(重定向)

一、换个使用glibc函数与系统调用


C标准库提供了实现两者间相互转换的函数


int fileno(FILE *fp)

把文件指针转换成文件描述符

FILE *fdopen(int fd, const char *mode)

把文件描述符转换成文件指针


int main(int argc, char **argv)
{
  int fd = open(argv[1], O_REWR | O_CREAT, 0655);
  FILE *fp = fdopen(fd, "a+");
  char buffer[1024];
  fputs("hello", fp);
  fd = fileno(fp);
  lseek(fd, 0, SEEK_SET);
  int n_r = read(fd, buffer, sizeof(buffer));
  fclose(fp);
}


二、文件描述符复制(重定向)


2.1 dup


int dup(int oldfd);

当调用dup函数时,内核在进程中创建一个新的文件描述符,此描述符是当前可用文件描述符的最小数值,这个文件描述符指向oldfd所拥有的文件表项。

int new_fd = dup(fd);
  write(new_fd, "hello world", 11);
  close(new_fd);


调用dup(oldfd)等效于,fcntl(oldfd, F_DUPFD, 0)


2.2 dup2


int dup2(int oldfd, int newfd);

dup2和dup的区别就是可以用newfd参数指定新描述符的数值,如果newfd已经打开, 则先将其关闭。

如果newfd等于oldfd,则dup2返回newfd,而不关闭它。

dup2函数返回的新文件描述符同样与参数oldfd共享同一文件表项

调用dup2(oldfd, newfd)等效于,close(newfd); fcntl(oldfd, F_ DUPFD, newfd):


0a2653c851af460fa595bd959398a8f1.png2d65d23f6d4748949b924e4057485923.png


三、应用


网络重定向


相关文章
|
12天前
|
数据库
同步IO模型是一种常见的编程模型
【10月更文挑战第5天】同步IO模型是一种常见的编程模型
12 2
|
16天前
|
搜索推荐 索引
【文件IO】实现:查找文件并删除、文件复制、递归遍历目录查找文件
【文件IO】实现:查找文件并删除、文件复制、递归遍历目录查找文件
29 2
|
16天前
|
编解码 Java 程序员
【文件IO】文件内容操作
【文件IO】文件内容操作
34 2
|
16天前
|
存储 Java API
【文件IO】文件系统操作
【文件IO】文件系统操作
36 1
|
1月前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
1月前
|
网络协议 Java Linux
高并发编程必备知识IO多路复用技术select,poll讲解
高并发编程必备知识IO多路复用技术select,poll讲解
|
17天前
|
存储 Java 程序员
【Java】文件IO
【Java】文件IO
30 0
|
1月前
|
Linux C语言
C语言 文件IO (系统调用)
本文介绍了Linux系统调用中的文件I/O操作,包括文件描述符、`open`、`read`、`write`、`lseek`、`close`、`dup`、`dup2`等函数,以及如何获取文件属性信息(`stat`)、用户信息(`getpwuid`)和组信息(`getgrgid`)。此外还介绍了目录操作函数如`opendir`、`readdir`、`rewinddir`和`closedir`,并提供了相关示例代码。系统调用直接与内核交互,没有缓冲机制,效率相对较低,但实时性更高。
|
2月前
|
存储 监控 Linux
性能分析之从 IO 高定位到具体文件
【8月更文挑战第21天】性能分析之从 IO 高定位到具体文件
34 0
性能分析之从 IO 高定位到具体文件
|
2月前
IO流拷贝文件的几种方式
IO流拷贝文件的几种方式
34 1