文件IO 例子
例子1: 测试最多打开多少个文件
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> int main(int argc, const char *argv[])
{
int fd;
int cnt = ;
while() //循环打开
{
if((fd=open(argv[],O_RDWR))<) //打开文件返回文件描述符, 0,1,2 是系统开启进程自动分配的 标准输入,输出,出错
break;
cnt++; //正确打开文件,计数加1
printf("fd=%d\n",fd);
}
printf("cnt = %d\n",cnt); close(fd);//关闭文件 return ;
}
测试: 运行程序 ./a.out tt.txt > file.txt ------ tt.txt 是程序中argv[1] 打开的文件, > 表示重定向,把内容输入到文件file.txt中,在终端显示会很多内容

例子2; 关于文件描述符

例子3 : read的使用
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h> int main(int argc, const char *argv[])
{
char buf[] = {};
#if 0
//从终端读取数据
read(,buf,);
printf("buf = %s\n",buf);
#endif //从文件读取数据
int fd;
fd = open(argv[],O_RDONLY);
if(fd < )
{
perror("open fail : ");
return -;
}
ssize_t bytes;
int i = ;
bytes = read(fd,buf,); //读取fd文件内容放到buf中,每次读取10个,返回读取到的个数
printf("bytes = %d->",bytes);
printf("buf = [%s]\n",buf);
for(i=;i<;i++) //没次读完把buf清空防止影响下次使用
buf[i] = ; bytes = read(fd,buf,);
printf("bytes = %d->",bytes);
printf("buf = [%s]\n",buf); for(i=;i<;i++)
buf[i] = ; bytes = read(fd,buf,);
printf("bytes = %d->",bytes);
printf("buf = [%s]\n",buf);
for(i=;i<;i++)
buf[i] = ; close(fd);
return ;
}
测试

例子4 :write 写数据
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
char buf[] = "hello world!\n";
#if 0
//写数据到终端
write(,buf,);
#endif
#if 1
//写数据,到文件
int fd;
fd = open(argv[],O_WRONLY|O_CREAT|O_TRUNC);//只读方式打开,没有创建,打开清空文件
if(fd < )
{
perror("open fail : ");
return -;
}
write(fd,buf,);//把buf的内容写到fd指向的文件中,写入20个字符
close(fd);
#endif
return ;
}
测试

例子5 :read和write实现文件内容复制
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h> int main(int argc, const char *argv[])
{
char buf[] = "hello world!"; //写数据,到文件
int fd_r,fd_w;
fd_r = open(argv[],O_RDONLY); //只读方式打开
if(fd_r < )
{
perror("open fail : ");
return -;
} fd_w = open(argv[],O_WRONLY); //只写方式打开
if(fd_w < )
{
perror("open fail : ");
return -;
} int read_len = ;
while()
{
read_len = read(fd_r,buf,);
if(read_len == )//当读取到0个字符时,即为读到文件末尾,出错发挥-1
{
break;
}
write(fd_w,buf,read_len);//把读取到的长度是写入另外的文件长度
} close(fd_r);
close(fd_w);
return ;
}
测试

例子6 : lseek文件偏移量
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h> int main(int argc, const char *argv[])
{
char buf[] = "hello world!"; //写数据,到文件
int fd_r;
fd_r = open(argv[],O_RDWR | O_TRUNC,); //读写方式打开,清空打开
if(fd_r < )
{
perror("open fail : ");
return -;
}
write(fd_r,buf,sizeof(buf));//写数据到文件 off_t off;
off = lseek(fd_r,,SEEK_CUR);//获取当前偏移量
printf("当前 off = %ld\n",off); off = lseek(fd_r,,SEEK_SET); //在文件起始位置偏移 3
printf("SEEK_SET off = %ld\n",off); write(fd_r,"",);//偏移后向文件中写入数据 lseek(fd_r,-,SEEK_END); // 在文件末尾向前偏移 5 在写入数据
write(fd_r,"ABCD",); close(fd_r);
return ;
}
测试: fd_r = open(argv[1],O_RDWR | O_APPEND,0666); //读写方式打开,追加打开,设置了偏移量也只能在文件末尾添加

