当前位置: 首页 > news >正文

嵌入式自学第二十五天(5.21)

(1)二进制文件读写操作:
例:
#include<stdio.h>
int main()
{
    FILE *fp = fopen("a.out","r");
    FILE *fp1 = fopen("app","w");
    if(NULL == fp || NULL == fp1)
    {
        fprintf(stderr, "fopen error");
        return 1;
    }

    char buf[10240];
    if(0 == fread(buf,10240,1,fp))
    {
        fprintf(stderr, "fread error");
        return 1;
    }

    printf("%s\n",buf);
    fwrite(buf,8568,1,fp1);

    fclose(fp);
    return 0;
}
注意:写操作的第二个参数必须是要写入文件的精确大小。
    返回值为0说明读完了,返回值大于零表示读的字节数,返回值-1表示出错
    可以用ll命令查看文件大小
(2)文件定位
例:
#include<stdio.h>
int main()
{
    FILE * fp = fopen("2.txt", "r");
    FILE *fp1 = fopen("1.txt", "w");
    if(NULL == fp)
    {
        fprintf(stderr, "fopen error");
        return 1;
    }

    fseek(fp, 0,SEEK_END);
    long size = ftell(fp);

    printf("%ld\n",size);
    rewind(fp);

    char buf[1024];
    int ret = fread(buf, 1024, 1, fp);
    fwrite(buf, size, 1, fp1);
    printf("%d", ret);
    fclose(fp);
    fclose(fp1);

    return 0;
}
注意:int fseek(文件流,偏移量,起始位置),位置可以为:SEEK_SET头,SEEK_END结尾, SEEK_CRT经过读写后的当前位置。返回值为0偏移成功,-1失败。
    long ftell(fp)返回pos值即当前位置。
    rewind(fp)让pos置零。
(3)缓冲区:是快速设备和慢速设备间的中转站。
行缓冲区:1kb 终端 人机交互stdout
遇到\n刷新、缓冲区满刷新、程序正常结束刷新,fflush刷新  fflush(stdout);

全缓冲区  4k  主要用于文件读写
刷新条件:缓冲区满刷新、程序正常结束刷新,fflush刷新  fflush(fp)

无缓冲区:0k 主要用于处理错误信息输出stderr

(4)系统调用:操作系统自带的函数调用,数据直接传进设备。
(5)系统文件操作函数:open read write close
例:读
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char **argv)
{
  
  int fd = open("1.txt", O_RDONLY);
  if (-1 == fd)
    {
      fprintf(stderr, "open error\n");
      return 1;
    }

  char buf[1024] = {0};
  ssize_t ret = read(fd,buf,sizeof(buf));
  printf("readret:%ld %s\n", ret,buf);
  
  close(fd);

  // system("pause");
  return 0;
}

#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char **argv)
{
  int a = 12312;
  int fd = open("1.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
  if (-1 == fd)
    {
      fprintf(stderr, "open error\n");
      return 1;
    }

  char buf[1024] = "hello";
  ssize_t ret = write(fd, buf, strlen(buf));
  printf("write ret:%ld\n", ret);

  close(fd);

  // system("pause");
  return 0;
}


注意:
    文件描述符:用数字代表某个文件流。默认范围是int 0-1023。
0 stdin
1 stdout
2 stderr描述符与流对象。
    系统调用标准头文件 unistd.h。
    文件模式:flags:O_REONLY, O_WRONDY, O_RDWR对应位置1。
O_CREAT创建文件
O_TRUNC清空
    文件操作权限:-rw-rw-r--
-普通文件
d目录
rwx读写执行
rew-读写
linux用户
linux组名
其他人

rw-rw-rw-
0666
umask掩码,用给定权限来减掩码,才是文件操作权限,0664。
    write(文件流,buf,实际大小)
返回写入的字节数,0表示未写入(操作设备时可能未写入),-1表示错

read(文件流,buf,设定长度)
返回读到的字节数,读完后0表示文件读完,-1表示错误。

    
 

相关文章:

  • 10-码蹄集600题基础python篇
  • 【Python生成器全解析】从基础到高阶应用实战
  • Jenkins (七) - Docker Harbor
  • 三维表面轮廓仪的维护保养是确保其长期稳定运行的关键
  • Java操作数据库,JDBC
  • 【C++】vector容器实现
  • sqli-labs第十八关——POST-UA注入
  • 【题解-洛谷】B4302 [蓝桥杯青少年组省赛 2024] 出现奇数次的数
  • 振动分析 - 献个宝
  • Java垃圾回收与JIT编译优化
  • msdn怎么下载win10专业版_msdn上下载win10专业版及安装方法
  • 直播美颜SDK技术解析:滤镜渲染与动态贴纸引擎融合的底层实现
  • Go语言内存共享与扩容机制 -《Go语言实战指南》
  • 5月21日
  • AI驱动新增长:亚马逊Rufus广告点击率提升300%的奥秘
  • 回溯法求解N皇后问题
  • 【C++ 真题】P5736 【深基7.例2】质数筛
  • 【笔记】PyCharm 中创建Poetry解释器
  • PyTorch学习之:torch.gather是什么?
  • MBSS-T1:基于模型的特定受试者自监督运动校正方法用于鲁棒心脏 T1 mapping|文献速递-深度学习医疗AI最新文献
  • 湖南网站制作/成都seo培
  • 东营市城市和建设管理局网站/推广有奖励的app平台
  • 松江做网站公司/软文代写
  • 做网站PAAS系统/百度关键词怎么设置
  • 新网站做seo优化步骤/百度推广电话销售好做吗
  • 手机电影网站怎么做/外链百科