标准输入重定向和文件描述符的关系

实验目标

通过一段程序查看输入重定向工作中文件描述符0对应的文件的变化, 以了解文件描述符和标准输入重定向的基本工作机制

实验方法

通过不进行标准输入重定向和进行标准输入重定向两个实验, 分别检查进程的文件描述符0对应的文件, 对比结果然后分析

实验过程

  1. 测试程序
int main(void){
    if(lseek(STDIN_FILENO,0,SEEK_CUR) == -1){
        printf("cannot set offset about this file\n");
        sleep(100);
    }
    else{
        printf("can set off about this file\n");
        sleep(100);
    }
    exit(0);
}
  1. 不进行输入重定向

编译后直接执行, 通过ps -aux | grep lseek查到进程号, 然后根据进程号通过lsof -p PID查看文件描述符0对应的文件, 得到如下结果:在这里插入图片描述
可以看到0号文件描述符对应的是一个设备文件, 应该是一个标准输入设备文件

  1. 进行输入重定向
    编译后, ./lseek < ./makefile通过输入重定向将输入重定向到另一个文件, 通过与上面相同命令查看文件描述符0对应的文件, 得到如下的结果:
    在这里插入图片描述
    可以看到0号文件描述符对应的是我们指定的文件

实验结论

标准输入重定向是通过打开被指定重定向的目标文件后让其占据文件描述符0, 而标准输入设备文件被关闭了, 此时标准输入无法正常工作(输入设备没有被正常打开)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值