惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Vulnerabilities – Threatpost
U
Unit 42
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
P
Proofpoint News Feed
F
Full Disclosure
月光博客
月光博客
Engineering at Meta
Engineering at Meta
博客园_首页
The Register - Security
The Register - Security
G
Google Developers Blog
The Cloudflare Blog
博客园 - Franky
K
Kaspersky official blog
A
Arctic Wolf
Scott Helme
Scott Helme
C
Cisco Blogs
Hugging Face - Blog
Hugging Face - Blog
C
Check Point Blog
NISL@THU
NISL@THU
AI
AI
D
DataBreaches.Net
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Stack Overflow Blog
Stack Overflow Blog
Project Zero
Project Zero
The GitHub Blog
The GitHub Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
量子位
Vercel News
Vercel News
T
Tor Project blog
P
Privacy International News Feed
D
Docker
I
Intezer
L
LangChain Blog
P
Proofpoint News Feed
Security Latest
Security Latest
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
博客园 - 聂微东
AWS News Blog
AWS News Blog
Martin Fowler
Martin Fowler
P
Privacy & Cybersecurity Law Blog
V
V2EX
Last Week in AI
Last Week in AI
C
Cybersecurity and Infrastructure Security Agency CISA
The Hacker News
The Hacker News
T
Tenable Blog
Blog — PlanetScale
Blog — PlanetScale
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog

博客园 - vsignsoft

CentOS7 安装 mysql-8.0.25-el7-x86_64.tar.gz Apache Doris 编译 Tensorflow 模型保存与调用 制作 macOS Mojave 映像文件 openssh 免用户名/密码/服务器地址,登录远程服务器 FreeSWITCH 增加模块 mod_ilbc 解析 iOS crash 文件 私有地址与公网地址的转换 Supervisor 自动管理进程 使用 uWSGI 部署 Flask web 应用 安装 Flask macOS 上创建 Windows 兼容的 iso镜像文件 公式 X/N = int(H/N) * 65536 + [rem(H/N) * 65536 + L]/N 的运用 在VirtualBox 里安装纯DOS,进行汇编编程实践 Xcode 6、7 打包 苹果笔记本电脑,开不了机经验记录 CST时间转换成 yyyy-MM-dd格式 git 常规使用小结 XCode6 开发本地化应用
编程实现文件重定向
vsignsoft · 2019-05-09 · via 博客园 - vsignsoft

文件重定向涉及关键函数:

int dup(fd) - 新建文件描述符,指向 fd 所指向的文件;

int dup2(fd1, fd2) - fd2 指向 fd1 指向的文件,若fd2事先已经指向某文件,会自动断开指向;

举例:

重定向标准输出,到一个指定的文件。

代码:

几个标准文件描述符:

标准输入 0

标准输出 1

标准错误 2

 1 #include <stdio.h>
 2 #include <unistd.h>
 3 #include <sys/types.h>
 4 #include <sys/stat.h>
 5 #include <fcntl.h>
 6 #include <string.h>
 7 
 8 int main(int argc, char **argv)
 9 {
10         printf("before file redirect\n"); // 输出到屏幕
11         char buf[] = "before before\n";
12         write(1, buf, strlen(buf)); // 输出到屏幕
13 
14         int fd_stdout_bak = dup(1);
15         int fd_file = creat("file.dat", 0777);
16         int fd = dup2(fd_file, 1); // 1 指向 file.dat
17         printf("after file redirect, %s - %s\n", argv[0], argv[1]); // 输出到文件 file.dat
18         char buf1[] = "after after\n";
19         write(1, buf1, strlen(buf1)); // 输出到文件 file.dat
20 
21         dup2(fd_stdout_bak, 1);
22         printf("after restore stdout file\n"); // 恢复输出到屏幕
23         char buf2[] = "restore restore\n";
24         write(1, buf2, strlen(buf2)); // 恢复输出到屏幕
25 
26         close(fd_stdout_bak);
27         close(fd_file);
28 
29         return 0;
30 }

问题:

在执行标准输出重定向前,一定要先调用 printf 函数,

若不调用此函数,则重定向失败;

原因不明!

总结:

文件描述符是指向打开的文件;

不同的文件描述符可以指向同一个文件;

int close(int fd) 表示断开文件描述符的文件指向;

总之,文件描述符类似指针;