Linux下C语言的文件操作
代码:
#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语言的文件操作的更多相关文章
- Linux下C语言多文件的编译以及makefile的应用
1.关于编译和链接 一般来说,无论是C.C++,首先要把源文件编译成中间代码文件,在Windows下也就是.obj文件,UNIX下是.o文件,即Object File,这个动作叫做编译(compile ...
- linux下c/c++的文件操作
opendir,readdir,closedir, stat()查询文件状态 open(), O_TRUNC这个Flag会把打开的文件清零... 文件锁:fcntl, F_GETLK , F_SETL ...
- Linux下C语言复制文件
从usr/bin/info复制到myinfo.c #include<unistd.h> #include<fcntl.h> #include<sys/types.h> ...
- LINUX下C语言编程调用函数、链接头文件以及库文件
LINUX下C语言编程经常需要链接其他函数,而其他函数一般都放在另外.c文件中,或者打包放在一个库文件里面,我需要在main函数中调用这些函数,主要有如下几种方法: 1.当需要调用函数的个数比较少时, ...
- linux 下C语言学习路线
UNIX/Linux下C语言的学习路线.一.工具篇“公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工 ...
- Linux下C语言编程实现spwd函数
Linux下C语言编程实现spwd函数 介绍 spwd函数 功能:显示当前目录路径 实现:通过编译执行该代码,可在终端中输出当前路径 代码实现 代码链接 代码托管链接:spwd.c 所需结构体.函数. ...
- linux下MySQL安装登录及操作
linux下MySQL安装登录及操作 二.安装Mysql 1.下载MySQL的安装文件 安装MySQL需要下面两个文件: MySQL-server-4.0.16-0.i386.rpm MySQL-cl ...
- Unix和Linux下C语言学习指南
转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...
- 笔记整理——Linux下C语言正则表达式
Linux下C语言正则表达式使用详解 - Google Chrome (2013/5/2 16:40:37) Linux下C语言正则表达式使用详解 2012年6月6日Neal627 views发表评论 ...
随机推荐
- pip的常用命令
前言 pip作为Python的御用包管理工具有着强大的功能,但是许多命令需要我们使用的时候借助搜索引擎查找(尤其是我), 于是我想将我使用到的命令整合下来,以后不用麻烦去找了,也希望能给你带来帮助.文 ...
- EasyUI Layout 布局
1.在整个页面上创建布局(Layout) <!DOCTYPE html> <html> <head> <title>吹泡泡的魚-主页</title ...
- CentOS 7 部署 Spring Boot
Spring Boot 内嵌了tomcat .我们可以将Boot打成 jar 包丢到服务器上运行才行. Spring Boot已经帮我们打理好了这一切,如果项目是继承自 spring-boot-sta ...
- spfa+01 规划
尼玛的哪里错了.. /* 在有向图上找一个环,使结点权值和/边权和的比例值最大 01规划,设比例为l,那么将每条边的权值改成a[u]-l*w,如果有正权环,则比例l可行 如何判图中存在正权环?将 权值 ...
- CF939F
好神奇的dp... 首先有一个很简单的思想:设dp[i][j]表示目前到了第i分钟,朝上的面被烤了j分钟的情况下所需的最小交换次数 那么有转移:dp[i][j]=min(dp[i-1][j],dp[i ...
- bzoj 1951
这道题告诉了我们一个很重要的道理:看到题,先想明白再动手! 题意:求对999911659取模的值 首先,由于n的数据范围不是很大(至少不是很大),所以可以O()枚举所有约数分别求组合数 但是有个问题: ...
- pycharm提示This inspection detects any methods which may safely be made static.
示例代码: class Car(object): # 未定义任何类属性 def move(self): # 方法会出现下划线提示This inspection detects any methods ...
- APIView源码分析
什么是REST REST与技术无关,代表的是一种软件架构风格.REST全称是Representational State Tranfer, 表征性状态转移. REST从资源的角度类审视整个网络,它将分 ...
- HDU 1671 Phone List (qsort字符串排序与strncmp的使用 /字典树)
Phone List Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- WCF寄宿IIS
1.创建一个简单的wcf项目 创建完成后直接运行,结果 然后进行发布 在IIS上新建一个网站,直接进行发布即可 遇到的问题 请求与通配符 mime 映射相匹配.请求映射到静态文件处理程序. 需要注意的 ...