Linux下C语言的文件操作
代码:
1 #include <stdio.h> 2 #include <string.h> 3 #include <fcntl.h> 4 /*************基本的函数API******************** 5 int open(const char *pathname, int oflag, int perms) 6 oflag: 7 O_RDONLY 只读 8 O_WRONLY 只写 9 O_RDWR 读写 10 O_APPEND 追加 11 O_CREAT 创建 12 O_EXCL 测试 13 O_TRUNC 删除 14 perms: 15 被打开的文件的存取权限,采用8进制 16 int close(int fd) 17 ssize_t read(int fd, void *buf, size_t count) 18 fd: 19 文件描述符 20 buf: 21 指定存储器读取数据的缓冲区 22 count: 23 指定读取数据的字节数 24 ssize_t write(int fd, void *buf, size_t count) 25 fd: 26 文件描述符 27 buf: 28 指定存储器读取数据的缓冲区 29 count: 30 指定读取数据的字节数 31 off_t lseek(int fd, off_t offset, int whence) 32 fd: 33 文件描述符 34 offset: 35 偏移量,每一读写操作需要移动的字节数,可向前、可向后 36 count: 37 当前位置的基点: 38 SEEK_SET(当前位置是文件的开头) 39 SEEK_CUR(当前位置为文件指针的位置,新位置为当前位置加上偏移量) 40 SEEK_END(当前位置问文件的尾部,新位置为文件大小加上偏移量的大小) 41 **********************************************/ 42 int main(void) 43 { 44 int fd,len; 45 char *buf = "Hello World!\n",Out[30]; 46 fd = open("a.txt", O_CREAT | O_TRUNC | O_RDWR, 0600); 47 printf("open file:a.txt fd = %d\n", fd); 48 len = strlen(buf); 49 int size = write(fd, buf, len); 50 close(fd); 51 //Begin to read the file 52 fd = open("a.txt", O_RDWR, 0600); 53 lseek(fd, 0, SEEK_SET); //Before to read the file,you should call the function to make the fd point to begin of files 54 size = read(fd, Out, 12); 55 printf("size = %d\nread from file:\n %s\n",size,Out); 56 close(fd); 57 return 0; 58 }
实例1 读取一张通过MATLAB读取JPG图片转换成TXT文本的文件内容:
首先图像是这样的lena.jpg:
通过MATALB读取进去之后,转换成灰度图像,如下所示处理结果如上图所示:
I = imread('F:\Leanring\C\Learning\lena.jpg'); Gray = rgb2gray(I); imshow(Gray)
接下来我们在变量一栏中,复制粘贴所有的数据到TXT文本当中,如下所示:
MATLAB数据 文本数据
这样,我们通过分析文本中的数据分布格式,首先,文本挡住的所有数据都是只包含了图像的数据的,不包括了JPG图片格式相关的数据内容,其次,在我们复制粘贴的过程中的每两个数据之间的分隔方式都是通过TAB键来分隔的,同样的在每一行数据的结尾部分,都是通过回车键\t或者换行符\n来结尾的,所以根据这样的数据格式,我们设计如下的读取对应文本内容的C语言函数API,这里的TAB在ASCII的编码数据是:9 同样的,\t和\n的ASCII的编码是10和13,这样的话,通过if就能隔离开数据。
void ImageReadFromTXT(int *data,int width,int height,char *dir) {FILE *Pic;int D=0,count=0,Bit[3]={0},i,j;Pic = fopen(dir,"rb");for(i=0;i<height;i++){D = 0;for(j=0;j<width;j++){count = 0;Bit[0] = 0;Bit[1] = 0;Bit[2] = 0;D = 0;while(1){fread(&D,sizeof(char),1,Pic);if(D == 9 || D == 10 || D == 13) break;// D == 9Bit[count] = D-48;count++;}*(data+i*width+j) = Bit[0]*100+Bit[1]*10+Bit[2];}}fclose(Pic); }
主函数内容如下:
1 /*********************************************************** 2 从TXT文件中读取一个图片文件的数据,图片文件的数据首先通过 3 MATLAB读取到变量中,然后复制粘贴到TXT文件当中处理。 4 ***********************************************************/ 5 int width=300; 6 int height =300; 7 int data[width][height]; 8 ImageReadFromTXT(data,width,height,"lena.txt"); 9 printf("The first data is:%d\n",data[0][0]); 10 printf("The first data is:%d\n",data[0][1]); 11 printf("The first data is:%d\n",data[0][2]); 12 printf("The first data is:%d\n",data[0][3]);
View Code
实验结果:
转载于:https://www.cnblogs.com/uestc-mm/p/7630152.html
Linux下C语言的文件操作相关推荐
- linux下c语言读写文件操作,linux下的系统级c语言文件读写操作
最近初次接触Linux这么高端的东西,有种进城的感觉.进了linux,发现城里人说话做事的方式都很不一样. 个人感觉,初次接触linux主要的痛点在于命令行交互的方式,这就要求我接受城里人的思维,wh ...
- linux下c语言写文件,Linux下C语言之文件操作
C语言库函数的文件操作实际上是独立于具体的操作系统平台的,不管是在DOS.Windows.Linux还是在VxWorks中都是这些函数: 创建和打开的函数: FILE *fopen(const cha ...
- Linux下C语言之文件操作
C语言库函数的文件操作实际上是独立于具体的操作系统平台的,不管是在DOS.Windows.Linux还是在VxWorks中都是这些函数: 创建和打开的函数: FILE *fopen(const ...
- linux下c语言读写文件操作,Linux C语言 文件操作
打开函数 fopen 的原型如下. FILE * fopen(char *filename, char *mode); 返回值:打开成功,返回该文件对应的 FILE 类型的指针:打开失败,返回 NUL ...
- Linux下C编程-----IO/文件操作 模拟linux ls程序显示文件系统树形结构(2)
Linux下的IO/文件操作练习,知识虽然简单 但是往往基础容易被忽略,偶尔的练习是有必要的. 练习printf /****************************************** ...
- Linux下编辑并保存文件操作步骤
墙裂建议看下,戳:vi 和 VIM的区别 详细介绍了编辑文件保存 步骤一: 打开命令控制台找到要编辑的文件,可执行命令ls看看下面有几个文件 如要编辑的文件名称为:test 步骤二: 打开文件 --命 ...
- linux中system.img文件,Linux下对system.img文件操作
接下来要注意:要分清通常的Linux和ylmfos的区别 先输入指令 sudo su(通常的Linux和ylmfos都要输) 然后出现Password:,输入你的用户密码,直接输入,但是看不见,但其实 ...
- linux文件读写 c语言,Linux 下 C语言大文件读写(大于4G)
以下的做法整理自论坛上的帖子. 如何create大文件 要大就非常大,1T吧. 有两种方法: 一.dd dd if=/dev/zero of=1T.img bs=1G seek=1024 count= ...
- linux下c语言tcp文件传输,C语言实现TCP通信
导读 如果想要自己写一个服务器和客户端,我们需要掌握一定的网络编程技术,个人认为,网络编程中最关键的就是这个东西--socket(套接字).socket(套接字):简单来讲,socket就是用于描述I ...
最新文章
- mysql binlog的查询
- Winform中通过代码设置DevExpress的TextEdit的类型为Numbernic
- ABAP Netweaver, Hybris Commerce和SAP 云平台的登录认证
- 数据结构----二叉树叶子结点到根节点的高度计算
- matlab中有哪些输出函数,MATLAB中查找并输出的函数有什么
- linux usb无法识别,求助:USB无法识别
- File类与FileInfo类
- #Pragma 用法总结
- 安装phpDocumentor
- 中美线径对照表_常用线规号码与线径对照表
- CAN报文解析—案例
- python terminal 库_zhihu-terminal 终端版知乎客户端
- 认识计算机系统学反思,《认识计算机》教学反思
- 安卓AccountManager数据库存储位置
- 计算机网络2:get和post的区别
- 零基础重庆自考本科行政管理难吗?
- jdk 配置以及配置出错could not open `C:\Program Files\Java\jre7\lib\amd64\jvm.cfg' 解决方案
- android+学籍管理,论文基于android的学籍管理系统的设计与实现.doc
- 【gflags 】google gflags 使用方法
- 视觉树和逻辑树的概念