将stdin定向到文件

进程通过文件描述符读取数据,而非直接从文件。将stdin定向到文件,可以先关闭文件描述符0,然后打开目标文件,再利用dup()系统调用将打开的文件映射到文件描述符0,从而实现输入重定向。最后关闭原始文件描述符,确保只有stdin与目标文件相连。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 源头:进程并不是从文件读取数据,而是从文件描述符读取数据。

将stdin定向到文件的方法

1.close the open

   初始状态:系统中采用的是典型的设置---三种标准流被连接到终端设备上:输入的数据流经过文件描述符0,输出的标准流经过文件描述符1,2.

   其次:close(0)即将标准输入的连接挂断。则当前文件描述符数组的第一个元素现在处于空闲状态。

   最后:使用open(filename,O_RDONLY)打开一个想连到stdin上的文件。根据最低可用描述符原则,打开的文件被连接到标准输入上。

例如:

#include	<stdio.h>
#include	<fcntl.h>
main()
{
	int	fd ;
	char	line[100];

	/* read and print three lines */

	fgets( line, 100, stdin ); printf("%s", line );//从键盘上读取输出的字符串

	fgets( line, 100, stdin ); printf("%s", line );
	fgets( line, 100, stdin ); printf("%s", line );

	/* redirect input */

	close(0);
	fd = open("/etc/passwd", O_RDONLY);
	if ( fd != 0 ){
		fprintf(stderr,"Could not open data as fd 0\n");
		exit(1);
	}

	/* read and print three lines */

	fgets( line, 100, stdin ); printf("%s", line );//从文件中读取输出字符串
	fgets( line, 100, stdin ); printf("%s", line );
	fgets( line
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值