系统编程之高级文件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


三、应用


网络重定向


相关文章
|
1天前
|
存储 Java 编译器
Java文件IO操作基础
Java文件IO操作基础
5 0
|
2天前
|
消息中间件 关系型数据库 Kafka
实时计算 Flink版操作报错之在执行任务时遇到了一个IO错误,具体表现为无法从本地主机(localhost)下载文件,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
2天前
|
安全 Linux vr&ar
【Linux 系统】基础 IO(动静态库)-- 详解
【Linux 系统】基础 IO(动静态库)-- 详解
|
2天前
|
存储 固态存储 Linux
【Linux 系统】基础 IO(文件系统 & inode & 软硬链接)-- 详解
【Linux 系统】基础 IO(文件系统 & inode & 软硬链接)-- 详解
|
4天前
|
存储 编译器 C语言
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose(下)
C语言进阶⑱(文件上篇)(动态通讯录写入文件)(文件指针+IO流+八个输入输出函数)fopen+fclose
10 0
|
10天前
|
存储 缓存 安全
Java 中 IO 流、File文件
Java 中 IO 流、File文件
|
10天前
|
Java Unix Windows
|
2天前
|
存储 Java API
【JAVA学习之路 | 进阶篇】IO流及流的分类
【JAVA学习之路 | 进阶篇】IO流及流的分类
|
10天前
|
监控 Java
Java一分钟之-NIO:非阻塞IO操作
【5月更文挑战第14天】Java的NIO(New IO)解决了传统BIO在高并发下的低效问题,通过非阻塞方式提高性能。NIO涉及复杂的选择器和缓冲区管理,易出现线程、内存和中断处理的误区。要避免这些问题,可以使用如Netty的NIO库,谨慎设计并发策略,并建立标准异常处理。示例展示了简单NIO服务器,接收连接并发送欢迎消息。理解NIO工作原理和最佳实践,有助于构建高效网络应用。
15 2
|
10天前
|
Java 开发者
Java一分钟之-Java IO流:文件读写基础
【5月更文挑战第10天】本文介绍了Java IO流在文件读写中的应用,包括`FileInputStream`和`FileOutputStream`用于字节流操作,`BufferedReader`和`PrintWriter`用于字符流。通过代码示例展示了如何读取和写入文件,强调了常见问题如未关闭流、文件路径、编码、权限和异常处理,并提供了追加写入与读取的示例。理解这些基础知识和注意事项能帮助开发者编写更可靠的程序。
24 0

热门文章

最新文章