linux应用程序开发-文件编程-库函数
---恢复内容开始---
c库函数文件操作独立于具体的系统平台,可移植性较好。
库函数-创建和打开
FILE*fopen(const char*filename,const char*mode)
mode:打开模式
常见的打开模式:
r,rb:只读方式打开
w,wb: 只写方式打开,如果文件不存在,则创建该文件
a,ab:追加方式打开,如果文件不存在,则创建该文件
r+,r+b,rb+:读写方式打开
w+,w+b,wh+:读写方式打开,如果文件不存在,则创建该文件
a,a+b,ab+:读和追加方式打开,如果文件不存在,则创建该文件
b用于区分二进制文件和文本文件,这一点在DOS,window中区分,LINUX不区分二进制文件盒文本文件。
库函数-读
size_t fread(void*ptr,size_t size,size_t n,FILE *stream);
从stream指向的文件中读取n个字段,每个字段为size字节,并将读取的数据放入ptr所指的字符数组中,返回实际读取的字节数。
库函数-写
size_t fwrite(void*ptr,size_t size,size_t n,FILE *stream);
读字符:
int fgetc(FILE*stream);
---恢复内容结束---
c库函数文件操作独立于具体的系统平台,可移植性较好。
库函数-创建和打开
FILE*fopen(const char*filename,const char*mode)
mode:打开模式
常见的打开模式:
r,rb:只读方式打开
w,wb: 只写方式打开,如果文件不存在,则创建该文件
a,ab:追加方式打开,如果文件不存在,则创建该文件
r+,r+b,rb+:读写方式打开
w+,w+b,wh+:读写方式打开,如果文件不存在,则创建该文件
a,a+b,ab+:读和追加方式打开,如果文件不存在,则创建该文件
b用于区分二进制文件和文本文件,这一点在DOS,window中区分,LINUX不区分二进制文件盒文本文件。
读
size_t fread(void*ptr,size_t size,size_t n,file *stream);
写:
size_t fwrite(void*ptr,size_t size,size_t n,file *stream);
读字符
int fgetc(FILE*stream);
举例:
#include<stdio.h>
main()
{
FILE*fp;
char ch;
if((fp=fopen("c1.txt","rt"))==NULL)
{
printf("\nCannot open file strike any key exit");
getch();
exit(1);
}
ch=fgetc(fp);
while(ch!=EOP)
{
putchar(ch);
ch=fgetc(fp);
}
fclose(fp);
}
写字符
int fputs(inyt c,FILE*stream)
举例:
#include<stdio.h>
main()
{
FILE*fp;
char ch;
if((fp=fopen("string","w+"))==NULL)
{
printf("\nCannot open file ,strike any key exit");
getch();
exit(1);
}
printf("input a string:\n");
ch=fgetchar();
while(ch!='\n')
{
fputc(ch,fp);
ch=getchar();
}
printf("\n");
fclose(fp);
}
格式化读:
fscanf(FILE*stream,char*format[,argument...])
从一个流中格式化输入
#include<stdlib.h>
#include<stdio.h>
int mian(void)
{
int i;
printf("input an interger:");
if(fscanf(stdin,"%d",&i))
printf("The integer read was:%i\n",i);
}
格式化写:
fprintf(FILE*stream,char*format[,argument...])
格式化输出从到一个流中
#include<stdlib.h>
#include<process.h>
FILE*stream;
int mian(void)
{
int i=10;
double fp=1.5;
char s[]="this is a string";
char c='\n';
stream=fopen("fprintf.out",""w);
fprintf(stream,"%s%c",s,c);
fprintf(stream,"%d\n",i);
fprintf(stream,"%f\n",fp);
fclose(stream);
}
定位:
int fseek(FILE*stream,long offset,int whence);
whence:
SEEK_SET
SEEK_CUR
SEEK_END
路径获得:
char*getcwd(char*buffer,size_t size);
把路径copy到buffer中,buffer如果太小,返回-1;
创建目录:
int mkdir(char*dir,int mode);
0返回成功,-1表示出错。
linux应用程序开发-文件编程-库函数的更多相关文章
- linux应用程序开发-文件编程-系统调用方式
在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻, 所以把学习过程记录下来,也作为 ...
- 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程
前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...
- 嵌入式Linux应用程序开发详解------(创建守护进程)
嵌入式Linux应用程序开发详解 华清远见 本文只是阅读文摘. 创建一个守护进程的步骤: 1.创建一个子进程,然后退出父进程: 2.在子进程中使用创建新会话---setsid(): 3.改变当前工作目 ...
- Linux入门-程序开发
Linux程序开发 linux程序总体上来说是分两部分的: 1. 底层驱动程序开发: 2.应用层应用程序开发: 驱动程序 一般情况下驱动是跟内核与硬件有关系的,编程语言是C语言,需要懂一些硬件的知识, ...
- 《嵌入式linux应用程序开发标准教程》笔记——7.进程控制开发
进程是系统资源的最小单元,很重要. 7.1 linux进程的基本概念 定义:一个程序的一次执行过程,同时也是资源分配的最小单元.程序是静态的,而进程是动态的. 进程控制块:linux系统用进程控制块描 ...
- 《嵌入式linux应用程序开发标准教程》笔记——9.多线程编程
线程是轻量级进程,创建线程的开销要比进程小得多,在大型程序中应用广泛. 9.1 线程概述 进程包含自己的代码.数据.堆栈.资源等等,创建和切换的开销比较大: 线程是轻量级的进程,调度的最小单元,同一个 ...
- Vs2012于Linux应用程序开发(2):图案
1.1 代码提示功能 在vs中开发中,Visual Assist是一个很优秀的插件,我们仍然能够使用它进行代码的分析,但它仅仅能支持vcxprojproject,因而我们选择对vcxproj的 ...
- 《嵌入式linux应用程序开发标准教程》笔记——8.进程间通信
, 8.1 概述 linux里使用较多的进程间通信方式: 管道,pipe和fifo,管道pipe没有实体文件,只能用于具有亲缘关系的进程间通信:有名管道 named pipe,也叫fifo,还允许无亲 ...
- Vs2012于Linux应用程序开发(4):公共财产的定义
在嵌入式开发流程.有些参数基本上不改变,比如编译主机IP,username,password等参数.我们用VS提供的属性管理器来保存这些參数. 打开属性管理器: watermark/2/text/aH ...
随机推荐
- hibernate学习(2)——api详解对象
1 Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...
- Why MySQL could be slow with large tables ?
https://www.percona.com/blog/2006/06/09/why-mysql-could-be-slow-with-large-tables/
- 【java基础学习】泛型
泛型 1. 泛型类(声明的泛型类型静态方法不能使用) class Tools<T>{ private T t; public void set(T t){ this.t = t; } pu ...
- 基于swoole的网页一对一实时聊天
需求分析 网站上实现一对一即时沟通,能查看聊天记录以及离线留言,新消息提醒. 核心技术 html5的websocket,php的swoole扩展http://wiki.swoole.com/ 数据表 ...
- SQLServer性能调优3之索引(Index)的维护
前言 前一篇的文章介绍了通过建立索引来提高数据库的查询性能,这其实只是个开始.后续如果缺少适当的维护,你先前建立的索引甚至会成为拖累,成为数据库性能的下降的帮凶. 查找碎片 消除碎片可能是索引维护最常 ...
- [SLAM]2D激光扫描匹配方法
1.Beam Model 2.Likehood field for k=1:size(zt,1) if zt(k,2)>0 d = -grid_dim/2; else d = grid_dim/ ...
- Django 一对多,多对多关系解析
[转]Django 一对多,多对多关系解析 Django 的 ORM 有多种关系:一对一,多对一,多对多. 各自定义的方式为 : 一对一: OneToOneField ...
- mysqldump database table
一)在同一个数据库服务器上面进行数据表间的数据导入导出: 1. 如果表tb1和tb2的结构是完全一样的,则使用以下的命令就可以将表tb1中的数据导入到表tb2中: insert into db2.tb ...
- 夺命雷公狗-----React---7--组建的状态props和state
props:组建初始要渲染的数据,他是不可以改变的 state:组建状态发生改变,调用render重新渲染数据 我们来写一个例子: <!DOCTYPE html> <html lan ...
- ThinkPHP讲解(十一)——验证码和文件上传
一.验证码 1.页面前端显示 (验证码是图片标签,来源是控制器里的yzm()操作方法) <h1>登录</h1> <form action="__ACTION__ ...