1 文件打开方式介绍

/*
     r   :读操作,文件指针指向文件头      (若不存在则打开失败)
     r+  :读、写操作,文件指针指向文件头      (若不存在则打开失败,若存在则清空文件)
     w   :写操作,文件指针指向文件头            (若不存在则新建,若存在则清空文件)
     w+  :读、写操作,文件指针指向文件头        (若不存在则新建,若存在则清空文件)
     a   :写操作, 文件指针指向文件结尾处     (若不存在则新建,若存在则不清空文件,此时读取不到文件内容)
     a+  :读、写操作,读指针指向文件开头,写指针指向文件结尾。 (若不存在则新建,若存在则不清空文件)
       ================ 加上b 则表示操作二进制文件 ===========
     */

2 文本文件写操作

int fprintFile(char* filePath) {FILE *fp = fopen(filePath, "a");if (NULL == fp) {fprintf(stdout, "[%s]open file %s NG\n", __FUNCTION__, filePath);return -1;}char tmpStr[1024];snprintf(tmpStr, sizeof(tmpStr), "%s\n", "123");
#if 1fprintf(fp, "%s", tmpStr); /*使用 fprintf 写入文件*/
#elseif (EOF == fputs(tmpStr, fp)) { /*使用 fputs 写入文件*/fprintf(stdout, "fputs(tmpStr,fp) error\n");}
#endiffflush(fp); /*将缓存中的数据写入文件*/fclose(fp);return 0;
}

3 文本文件读操作

