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

在这里插入图片描述
在这里插入图片描述

三、应用

网络重定向

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周末不下雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值