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发表评论 ...
随机推荐
- Python中join()函数方法
函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字 ...
- Confluence 6 推荐的更新通知设置和禁用
你可以设置默认的发送选项(发送 / 不发送)和默认的发送时间(每天或每周). 如何配置推荐更新电子邮件通知: 在屏幕的右上角单击 控制台按钮 ,然后选择 General Configuration 链 ...
- Confluence 6 PostgreSQL 设置准备
请查看 Supported Platforms 页面来获得 Confluence 系统支持的 PostgreSQL 数据库版本.你需要在安装 Confluence 之前升级你的 PostgreSQL ...
- Java测试代码(很不完整,建议大家别看,过几天会再发一次难的版本)
package ATM; import java.io.BufferedReader; import java.io.InputStreamReader; class Account{ priv ...
- Linux磁盘与文件系统管理笔记
### Linux磁盘与文件系统管理 linux 最传统的文件系统格式是EXT2,centos7 默认文件系统是xfs(日志式文件系统) 磁盘的组成: 盘片 机械手臂 主轴马达 (机械硬盘) 磁盘格式 ...
- CF1019C
好玄学的东西... 核心思想:for循环! 首先,我们从前向后扫所有的点,如果这个点没被标记成不可用就把这个点标记成已使用,然后把所有与这个点直接相连的点标记成不可用 接下来,我们从后向前扫所有的点, ...
- linux下的抓包
1. 查看网卡名字 cat /proc/net/dev 2.抓取外网进来的包 tcpdump -i eth0 port -s -w .pcap 3.抓取自己服务器上的两个程序之间访问的数据 换成 lo ...
- spring cloud Hystix熔断机制--基本熔断配置和Fegin client熔断配置
所谓的熔断机制和日常生活中见到电路保险丝是非常相似的,当出现了问题之后,保险丝会自动烧断,以保护我们的电器, 那么如果换到了程序之中呢? 当现在服务的提供方出现了问题之后整个的程序将出现错误的信息显示 ...
- docker 给none镜像打镜像
1.遇到none的镜像打tag方式: docker tag + docker ID + 命名:版本名 案例:docker tag 41b7307026c0 gitlab:test 这就 ...
- 混合编译.c/.cpp与.cu文件
混合编译.c/.cpp与.cu文件 项目中用到cuda编程,写了kernel函数,需要nvcc编译器来编译..c/.cpp的文件,假定用gcc编译. 如何混合编译它们,整体思路是:.cu文件编译出的东 ...