C语言read和write函数解析

在研究一份AES加密代码的时候,发现代码从command line获取数据仅仅使用了read函数,很是疑问。从command line获取数据不是要使用scanf函数吗?所以,详细了解了C库的read函数特性。顺带了write函数,他们是couple一对儿!!!
主要参考文章:https://blog.csdn.net/dangzhangjing97/article/details/79619894
感谢原博主

使用read、write函数们需要包含头文件

#include<unistd.h>

read()

用于文件描述符对应的文件中读取数据,原型:

ssize_t read(int fd,void*buf,size_t count)
参数说明:
fd: 是文件描述符, 从command line获取数据时,为0
buf: 为读出数据的缓冲区;
count: 为每次读取的字节数(是请求读取的字节数,读上来的数据保
存在缓冲区buf中,同时文件的当前读写位置向后移)

返回值:

成功:返回读出的字节数
失败:返回-1,并设置errno,如果在调用read
之前到达文件末尾,则这次read返回0

write()

用于将数据写入到文件描述符对应的文件,原型:

ssize_t write(int fd,const void*buf,size_t count);
参数说明:
fd:是文件描述符(输出到command line,就是1)
buf:通常是一个字符串,需要写入的字符串
count:是每次写入的字节数

返回值:

成功:返回写入的字节数
失败:返回-1并设置errno
ps: 写常规文件时,write的返回值通常等于请求写的字节
数count, 而向终端设备或者网络写时则不一定

因此,read函数就可以取代scanf从command line读取数据;write函数就可以代替printf,往command line打印输出。

示例代码

#define MAXLEN  1024
int main(void)
{ 
    int ret;
   // char key[17];
    char *p;

    p = (char*)malloc(MAXLEN*(sizeof(char*)));	//申请一块内存,存放读取数据
    memset(p,0,MAXLEN);

    printf("请输入一串字符:\n");

    ret = read(0,p,MAXLEN);

    printf("read 函数就可以直接从command line 读取数据吗?试一试read到没!\n");
    printf("下面为定义内存数据输出。。。\n");

    for(int i =0; p[i]!='\n';i++)
    {
        printf("key[%d] = %c\n",i,p[i]);
    }

    printf("试一试write函数~~~\n");
	for(int i =0; p[i] != '\n';i++)
	{
		ret = write(1,&p[i],1);
		printf("\n");
		printf("写入数据个数:ret = %d\n",ret);
	}
	free(p);
	
}
  • 19
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

汽车电子开发攻城狮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值