read/fread/ctrl+d/enter/标准输入缓冲区

本文详细介绍了Linux环境下的C语言库函数read和fread的区别,以及man命令的使用。通过测试代码展示了非阻塞和阻塞读写功能,并探讨了关键的命令行输入如换行、ctrl+d的作用。
摘要由CSDN通过智能技术生成

环境

linux环境

(WSL/Ubuntu22.04)

关键函数

linux下  C语言相关的库函数都可以通过在命令行上输入man + 函数名获得相关资料

另外man + 命令名字 也可以获得该命令的相关资料

read

keyword:nonblock/file descriptor

该函数是非阻塞性的  假设设置参数 调用函数 想要读取10个字符  如果目标缓冲区只有9个 就读取9个立马返回 

参数中需要给定文件描述符

对于标准输入/标准输出的文件描述符是数值0/1

如果读取到EOF,立马返回

正常情况下返回读取到的字符数量

fread

keyword:block/FILE* 

该函数是阻塞性的 假设设置参数调用函数 想要读取10个字符  如果目标缓冲区只有9个 函数不会立马返回 而是等待10个字符存在

参数中需要给定FILE*指针

对于标准输入/标准输出的文件描述符是stdin/stdout

如果读取到EO立马返回

正常情况下返回读取到的字符数量

关键命令行输入

enter/换车换行键

该输入同时有三个作用

  1. 将shell文本显示换行
  2. 将shell上的输入的该行字符串输入到标准输入的缓冲区
  3. 在标准输入的缓冲区末尾插入换车换行符(ASCII码:'\n')

ctrl + d组合键输入

该组合键的一个作用是:当shell某行输入了字符但是还没有输入回车换行  这时候输入该组合键 会将该行字符输入到标准输入的缓冲区

该组合键的另一个作用是:当shell中所有字符都输入到标准输入的缓冲区  这时候输入该组合键 会在标准输入的缓冲区放入一个EOF

关键函数和关键命令行输入 使用和测试

测试代码

#include <stdio.h>
#include <sys/select.h>
#include <unistd.h>
#include <string.h>

void func()
{
	char a[10];
    memset(a, 0, sizeof(a));
    int nums = 0;
    while((nums = fread(a, 1, sizeof(a), stdin)) == sizeof(a))
    {
        printf("nums:%d\n", nums);
        fwrite(a, 1, nums, stdout);
    }
    fwrite(a, 1, nums, stdout);
	return;
}

void func2()
{
    char a[10];
    memset(a, 0, sizeof(a));
    int nums = 0;
    while((nums = read(0, a, sizeof(a))) != 0)
    {
        printf("nums:%d\n", nums);
        write(1, a, nums);
    }
    write(1, a, nums);
	return;
}

int main()
{
    func2();
    printf("next test\n");
    func();
    printf("end");
    return 0;
}

测试输入输出

                                

根据测试的输入输出应该能完全验证关键函数和关键命令行输入的作用无误 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值