代码:

 #include <stdio.h>
#include <string.h>
#include <fcntl.h>
/*************基本的函数API********************
int open(const char *pathname, int oflag, int perms)
oflag:
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
O_APPEND 追加
O_CREAT 创建
O_EXCL 测试
O_TRUNC 删除
perms:
被打开的文件的存取权限,采用8进制
int close(int fd)
ssize_t read(int fd, void *buf, size_t count)
fd:
文件描述符
buf:
指定存储器读取数据的缓冲区
count:
指定读取数据的字节数
ssize_t write(int fd, void *buf, size_t count)
fd:
文件描述符
buf:
指定存储器读取数据的缓冲区
count:
指定读取数据的字节数
off_t lseek(int fd, off_t offset, int whence)
fd:
文件描述符
offset:
偏移量,每一读写操作需要移动的字节数,可向前、可向后
count:
当前位置的基点:
SEEK_SET(当前位置是文件的开头)
SEEK_CUR(当前位置为文件指针的位置,新位置为当前位置加上偏移量)
SEEK_END(当前位置问文件的尾部,新位置为文件大小加上偏移量的大小)
**********************************************/
int main(void)
{
int fd,len;
char *buf = "Hello World!\n",Out[];
fd = open("a.txt", O_CREAT | O_TRUNC | O_RDWR, );
printf("open file:a.txt fd = %d\n", fd);
len = strlen(buf);
int size = write(fd, buf, len);
close(fd);
//Begin to read the file
fd = open("a.txt", O_RDWR, );
lseek(fd, , SEEK_SET); //Before to read the file,you should call the function to make the fd point to begin of files
size = read(fd, Out, );
printf("size = %d\nread from file:\n %s\n",size,Out);
close(fd);
return ;
}

实例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=,count=,Bit[]={},i,j;
Pic = fopen(dir,"rb");
for(i=;i<height;i++)
{
D = ;
for(j=;j<width;j++)
{
count = ;
Bit[] = ;
Bit[] = ;
Bit[] = ;
D = ;
while()
{
fread(&D,sizeof(char),,Pic);
if(D == || D == || D == ) break;// D == 9
Bit[count] = D-;
count++;
}
*(data+i*width+j) = Bit[]*+Bit[]*+Bit[];
}
}
fclose(Pic);
}

主函数内容如下:

 /***********************************************************
从TXT文件中读取一个图片文件的数据,图片文件的数据首先通过
MATLAB读取到变量中,然后复制粘贴到TXT文件当中处理。
***********************************************************/
int width=;
int height =;
int data[width][height];
ImageReadFromTXT(data,width,height,"lena.txt");
printf("The first data is:%d\n",data[][]);
printf("The first data is:%d\n",data[][]);
printf("The first data is:%d\n",data[][]);
printf("The first data is:%d\n",data[][]);

实验结果:

Linux下C语言的文件操作的更多相关文章

  1. Linux下C语言多文件的编译以及makefile的应用

    1.关于编译和链接 一般来说,无论是C.C++,首先要把源文件编译成中间代码文件,在Windows下也就是.obj文件,UNIX下是.o文件,即Object File,这个动作叫做编译(compile ...

  2. linux下c/c++的文件操作

    opendir,readdir,closedir, stat()查询文件状态 open(), O_TRUNC这个Flag会把打开的文件清零... 文件锁:fcntl, F_GETLK , F_SETL ...

  3. Linux下C语言复制文件

    从usr/bin/info复制到myinfo.c #include<unistd.h> #include<fcntl.h> #include<sys/types.h> ...

  4. LINUX下C语言编程调用函数、链接头文件以及库文件

    LINUX下C语言编程经常需要链接其他函数,而其他函数一般都放在另外.c文件中,或者打包放在一个库文件里面,我需要在main函数中调用这些函数,主要有如下几种方法: 1.当需要调用函数的个数比较少时, ...

  5. linux 下C语言学习路线

    UNIX/Linux下C语言的学习路线.一.工具篇“公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工 ...

  6. Linux下C语言编程实现spwd函数

    Linux下C语言编程实现spwd函数 介绍 spwd函数 功能:显示当前目录路径 实现:通过编译执行该代码,可在终端中输出当前路径 代码实现 代码链接 代码托管链接:spwd.c 所需结构体.函数. ...

  7. linux下MySQL安装登录及操作

    linux下MySQL安装登录及操作 二.安装Mysql 1.下载MySQL的安装文件 安装MySQL需要下面两个文件: MySQL-server-4.0.16-0.i386.rpm MySQL-cl ...

  8. Unix和Linux下C语言学习指南

    转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...

  9. 笔记整理——Linux下C语言正则表达式

    Linux下C语言正则表达式使用详解 - Google Chrome (2013/5/2 16:40:37) Linux下C语言正则表达式使用详解 2012年6月6日Neal627 views发表评论 ...

随机推荐

  1. MySql两种存储引擎的区别

    MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然性能极佳,但却有一个缺点 ...

  2. django 中的闪现

    导包 from django.contrib import messages #输出格式 messages.success(request,'不能为空') #前端页面的写法 {%if messages ...

  3. Mybaits动态Sql

    什么是动态SQL? MyBatis的强大之处便是它的动态SQL,如果你使用JDBC那么在根据不同条件查询时,拼接SQL语句是多么的痛苦. 比如查询一个学生信息,可以根据学生的姓名,性别,班级,年龄,学 ...

  4. 小学生都看得懂的C语言入门(4): 数组与函数

    // 之前判断素数, 只需要到sqrt(x)即可,//更加简单的, 判断能够比已知的小于x的素数整除, 运行更快 #include <stdio.h> // 之前判断素数, 只需要到sqr ...

  5. 使用gulp进行代码压缩

    gulp是一个很不错的前端自动化工具,可以帮我们完成一些重复性操作,比如html.css和js代码的压缩.合并.混淆等,虽然这些操作可以通过一些在线工具帮我们实现,但不断重复地复制粘贴肯定比不上一句命 ...

  6. MySQL is running but PID file could not be found(解决方法)

    启动MySQL时报错: [root@xzw /]# service mysqld status MySQL is running but PID file could not be found    ...

  7. postMan测试https接口

    一.如何安装postman? Postman下载地址https://www.getpostman.com/ 我下载的版本是Postman-win64-5.0.0-Setup.exe 这是免安装的,可以 ...

  8. R2CNN项目部分代码学习

    首先放出大佬的项目地址:https://github.com/yangxue0827/R2CNN_FPN_Tensorflow 那么从输入的数据开始吧,输入的数据要求为tfrecord格式的数据集,好 ...

  9. 处理Task引发的异常

    处理方法:线程启动后,使用try-catch,通过wait或者waitall来捕获异常. 单个Task的情况: System.Threading.Tasks.Task task1 = new Syst ...

  10. Left-pad

    L1-032 Left-pad (20 分)   根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的 ...