代码:

 #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. Oracle PGA作用&work_mode

    专有模式下ORACLE会给每个连接分配一个服务进程(Server Process),这个服务进程将为这个连接服务.为这个服务进程分配的内存叫做PGA.PGA不需要Latch也不需要Lock,永远不会发 ...

  2. git reset --hard xxxxxxx

    关于git reset --hard xxxxxxx命令之Git版本回退 今晚代码写着写着就头脑有点发懵,手指也不听使唤了竟然让我敲出了 git reset --hard 命令,然后的然后就是之前所有 ...

  3. SQL Server2008从入门到精通pdf

    下载地址:网盘下载 内容介绍 编辑 <SQL Server 从入门到精通>从初学者的角度出发,通过通俗易懂的语言.丰富多彩的实例,详细地介绍了SQLServer2008开发应该掌握的各方面 ...

  4. Confluence 6 配置 Office 连接器选项

    具有系统管理员权限的用户可以配置 Office 连接器的属性和相关表现. 希望设置 Office 连接器的配置属性: 进入  > 基本配置(General Configuration) > ...

  5. Git- 连接远程仓库

    如何使用Git 连接远程仓库呢?远程仓库->一般指的是代码托管平台.那就先来瞅瞅三个较熟悉的版本(代码)托管服务平台. 版本(代码)托管服务平台: 码云(gitee.com):是开源中国社区团队 ...

  6. LeetCode(65):有效数字

    Hard! 题目描述: 验证给定的字符串是否为数字. 例如:"0" => true" 0.1 " => true"abc" =& ...

  7. druid配置oracle遇到: 未找到要求的 FROM 关键字 errorCode 923, state 42000

    2018年05月29日 16:41:17 阅读数:518 问题背景 项目要连接oracle数据,采用的是durid连接池,但是基本配置下来,运行时发现了这个错误. 方案 可能有的一个错误就是,拼凑sq ...

  8. Jmeter卡住解决方案

    windows环境下,修改jmeter.bat: set HEAP=-Xms256m -Xmx256m set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m 改为: ...

  9. springboot动态多数据源切换

    application-test.properties #datasource -- mysql multiple.datasource.master.url=jdbc:mysql://localho ...

  10. 如何上传项目到Git

    1.首先下载Git,然后安装 我用的版本是Git-2.15.0-64-bit 2.在你的Git上创建一个新的Progect 创建完成后,会出现这样的窗口,红框圈出来的就是你的Git项目路径 3.在本地 ...