int fgetsFile(char* filePath) {FILE *fp = fopen(filePath, "a+");if (NULL == fp) {fprintf(stdout, "[%s]open file %s NG\n", __FUNCTION__, filePath);return -1;}/*逐行读取文件*/char lineData[1024];int lineNum = 1;while (1) {//读取一行数据,最后一个字符的换行符号'\n'if (fgets(lineData, sizeof(lineData), fp) == NULL) {break;}fprintf(stdout, "line%03d: %s", lineNum++, lineData);}fclose(fp);return 0;
}

4 二进制文件写操作

int fwriteFile(char* filePath) {FILE *fp = fopen(filePath, "wb+"); /*可读性,读从文件开头,写从文件结尾处*/if (NULL == fp) {fprintf(stdout, "[%s]open file %s NG\n", __FUNCTION__, filePath);return -1;}int tmpInt[6] ={0,1,2,3,4,5};fwrite(tmpInt,sizeof(int),sizeof(tmpInt)/sizeof(int),fp); /*int 写入文件*/printf("[%s] sizeof(tmpInt)=%d\n", __FUNCTION__, sizeof(tmpInt));char tmpStr[7]="012345";fwrite(tmpStr,sizeof(char),sizeof(tmpStr),fp); /* 字符串 写入文件*/fflush(fp); /*将缓存中的数据写入文件*/fclose(fp);return 0;
}

5 二进制文件读操作

struct tmpStru{int tmpInt[6];char tmpStr[7];
};
int freadFile(char* filePath) {FILE* fp = fopen(filePath, "rb"); //新建一个可写的文件if (NULL == fp) {printf("[%s]open file %s NG\n", __FUNCTION__, filePath);return -1;}// 逐个数据读入 int tmpInt[6];fread(tmpInt,sizeof(int),sizeof(tmpInt)/sizeof(int),fp);  /*使用 fread 写入文件*/printf("[%s] tmpInt[0]=%d\n", __FUNCTION__, tmpInt[0]);printf("[%s] tmpInt[5]=%d\n", __FUNCTION__, tmpInt[5]);char tmpStr[7];fread(tmpStr,sizeof(char),sizeof(tmpStr),fp); /*使用 fread 写入文件*/printf("[%s] tmpStr=%s\n", __FUNCTION__, tmpStr);// 一次性读入到结构体fseek(fp, 0, SEEK_SET); /*将文件指针指向开头*/tmpStru tmp;fread(&tmp,sizeof(char),sizeof(tmpStru),fp);  /*使用 fread 写入文件*/printf("[%s] tmpInt[0]=%d\n", __FUNCTION__, tmp.tmpInt[0]);printf("[%s] tmpInt[5]=%d\n", __FUNCTION__, tmp.tmpInt[5]);printf("[%s] tmpStr=%s\n", __FUNCTION__, tmp.tmpStr);fclose(fp);return 0;
}

6 利用管道读取xshell执行结果

int freadPopen(char *xshellcmd) {FILE *fp;// fp = popen( "ls -l", "r" ); //将“ls -l”命令的输出 通过管道读取(“r”参数)到FILE* streamfp = popen( "ping -c 10 10.34.114.223", "r" );// fp = popen(xshellcmd, "r");char buf[1024];int num = 1;while (1) {memset(buf, '\0', sizeof(buf));  //初始化buf,以免后面写入乱码到文件中// 从管道中读取xshell 命令的结果
#if 0// 若命令没有结束则fread会等待,直到可以读取到指定最大字符数size_t ret = fread(buf, sizeof(char), sizeof(buf), fp);if (ret < sizeof(buf)) {printf("\ntest end flag ret = %d\n", ret);break;}
#else/* 若命令没有结束则fgets会等待,逐行读取文件 */if (fgets(buf, sizeof(buf), fp) == NULL) {break;}
#endifprintf("[%03d]%s",num++, buf);}fclose(fp);return 0;
}

转载于:https://www.cnblogs.com/Chris83/p/9523321.html

文件(文本、二进制)读写,利用popen读取linux命令读取结果相关推荐

  1. vue 文件转换二进制_Vue利用Blob下载原生二进制数组文件

    本文实例为大家分享了Vue利用Blob下载原生二进制数组文件的具体代码,供大家参考,具体内容如下 在服务端推送过来的二进制数组(JSON格式),在前端要处理成JS原生数组以后才能做成Blob,有两个地 ...

  2. linux 文件夹大小_技能“慧”|初识Linux(二)

    上期我们对Ubuntu的界面有了简单的认识,以及如何与本机之间进行文件传输,今天我们就来带大家一起了解一下命令行. 去可视化--命令行 虽然Ubuntu有着漂亮的图形界面,但是我们使用更多的还是命令行 ...

  3. linux 复制指定类型,用Linux命令行实现删除和复制指定类型的文件

    (一)Linux 删除当前目录及子目录中所有某种类型的文件 方法1 : 此方法不能处理目录中带空格的那些. rm -rf `find . -name "*.example"` Li ...

  4. linux删除的文件有回收站么,Linux命令行删除文件到回收站

    先说方法,原理后面分析. 由于我使用的是Ubuntu14,这里以该系统为主,其他系统略有区别. 可以新加别名del,用于删除文件. alias del='mv -t ~/.local/share/Tr ...

  5. Linux 命令 常用总结(一)

    Linux 命令 常用总结 目录 Linux 命令 常用总结 (1) xargs (2)od (3):sed (4):awk (5):grep (6):shutdown (7):cd (8):ls ( ...

  6. 讲的比较好的linux命令

    转: https://www.jianshu.com/p/341bc031ea2b 大家都知道,Linux系统提供了非常多非常多的命令或工具,这些命令都各有所长,都是系统需要的.但我们精力有限,要掌握 ...

  7. Java程序员最常用的Linux命令

    大家都知道,Linux系统提供了非常多非常多的命令或工具,这些命令都各有所长,都是系统需要的.但我们精力有限,要掌握全部的命令不太现实,所以只需要掌握其中部分常用的命令即可.这里,我就从一个Java程 ...

  8. linux 查询日志 去重,linux命令(12)uniq去重

    实例详细说明linux下去除重复行命令uniq 一,uniq干什么用的 文本中的重复行,基本上不是我们所要的,所以就要去除掉.linux下有其他命令可以去除重复行,但是我觉得uniq还是比较方便的一个 ...

  9. 《Linux命令行与shell脚本编程大全》第三章

    3.1 启动 shell GNU bash shell能提供对Linux系统的交互式访问.它是作为普通程序运行的,通常是在用户登录终端时启动.登录时系统启动的shell依赖于用户账户的配置. /etc ...

最新文章

  1. 近期要推出的ISA2006系列文章
  2. iphone如何查看wifi密码_WIFI密码如何破解
  3. 2018年科技将怎样改变世界?阿里12位科学家发布年度科技趋势预测
  4. asp.net的MessageBox
  5. 解决 springboot + JPA + MySQL 表名全大写 出现 “表不存在” 问题(Table ‘XXX.xxx‘ doesn‘t exist)
  6. VMware10上新建虚拟机步骤图解
  7. 业界重磅新书《UNIX/Linux网络日志分析与流量监控》首发
  8. Iptables命令使用举例
  9. 【Flink】Flink 与数据库的集成最佳实践 【视频笔记】
  10. 转载:python能用来做什么?
  11. /etc/fstab修改及mkfs(e2label)相关应用与疑问
  12. Java基础---Java---基础加强---内省的简单运用、注解的定义与反射调用、 自定义注解及其应用、泛型及泛型的高级应用、泛型集合的综合
  13. fat32文件系统格式在linux,FAT32文件系统的存储组织结构(一)
  14. termux python 打开摄像头_python+opencv 电脑调用手机的摄像头
  15. 山水文园集团:向着更美好 稳步前行
  16. NANDFLASH与PSRAM
  17. 开源项目-CRM客户关系管理系统
  18. 身份证/异地身份证在北京办理的解决办法
  19. 解读|TARS开源项目发布Go语言版本
  20. Altium Designer 14.1.5 Build 30772

热门文章

  1. python在字符串结尾加反斜杠_Python原始字符串和尾部反斜杠
  2. 最新快手JS逆向分析
  3. MySQL常见的存储引擎的区别?
  4. XML 文档结构必须从头至尾包含在同一个实体内
  5. ps4pro服务器维护,PS4 | PS4 Pro 常见问题 | PlayStation
  6. mysql做wp网站_mysql做wp网站
  7. android自定义工具栏,Android工具栏中的自定义图标
  8. 苹果6s强制删除id锁_回收宝:苹果6S手机从细节查真假
  9. 编程工作怎么样手工问号
  10. JSP提交中文乱码的解决