文件IO 例子的更多相关文章
- 转 漫谈linux文件IO
在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...
- (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- Java文件IO操作应该抛弃File拥抱Paths和Files
Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream;import java.nio.file.FileSystem; ...
- Java 文件IO续
文件IO续 File类 用来将文件和文件夹封装成对象 方便对文件和文件夹的属性信息进行操作 File对象可以作为参数传递给流的构造函数 Demo1 File的构造方法 public cla ...
- Java 文件IO
文件IO Java IO IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中 按操作数据分为 字节流和字符流 字符流的 ...
- 文件IO
在unix世界中视一切为文件,无论最基本的文本文件还是网络设备或是u盘,在内核看来它们的本质都是一样的.大多数文件IO操作只需要用到5个函数:open . read . write . lseek 以 ...
- 漫谈linux文件IO
在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...
- Golang文件IO 一
Golang文件IO 一 文件IO编程最基本.最常用的就属读写文件操作了.ioutil包实现了一些IO实用功能,其中就包括非常简捷.好用的文件读取功能. ioutil包有7个函数1个变量: var D ...
- UNIX高级环境编程(14)文件IO - O_DIRECT和O_SYNC详解 < 海棠花溪 >
春天来了,除了工作学习,大家也要注意锻炼身体,多出去运动运动. 上周末在元大都遗址公园海棠花溪拍的海棠花. 进入正题. O_DIRECT和O_SYNC是系统调用open的flag参数.通过指定o ...
随机推荐
- 关于JS递归函数求斐波那契数列两种实现方法
百度已经解释的很详细了,但是不写注释还真是看不懂,递归,就直接套公式了,for循坏,我们就用EXCEL看一下规律 可以看到B是A+B的和,A往后就是B的值,所以我们需要第三个变量来保存他们的和,取出B ...
- Python2和Python3的安装以及pycharm安装,path环境变量的配置
一:安装python2.7过程步骤 1.官网下载pythonan安装包: ·输入python搜索 ·找到python官网,点击进入 ·鼠标放在Downloads上,在新弹出的选项中选择Windows, ...
- 20-python基础-python3-reversed()函数
描述 reversed 函数返回一个反转的迭代器. 语法 reversed(seq) 参数 seq -- 要转换的序列,可以是 tuple, string, list 或 range. # 字符串 s ...
- nginx + gunicorn + django 2.0 踩坑
部署踩坑 部署踩坑提前准备服务器端准备安装nginx使用uwsgi部署使用gunicorn配置配置nginx配置django中的路径url 提前准备 在本地能够 python(3) manage.py ...
- HDU 6534 莫队+ 树状数组
题意及思路:https://blog.csdn.net/tianyizhicheng/article/details/90369491 代码: #include <bits/stdc++.h&g ...
- nodejs 静态资源文件与登陆交互
server2.js var express=require('express'); var expressStatic=require('express-static'); var server=e ...
- React Native 安卓模拟器调出Dev Setting
Android Studio 模拟器调出Dev Setting 实现热更新 cmd进入项目目录 F:\study\AwesomeProject> 执行 adb shell input keyev ...
- ansible如何用root用户运行普通用户授权
ansible默认以root用户进行授权,但是需要用普通用户执行一些命令操作: 如: 1. ansible 10.0.0.1 -m raw -a "date" -u www 但是会 ...
- Delphi GlobalAlloc、GlobalLock、GlobalUnlock、GlobalFree 函数
GlobalAlloc 函数 分配一块内存,该函数会返回分配的内存句柄. GlobalLock 函数 锁定内存块,该函数接受一个内存句柄作为参数,然后返回一个指向被锁定的内存块的指针. 您可以用该指针 ...
- PHP ftp_delete() 函数
定义和用法 ftp_delete() 函数删除 FTP 服务器上的一个文件. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE 和一个警告. 语法 ftp_delete(ftp_conne ...