嵌入式第十八天

一、补充(标准IO端口命令)

(1)fputs和fgets

fgetc和fgets在复制中的区别:

#include "software.h"
#include <stdio.h>

/***************************************************
 * 函数名:CopyAsciiFileContent
 * 功  能:
 *      将srcfile中的文件内容拷贝到dstfile文件中
 * 参  数:
 *      dstfile:目的文件的文件路径
 *      srcfile:源文件的文件路径
 * 返回值:
 *      成功返回0 
 *      失败返回-1 
 * 注意事项:
 *      1.该函数只能拷贝ASCII普通文件内容
 **************************************************/
int CopyAsciiFileContent(const char *dstfile, const char *srcfile)
{
    FILE *fsrc = NULL;
    FILE *fdst = NULL;
    int temp = 0;

    fsrc = fopen(srcfile, "r");
    if (NULL == fsrc)
    {
        goto err2;
    }

    fdst = fopen(dstfile, "w");
    if (NULL == fdst)
    {
        goto err1;
    }

    while (1)
    {
        temp = fgetc(fsrc);
        if (EOF == temp)
        {
            break;
        }
        fputc(temp, fdst);
    }

    fclose(fsrc);
    fclose(fdst);

    return 0;

err1:
    fclose(fsrc);
err2:
    return -1;
}
/***************************************************
 * 函数名:CopyAsciiFileContent2
 * 功  能:
 *      将srcfile中的文件内容拷贝到dstfile文件中
 * 参  数:
 *      dstfile:目的文件的文件路径
 *      srcfile:源文件的文件路径
 * 返回值:
 *      成功返回0 
 *      失败返回-1 
 * 注意事项:
 *      1.该函数只能拷贝ASCII普通文件内容
 **************************************************/
int CopyAsciiFileContent2(const char *dstfile, const char *srcfile)
{
    FILE *fsrc = NULL;
    FILE *fdst = NULL;
    char tmpbuff[4096] = {0};
    char *pret = NULL;

    fsrc = fopen(srcfile, "r");
    if (NULL == fsrc)
    {
        goto err1;
    }

    fdst = fopen(dstfile, "w");
    if (NULL == fdst)
    {
        goto err2;
    }

    while (1)
    {
        pret = fgets(tmpbuff, sizeof(tmpbuff), fsrc); 
        if (NULL == pret)
        {
            break;
        }
        fputs(tmpbuff, fdst);
    }

    fclose(fsrc);
    fclose(fdst);

    return 0;

err2:
    fclose(fsrc);
err1:
    return -1;
}

注意:

puts(tmpbuff); 
 fputs(tmpbuff, stdout);
 puts会多打印一个\n字符

gets(tmpbuff);
 fgets(tmpbuff, sizeof(tmpbuff), stdin);
 gets会去掉用户输入\n字符 
 fgets不会去掉用户输入的\n字符  (而且两者的传输速率也不相同fputs较快)

(2)fprintf、fscanf

(3)fwrite、fread

ASCII码文件是一种特殊的二进制文件:

比如:2024
    ASCII码文件: '2' '0' '2' '4'                                代码、文本文件
                 00110010 00110000 00110010 00110100
    二进制文件: 2024                                           视频、图片、压缩包等
               0000 0000 0000 0000 0000 0111 1110 1000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值