文档库 最新最全的文档下载
当前位置:文档库 › 文件的读写与上锁

文件的读写与上锁

文件的读写与上锁
文件的读写与上锁

1.实验目的

通过编写文件读写及上锁的程序,进一步熟悉Linux中文件I/O相关的应用开发,并且熟练掌握open()、read()、write()、fcntl()等函数的使用。

2.实验内容

在Linux中FIFO(先进先出)是一种进程间的管道通信机制。本实验通过使用文件操作,仿真FIFO结构以及生产者-消费者运行模型。

3.实验步骤

(1)流程图

该实验流程图如图所示

(2)程序说明

本实验需要打开两个虚拟终端,分别运行生产者程序(producer)和消费者程序(customer)。此时两个进程同时对同一个文件进行读写操作。因为这个文件是临界资源,所以可以使用文件锁机制保证两个进程对文件的访问都是原子操作。

先启动生产者进程,它负责创建仿真FIFO结构文件(实际是一个普通文件)并投入生产,就是按照给定的时间间隔,向FIFO文件写入自动生成的字符(在程序中用宏定义选择使用数字还是使用英文字符),生产周期以及要生产的资源数通过参数传递给进程(默认生产周期1S,要生产的资源数为10个字符)。

后启动的消费者进程按照给定的数目进行消费,首先从文件中读取相应数目的字符并在屏幕显示,然后从文件中删除刚才消费过的数据。为了仿真FIFO结构,此时需要使用两次

复制来实现文件内容的偏移。每次消费的资源数通过参数传递给进程,默认值为10个字符。

(3)代码

/* lock_set.c */

int lock_set(int fd, int type)

{

struct flock old_lock, lock;

lock.l_whence = SEEK_SET;

lock.l_start = 0;

lock.l_len = 0;

lock.l_type = type;

lock.l_pid = -1;

/* 判断文件是否可以上锁 */

fcntl(fd, F_GETLK, &lock);

if (lock.l_type != F_UNLCK)

{

/* 判断文件不能上锁的原因 */

if (lock.l_type == F_RDLCK) /* 该文件已有读取锁 */

{

printf("Read lock already set by %d\n", lock.l_pid);

}

else if (lock.l_type == F_WRLCK) /* 该文件已有写入锁 */

{

printf("Write lock already set by %d\n", lock.l_pid);

}

}

/* l_type 可能已被F_GETLK修改过 */

lock.l_type = type;

/* 根据不同的type值进行阻塞式上锁或解锁 */

if ((fcntl(fd, F_SETLKW, &lock)) < 0)

{

printf("Lock failed:type = %d\n", lock.l_type);

return 1;

}

switch(lock.l_type)

{

case F_RDLCK:

{

printf("Read lock set by %d\n", getpid());

break;

case F_WRLCK:

{

printf("Write lock set by %d\n", getpid());

}

break;

case F_UNLCK:

{

printf("Release lock by %d\n", getpid());

return 1;

}

break;

default:

break;

}/* end of switch */

return 0;

}

本实验中的生产者程序的源代码如下所示,其中用到的lock_set()函数。/* producer.c */

#include

#include

#include

#include

#include

#include "mylock.h"

#define MAXLEN 10 /* 缓冲区大小最大值*/

#define ALPHABET 1 /* 表示使用英文字符 */

#define ALPHABET_START 'a' /* 头一个字符,可以用 'A'*/

#define COUNT_OF_ALPHABET 26 /* 字母字符的个数 */

#define DIGIT 2 /* 表示使用数字字符 */

#define DIGIT_START '0' /* 头一个字符 */

#define COUNT_OF_DIGIT 10 /* 数字字符的个数 */

#define SIGN_TYPE ALPHABET /* 本实例选用英文字符 */

const char *fifo_file = "./myfifo"; /* 仿真FIFO文件名 */

char buff[MAXLEN]; /* 缓冲区 */

/* 功能:生产一个字符并写入到仿真FIFO文件中 */

int product(void)

{

int fd;

unsigned int sign_type, sign_start, sign_count, size;

static unsigned int counter = 0;

/* 打开仿真FIFO文件 */

if ((fd = open(fifo_file, O_CREAT|O_RDWR|O_APPEND, 0644)) < 0) {

printf("Open fifo file error\n");

exit(1);

}

sign_type = SIGN_TYPE;

switch(sign_type)

{

case ALPHABET:/* 英文字符 */

{

sign_start = ALPHABET_START;

sign_count = COUNT_OF_ALPHABET;

}

break;

case DIGIT:/* 数字字符 */

{

sign_start = DIGIT_START;

sign_count = COUNT_OF_DIGIT;

}

break;

default:

{

return -1;

}

}/*end of switch*/

sprintf(buff, "%c", (sign_start + counter));

counter = (counter + 1) % sign_count;

lock_set(fd, F_WRLCK); /* 上写锁*/

if ((size = write(fd, buff, strlen(buff))) < 0) {

printf("Producer: write error\n");

return -1;

}

lock_set(fd, F_UNLCK); /* 解锁 */

close(fd);

return 0;

}

int main(int argc ,char *argv[])

{

int time_step = 1; /* 生产周期 */

int time_life = 10; /* 需要生产的资源数 */

if (argc > 1)

{

sscanf(argv[1], "%d", &time_step);

}

if (argc > 2)

{

sscanf(argv[2], "%d", &time_life);

}

while (time_life--)

{

if (product() < 0)

{

break;

}

sleep(time_step);

}

exit(EXIT_SUCCESS);

}

本实验中的消费者程序的源代码如下所示。

/* customer.c */

#include

#include

#include

#include

#define MAX_FILE_SIZE 100 * 1024 * 1024 /* 100M*/

const char *fifo_file = "./myfifo"; /* 仿真FIFO文件名 */

const char *tmp_file = "./tmp"; /* 临时文件名 */

/* 资源消费函数 */

int customing(const char *myfifo, int need)

{

int fd;

char buff;

int counter = 0;

if ((fd = open(myfifo, O_RDONLY)) < 0)

{

printf("Function customing error\n");

return -1;

}

printf("Enjoy:");

lseek(fd, SEEK_SET, 0);

while (counter < need)

{

while ((read(fd, &buff, 1) == 1) && (counter < need))

{

fputc(buff, stdout); /* 消费就是在屏幕上简单的显示 */

counter++;

}

}

fputs("\n", stdout);

close(fd);

return 0;

}

/* 功能:从sour_file文件的offset偏移处开始将count字节大小的数据拷贝到dest_file文件 */

int myfilecopy(const char *sour_file, const char *dest_file, int offset,

int count, int copy_mode)

{

int in_file, out_file;

int counter = 0;

char buff_unit;

if ((in_file = open(sour_file,O_RDONLY|O_NONBLOCK))<0) {

printf("Function myfilecopy error in source file\n"); return -1;

}

if((out_file=open(dest_file,

O_CREAT|O_RDWR|O_TRUNC|O_NONBLOCK, 0644)) < 0)

{

printf("Function myfilecopy errorin

destination file:");

return -1;

}

lseek(in_file, offset, SEEK_SET);

while((read(in_file,&buff_unit,1)==1)&&(counter

write(out_file, &buff_unit, 1);

counter++;

}

close(in_file);

close(out_file);

return 0;

}

/* 功能:实现FIFO消费者 */

int custom(int need)

{

int fd;

/* 对资源进行消费,need表示该消费的资源数目 */

customing(fifo_file, need);

if ((fd = open(fifo_file, O_RDWR)) < 0)

{

printf("Function myfilecopy error in source_file:");

return -1;

}

/* 为了模拟FIFO结构,对整个文件内容进行平行移动 */

lock_set(fd, F_WRLCK);

myfilecopy(fifo_file, tmp_file, need, MAX_FILE_SIZE, 0); myfilecopy(tmp_file, fifo_file, 0, MAX_FILE_SIZE, 0);

lock_set(fd, F_UNLCK);

unlink(tmp_file);

close(fd);

return 0;

}

int main(int argc ,char *argv[])

{

int customer_capacity = 10;

if (argc > 1) /* 第一个参数指定需要消费的资源数目,默认值为10 */ {

sscanf(argv[1], "%d", &customer_capacity);

}

if (customer_capacity > 0)

{

custom(customer_capacity);

}

exit(EXIT_SUCCESS);

}

4、实验结果

此实验的运行结果如下所示。实验结果会和这两个进程运行的具体过程相关。终端一:

# ./producer 1 15 /*生产周期为1S,需要生产的资源数为20个*/ Write lock set by 11867

Release lock by 11867

……

终端二:

# ./customer 5 /*需要消费的资源数为5个*/

Enjoy:abcde

Write lock set by 11879

Release lock by 11879

C语言读写文件操作

C语言读写文件操作 #include #include #include FILE *stream;//, *stream2; FILE *stream2; void main( void ) { int numclosed; char *list; list="这个程序由czw编写"; //试图打开文件data.txt,如果该文件不存在,则自动创建 if( (stream= fopen( "data.txt", "r" )) == NULL ) { printf( "试图打开'data.txt'\n" ); printf( "'data.txt'不存在\n" ); printf( "'data.txt'被创建\n" ); } else printf( "'data.txt'被打开\n" ); //以写入方式打开 if( (stream2 = fopen( "data.txt", "w+" )) == NULL ) printf( "'data.txt'不存在\n" ); else { printf( "'data.txt'成功被打开\n" ); fwrite(list,strlen(list),30,stream2); printf("写入数据成功\n"); } //如果文件data.txt存在,就会打开成功,则stream!=NULL,这时就关闭stream if (stream!=NULL) if( fclose( stream) ) printf( "文件流 stream 被关闭\n" ); //关闭所有打开的文件流,返回关闭的文件流个数 numclosed = _fcloseall( );

C#中的文件读写操作详解

C#中的文件读写操作详解(摘自互动维客:https://www.wendangku.net/doc/2c15154574.html,,更多内容 请访问互动维客!) C#中的文件操作详解 微软的.Net框架为我们提供了基于流的I/O操作方式,这样就大大简化了开发者的工作。因为我们可以对一系列的通用对象进行操作,而不必关心该I/O操作是和本机的文件有关还是和网络中的数据有关。.Net框架主要为我们提供了一个System.IO命名空间,该命名空间基本包含了所有和I/O操作相关的类。 本文将向大家介绍一些基本的文件操作方法,包括对文件系统中的目录和文件的操作,还有就是文件的读写操作等。通过运用System.IO.DirectoryInfo类和System.IO.FileInfo类我们可以轻易的完成与目录和文件相关的操作,而通过运用System.IO.StreamReader类和System.IO.StreamWriter类我们可以方便的完成与文件的读写相关的操作。 命名空间概览 下面的表格显示了System.IO命名空间中最重要的一些类,通过运用这些类我们就能完成基本的文件操作。 表1 类名功能和用途 BinaryReader、BinaryWriter 读写二进制数据 Directory、File、DirectoryInfo以及FileInfo 创建、删除并移动目录和文件,通过属性获取特定目录和文件的相关信息 FileStream 以随机方式访问文件 MemoryStream 访问存储在内存中的数据 StreamReader 、StreamWriter 读写文本数据信息 StringReader、StringWriter 运用字符串缓冲读写文本数据信息 运用DirectoryInfo类和FileInfo类 DirectoryInfo类和FileInfo类的基类都是FileSystemInfo类,这个类是一个抽象类,也就是说你不可以实例化该类,只能通过继承产生其子类并实例化其子类。然而你却可以运用由该类定义的各种属性,下面的表格显示了该类已经定义了的各种属性。 表2 属性功能和用途

matlab文件操作及读txt文件(fopen,fseek,fread,fclose

matlab文件操作及读txt文件(fopen,fseek,fread,fclose) matlab文件操作 文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件。MATLAB提供了一系列低层输入输出函数,专门用于文件操作。 1、文件的打开与关闭 1)打开文件 在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为: fid=fopen(文件名,‘打开方式’) 说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下:λ‘r’:只读方式打开文件(默认的方式),该文件必须已存在。 ‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。λ λ‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。 ‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。λ λ‘a’:在打开的文件末端添加数据。文件不存在则创建。 λ‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。 另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。

2)关闭文件 文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose 函数,调用格式为: sta=fclose(fid) 说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。如果要关闭所有已打开的文件用fclose(‘all’)。 2、二进制文件的读写操作 1)写二进制文件 fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为:COUNT=fwrite(fid,A,precision) 说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。 例6.8 将一个二进制矩阵存入磁盘文件中。 >> a=[1 2 3 4 5 6 7 8 9]; >> fid=fopen('d:\test.bin','wb') %以二进制数据写入方式打开文件 fid =3 %其值大于0,表示打开成功 >> fwrite(fid,a,'double') ans = 9 %表示写入了9个数据 >> fclose(fid)

Matlab的各种数据读取、文件读写等操作汇总

Matlab 的各种数据读取、文件读写等操作汇总 MATLAB 提供了多种方式从磁盘读入文件或将数据输入到工作空间,即读取数据,又叫导入数据;将工作空间的变量存储到磁盘文件中称为存写数据,又叫导出数据。至于选择哪种机制,则根据下面两个因素决定:?用户所执行的 操作是导入数据还是导出数据;?数据的格式为文本格式、 二进制格式还是如HDF 之类的标准格式。将数据导入MATLAB 中最容易的方法就是使用导入数据模板(Import Wizard) ,使用该模板时不需要知道数据的格式,只需指定包含这些数据的文件,然后导入模板会自动处理文件内容。本章重点内容如下:? 文件的打开和关闭? 文本文件的读取?存写ASCII数据?二进制数据的读取? 二进制数据的存写? 使用I/O文件函数进行数据读写?MAT 文件的读写 2.1 文件的打开和关闭2.1.1 文件的打开无论是要读写ASCII 码文件还是二进制文件,都必须先用fopen 函数将其打开,在默认情况下,fopen 以二进制格式打开文件,它的使用语法如下:fopen ('filename', 'mode') 其中filename 表示要读写的文件名称,mode 则表示要对文件进行的处理方式,如下:rt :以只读方式(Reading)打开文件wt:以只写方式(Writing)打开文件at:以追加方式(Appending)打开文件,新内容将从原文件后面续写r+t:以同时读写方式打开文件w+t :以同时读写创建文件,原文件内容被清除

a+t :以同时读和追加(Reading and Appdending) 方式,原文件内容被保留,新内容将从原文件的后面开始At :以读写方式打开或创建文件,适用于对磁带介质文件的操作Wt :以写入方式打 开或创建文件,原文件内容被清除,适用于磁带介质文件的操作fopen 函数有两个返回值,一个是返回一个文件标志(file Identifier) ,它会作为参数被传入其他对文件进行读写操作的命令,通常是一个非负的整数,可用此标识来对此文件进行各种处理。如果返回的文件标识是-1,则代表fopen无法打开文件,其原因可能是文件不存在,或是用户无法打开此文件权限。另一个返回值就是message ,用于返回无法打开文件的原因。为了安全起见,最好在每次使用fopen 函数时,都测试其返回值是否为有效值。下面以脚本m 文件为例来声明文件的打开。例 2-1 %exam1.m[f,message]=fopen('fileexam1', 'r')if f==-1disp (message); % 显示错误信息end 若文件fileexam1 不存在,则显示如下信息。Cannot open file.existence?permissions?memory?... 例2-2 %exam2.m[f,message]=fopen('fileexam2', 'r');if f==-1disp (message); % 显示错误信息else disp(f);end 若文件fileexam2 存在,则返回f值。 2.1.2 文件的关闭一旦完成文件的读写,最好关闭文件,以便对其进行其他操作。这时就可以使用fclose 函数来关闭文件,其适用语法如下:fclose(f) 。其中 f 为打开文件的标志,若fclose 函数返回值为0 ,则表示成功关闭 f 标志的文件;若返回值为-1,

Java流(文件读写操作)

Java流 一、流的分类 ?按数据流动方向 –输入流:只能从中读取字节数据,而不能向其写出数据 –输出流:只能向其写入字节数据,而不能从中读取数据?按照流所处理的数据类型 –字节流:用于处理字节数据。 –字符流:用于处理Unicode字符数据。 ?按照流所处理的源 –节点流:从/向一个特定的IO设备读/写数据的流。(低级流)–处理流:对已存在的流进行连接和封装的流。(高级流)二、缓冲流 ?缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法。 ?J2SDK提供了四种缓存流: –BufferedReader –BufferedWriter –BufferedInputStream s –BufferedOutputStream

?缓冲输入流支持其父类的mark()和reset()方法: –mark()用于“标记”当前位置,就像加入了一个书签,可以使用reset()方法返回这个标记重新读取数据。?BufferedReader提供了readLine()方法用于读取一行字符串(以\r 或\n分隔)。 ?BufferedWriter提供了newLine()用于写入一个行分隔符。 ?对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush()方法将会使内存中的数据立刻写出。 三、类层次 3.1、InputStream类层次

3.2、OutputStream类层次 3.3、Reader类层次

3.4、Writer类层次 四、常用的字符流与字节流的转化 说明: 1.字节流用于读写诸如图像数据之类的原始字节流。 2.字符流用于读写诸如文件数据之类的字符流。 3.低级流能和外设交流。 4.高级流能提高效率。 5.InputStreamReader 是字节流通向字符流的桥梁。 6.OutputStreamWriter 是字符流通向字节流的桥梁。

项目四 Word 2003文档的格式设置

项目四 Word 2003文档的格式设置 ●任务一文档的基本格式设置 ●任务二使用模板 ●任务三页面、页眉与页脚、样式、目录 任务一文档的基本格式设置 在文档中输入文本后,用户可以根据需要对文本或段落设置格式,如设置文本的字符格式,为段落设置首字下沉,为文本或段落添加边框和底纹,为段落添加项目符号和编号,用制表位设置段落的对齐,以及为文档添加水印等。 本任务内容提要 一、设置字符和段落格式 二、设置文字下沉 三、设置边框和底纹 四、设置项目符号和编号 五、设置制表位与添加水印 六、插入艺术字 七、应用系统内置样式 一、设置字符和段落格式 字符格式包括字体、字号、字形和字符颜色等。段落是以回车符“ ”为结束标记的内 容,段落的格式设置主要包括段落的对齐方式、段落缩进、段落间距以及行间距等。 Word 2003默认的中文字符格式为宋体、五号字,英文字体为Times New Roman。 在实际工作中,我们可以根据需要利用“格式”工具栏,以及“字体”和“段落”对话框灵活设置文档的字符和段落格式。 选中文本后单击“格式”工具栏上的相应按钮即可 利用“格式”工具栏设置字体、字号和字体颜色时,可单击相应选项右侧的下三角按钮,然后从弹出的下拉列表中进行选择。字号的表示方法有两种:一种以“号”为单位,如初号、一号、二号……,数值越大,字号就越小;另一种以“磅”为单位,如10、10.5、15……数值越大,字号也越大。 利用“格式”工具栏设置段落的对齐方式时,只需单击相应的对齐方式按钮即可。这几个按钮的

作用从左到右分别是两端对齐、居中对齐、右对齐和分散对齐。 在该选项卡可设置文字效果 在此可设置字符效果

MFC-txt文件读写

文本文件的读写 正确的文本文件读写过程 1.定义文件变量; 2.打开指定的文件; 3.向从文本文件中写入信息; 4.从文本文件中读取信息; 5.关闭文件 1、定义文件变量 定义文件变量格式:CStdioFile 文件变量; 例如,定义一个名称为f1的文件变量,语句如下:CStdioFile f1; 2、打开指定文件 可以直接通过CStdioFile的构造函数来打开磁盘文件,同时可以用标志位指定打开方式(只读、只写、读写等): CStdioFile(LPCTSTR lpszFileName,UINT nOpenFlags); 其中,lpszFileName表示要打开的文件名,可以是相对路径或绝对路径 nOpenFlags设置文件打开方式标志位,可以指定用“|”连接多个标志位。下面是常用的打开标志: CFile::typeText:以文本文件的形式打开文件 CFile::typeBinary:以二进制文件的形式打开文件 CFile::modeCreate:如果指定文件名的文件不存在,则新建文件;如果文件存在并且没有设置CFile::modeNoTruncate标志,则清空文件。 CFile::modeNoTruncate:如果文件存在,不把它的长度删除为0(即不清空文件中的数据)。

:以只读方式打开文件 CFile::modeReadWrite:以可读可写方式打开文件 CFile::modeWrite:以只写方式打开文件 CFile::shareDenyNone:文件打开后,不禁止其他进程对文件的读写操作CFile::shareExclusive:文件打开后,禁止其他进程对文件的读写操作CFile::shareDenyRead:文件打开后,禁止其他进程对文件的读操作

C语言文件操作之文件的读写[1]

C语言文件操作之----文件的读写 当文件按指定的工作方式打开以后,就可以执行对文件的读和写。下面按文件的性质分类进行操作。针对文本文件和二进制文件的不同性质,对文本文件来说,可按字符读写或按字符串读写;对二进制文件来说,可进行成块的读写或格式化的读写。 1. 读写字符 C提供fgetc和fputc函数对文本文件进行字符的读写,其函数的原型存于stdio.h头文件中,格式为: int fgetc(FILE *stream) fgetc( )函数从输入流的当前位置返回一个字符,并将文件指针指示器移到下一个字符处,如果已到文件尾,函数返回EOF,此时表示本次操作结束,若读写文件完成,则应关闭文件。 int fputc(int ch,FILE *stream) fputc()函数完成将字符c h的值写入所指定的流文件的当前位置处,并将文件指针后移一位。fputc()函数的返回值是所写入字符的值,出错时返回EOF。 [例8-2] 将存放于磁盘的指定文本文件按读写字符方式逐个地从文件读出,然后再将其显示到屏幕上。采用带参数的main( ),指定的磁盘文件名由命令行方式通过键盘给定。 #i nclude main(argc,argv)

int argc; char *argv[]; { char ch; FILE *fp; int i; if((fp=fopen(argv[1],"r"))==NULL) /* 打开一个由argv[1]所指的文件*/ { printf("not open"); exit(0); } while ((ch=fgetc(fp))!=EOF) /* 从文件读一字符,显示到屏幕*/ putchar(ch); fclose(fp); } 程序是一带参数的main( )函数,要求以命令行方式运行,其参数argc是用于记录输入参数的个数,argv是指针数组,用于存放输入参数的字符串,串的个数由argc描述。假设我们指定读取的文件名为L8-2.c,并且列表文件内容就是源程序。经过编译和连接生成可执行的文件L8-2.exe。运行程序l8-2.exe,输入的命令行方式为:c:\tc>l8-2 L8-2.c

(完整版)fortran文件操作

fortran文件操作 From: 《Fortran 95 程序设计》彭国伦 1.文件读取的概念: 读取:“顺序读取”和“直接读取”。 保存:“文本文件”和“二进制文件”。 二进制文件:读取快,因为保存格式和数据在内存中的保存方法一样,同时也节省空间。 ---------------------------------- 2. 文件的操作: ---------------------------------- open的使用:使用open命令打开文件之后,就可以对文件来做输入输出。 example: program ex0901 impicit none open(unit=10, file='hello.txt') ! 打开hello.txt文件, unit指定文件代码,file 指定文件名称。 write(10, *) "hello" !在代码为10的文件中写入hello stop end program ex0901 open中有很多参数可以使用,详细如下: OPEN(UNIT=number, FILE='filename', FORM='...', STATUS='...', ACCESS='...', RECL=length, ERR=label, IOSTAT=iostat, BLANK='...', POSITION='...', ACTION=action, PAD='...', DELIM='...') UNIT='number': number必须是一个正整数,它可以使用变量或是常量来赋值。number最好避开1,2,5,6。因为2,6是默认的输出位置,也就是屏幕。1,5则是默认的输入位置,键盘。 FILE='filename':指定要打开的文件名称,文件名要符合系统规定。windows下不区分大小写,unix下则会区分大小写,最好不要使用中文文件名。 FORM='FORMATTED' OR 'UNFORMATTED' FORM字段只有两个值可以设置: FORM='FORMATTED' “文本文件”格式来保存 FORM='UNFORMATTED' “二进制文件”格式保存 这一栏不给定时候的默认值是: FORM='FORMATTED' STATUS='NEW' or 'OLD' or 'SCRATCH' or 'UNKNOWN' 用来说明打开一个新的文件或已经存在的旧文件。 STATUS='NEW' 打开一个原本不存在的新文件 STATUS='OLD' 打开一个原来已经存在的文件 STATUS='REPLACE' 若文件已经存在则重新创建一次,原来的内容消失;若不存在则会创建新文件。 STATUS='SCRATCH' 表示要打开一个暂存文盘,这个时候可以不需要指定文件名称,也就是FILE这个一栏可以忽略。因为程序本身会自动取一个文件名,至于文件名是啥也不重要,因为暂存盘会在程序结束后自动删除。 STATUS='UNKNOWN' 由各编译器自定义。通常会同REPLACE的效果。 !这一栏不给定时,默认为STATUS='UNKNOWN'。 ACCESS='SEQUENTIAL' or 'DIRECT' 设置读写文件的方法:

Java 对文件读写操作

Java 对文件进行读写操作的例子很多,让初学者感到十分困惑,我觉得有必要将各种方法进行 一次分析,归类,理清不同方法之间的异同点。 一.在JDK 1.0 中,通常是用InputStream & OutputStream 这两个基类来进行读写操作的。InputStream 中的FileInputStream 类似一个文件句柄,通过它来对文件进行操作,类似的,在 OutputStream 中我们有FileOutputStream 这个对象。 用FileInputStream 来读取数据的常用方法是: FileInputStream fstream = new FileInputStream(args[0]); DataInputStream in = new DataInputStream(fstream); 用in.readLine() 来得到数据,然后用in.close() 关闭输入流。 完整代码见Example 1。 用FileOutputStream 来写入数据的常用方法是: FileOutputStream out out = new FileOutputStream("myfile.txt"); PrintStream p = new PrintStream( out ); 用p.println() 来写入数据,然后用p.close() 关闭输入。 完整代码见Example 2。 二.在JDK 1.1中,支持两个新的对象Reader & Writer,它们只能用来对文本文件进行操作,而 JDK1.1中的InputStream & OutputStream 可以对文本文件或二进制文件进行操作。 用FileReader 来读取文件的常用方法是: FileReader fr = new FileReader("mydata.txt"); BufferedReader br = new BufferedReader(fr); 用br.readLing() 来读出数据,然后用br.close() 关闭缓存,用fr.close() 关闭文件。 完整代码见Example 3。 用FileWriter 来写入文件的常用方法是: FileWriter fw = new FileWriter("mydata.txt"); PrintWriter out = new PrintWriter(fw); 在用out.print 或out.println 来往文件中写入数据,out.print 和out.println的唯一区别是后者写 入数据或会自动开一新行。写完后要记得用out.close() 关闭输出,用fw.close() 关闭文件。完整代码见Example 4。 -------------------------------------------------------------- following is the source code of examples------------------------------------------------------ Example 1:

word格式化文档技巧

第2章格式化文档技巧 不论是用笔还是用电脑撰写文章,最重要的肯定是要言之有物。但除了内容之外,形式也是很重要的。尤其是使用文字处理软件撰写文章、专著,如果懂得如何快速、巧妙地设置格式,不仅可以使文稿样式美观,更可以加快编写速度。而如果不懂得这些基本的格式化手段,编辑起文稿来,就会感到处处受到束缚,写作过程也难以顺畅,影响工作效率。 2.1 格式化字符技巧 字符可以是一个汉字,也可以是一个字母、一个数字或一个单独的符号,字符的格式包括字符的字体、大小、粗细、字符间距及各种表现形式。 简单的字符格式可以通过工具栏上的按钮来进行排版操作,如,设置字体加粗,可以单击工具栏上的按钮来实现、设置字体字号,可以单击工具栏上的【字号】下拉列表按钮来选择字号等;也可以通过快捷键来完成,如,选择字体下划线,可以单击【下划线】按钮或在下拉列表中选择下划线的线型。 但是,一些特殊的字体必须通过【字体】对话框才能完成设置。如果要制作出更具有艺术性的字符效果,如,变形字体、旋转字等,可以通过艺术字来完成。使用【格式】工具栏格式化字符可以设置一些简单的字符格式。 2.1.1 随意地选择字号 选择字号方法很简单,单击常用工具栏上的下拉列表按钮,在字号列表中选择或输入字号。 字号的表示方法有两种,一种是中文数字,数字越小,对应的字号越大;另一种是阿拉伯数字,字号越小,字符也就越小。字号的单位为磅,用毫米换算的方法为:1毫米=2.83磅;磅与号的换算单位是:1磅=1/72英寸,1英寸=21.4毫米。 在Word中,表述字体大小的计量单位有两种,一种是汉字的字号,如初号、小初、一号、…七号、八号;另一种是用国际上通用的“磅”来表示,如4、4.5、10、12、… 48、72等。 中文字号中,“数值”越大,字就越小,所以八号字是最小的;在用“磅”表示的字号时,数值越小,字符的尺寸越小,数值越大,字符的尺寸越大。1磅有多大呢?2.83磅等于1毫米,所以28号字大概就是一厘米高的字,约相当于中文字号中的一号字。

C++ builder 的文件读写操作总结

C++ builder 的文件读写操作总结
在编程的过程中,文件的操作是一个经常用到的问题,在 C++Builder 中,可以 使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是: 1、基于 C 的文件操作; 2、基于 C++的文件操作; 3、基于 WINAPI 的文件操作; 4、基于 BCB 库的文件操作; 5、特殊文件的操作。 1. 基于 C 的文件操作 在 ANSI C 中,对文件的操作分为两种方式,即流式文件操作和 I/O 文件操 作,下面就分别介绍之。 1)流式文件操作 这种方式的文件操作有一个重要的结构 FILE, FILE 在 stdio.h 中定义如下:
以下是引用片段: 以下是引用片段: typedef struct { int level; /* fill/empty level of buffer */ unsigned flags; /* File status flags */ char fd; /* File descriptor */ unsigned char hold; /* Ungetc char if no buffer */ int bsize; /* Buffer size */ unsigned char _FAR *buffer; /* Data transfer buffer */ unsigned char _FAR *curp; /* Current active pointer */ unsigned istemp; /* Temporary file indicator */ short token; /* Used for validity checking */ } FILE; /* This is the FILE object */ FILE 这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结 构的指针来进行,此种文件操作常用的函数如下: 函数 功能 fopen() 打开流

第2章Word文档格式化基础

百度文库 第2章格式化文档技巧 (27) 格式化字符技巧 (27) 2.1.1 随意地选择字号 (27) 2.1.2 选择字形效果 (28) 2.1.3 调整字符的宽与高 (29) 2.1.4 调整字符的间距 (30) 2.1.5 更改英文大小写字母 (31) 2.1.6 设置文档的度量单位 (32) 格式化段落技巧 (33) 2.2.1 让段落首行缩进 (33) 2.2.2 设置首字下沉 (34) 2.2.3 页面垂直对齐方式 (35) 2.2.4 设置文本对齐方式 (36) 2.2.5 控制段落的自动分页 (37) 2.2.6 给段落硬分页 (39) 2.2.7 取消后台重新分页功能 (40) 2.2.8 控制字符的断行 (40) 设置制表位技巧 (41) 2.3.1 设置制表位的对齐方式 (41) 2.3.2 设置制表位前导符 (42) 2.3.3 手动给目录添加制表符 (42) 2.3.4 快速格式化文档的技巧 (43) 中文版式设置技巧 (44) 2.4.1 给汉语加注拼音 (44) 2.4.2 创建带圈字符 (46) 2.4.3 双行合一 (46) 2.4.4汉字简繁体转换 (47)

第2章格式化文档技巧 不论是用笔还是用电脑撰写文章,最重要的肯定是要言之有物。但除了内容之外,形式也是很重要的。尤其是使用文字处理软件撰写文章、专著,如果懂得如何快速、巧妙地设置格式,不仅可以使文稿样式美观,更可以加快编写速度。而如果不懂得这些基本的格式化手段,编辑起文稿来,就会感到处处受到束缚,写作过程也难以顺畅,影响工作效率。 格式化字符技巧 字符可以是一个汉字,也可以是一个字母、一个数字或一个单独的符号,字符的格式包括字符的字体、大小、粗细、字符间距及各种表现形式。 简单的字符格式可以通过工具栏上的按钮来进行排版操作,如,设置字体加粗,可以单击工具栏上的按钮来实现、设置字体字号,可以单击工具栏上的【字号】下拉列表按钮来选择字号等;也可以通过快捷键来完成,如,选择字体下划线,可以单击【下划线】按钮或在下拉列表中选择下划线的线型。 但是,一些特殊的字体必须通过【字体】对话框才能完成设置。如果要制作出更具有艺术性的字符效果,如,变形字体、旋转字等,可以通过艺术字来完成。使用【格式】工具栏格式化字符可以设置一些简单的字符格式。 2.1.1 随意地选择字号 选择字号方法很简单,单击常用工具栏上的下拉列表按钮,在字号列表中选择或输入字号。 字号的表示方法有两种,一种是中文数字,数字越小,对应的字号越大;另一种是阿拉伯数字,字号越小,字符也就越小。字号的单位为磅,用毫米换算的方法为:1毫米=2.83磅;磅与号的换算单位是:1磅=1/72英寸,1英寸=21.4毫米。 在Word中,表述字体大小的计量单位有两种,一种是汉字的字号,如初号、小初、一号、…七号、八号;另一种是用国际上通用的“磅”来表示,如4、、10、12、…48、72等。 中文字号中,“数值”越大,字就越小,所以八号字是最小的;在用“磅”表示的字号时,数值越小,字符的尺寸越小,数值越大,字符的尺寸越大。1磅有多大呢?2.83

java文件读写操作

1、按字节读取文件内容 2、按字符读取文件内容 3、按行读取文件内容 4、随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。 */ public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读一个字节 in = new FileInputStream(file); int tempbyte; while ((tempbyte = in.read()) != -1) { System.out.write(tempbyte); }

in.close(); } catch (IOException e) { e.printStackTrace(); return; } try { System.out.println("以字节为单位读取文件内容,一次读多个字节:"); // 一次读多个字节 byte[] tempbytes = new byte[100]; int byteread = 0; in = new FileInputStream(fileName); ReadFromFile.showAvailableBytes(in); // 读入多个字节到字节数组中,byteread为一次读入的字节数 while ((byteread = in.read(tempbytes)) != -1) { System.out.write(tempbytes, 0, byteread); } } catch (Exception e1) { e1.printStackTrace(); } finally { if (in != null) { try {

汇编中文件的读写

汇怎么读汇编语言实验报告 (七) 班级:01540802班 姓名:南征 学号: 20080705 信息与电子学院 实验七文件的读写 一、实验目的 二、实验要点 磁盘文件的读写有两种方法,一种称为文件控制块;另一种方法称为文件标记,前者在读写文件时首先要设定文件控制块,知名文件所在的当前磁盘的驱动器、文件名,同时还要制定所读写的文件所处的当前块号、当前记录号、记录长度等参量,此外还需要设置磁盘传输区。在读磁盘数据文件时,应先将磁盘上有关数据读入磁盘传输区,然后再传送至目的的内存区。在写磁盘数据文件时,要写入磁盘文件的数据也必须先送入磁盘传输区,然后再执行写操作。此种方法的缺点是不支持树形目录结构。目前常用的方法是利用文件标记读写文件,无论用什么方法读写文件,都要解决以下几个问题: A) 用户程序要告诉操作系统将要存取那个文件。 B) 无论是从磁盘独处的数据,还是要写入磁盘的数据都必须存放在一个制定的内存缓冲区中,这个内存缓冲区叫数据传输区(DTA)。 C) 在读一个磁盘文件之前,要先打开文件,然后才能将文件内容读入内存。而在读写一个文件之前,要先建立一个新文件名,再将内存中的内容写入磁盘。 D) 在存取文件之后,特别是在写入文件之后,务必将此文件关闭。 利用文件标记读写文件的主要特点是: 通过建立文件、打开文件,将磁盘路径名、文件名转换为文件标记或件号,在以后读写文件的操作中均要与文件标记打交道。在一个系统中,可同时打开多个文件,并配置相应的文件标记。在利用文件标记读写磁盘文件是要掌握以下几个要点:

1) 使用建立文件、打开文件系统功能之前,都必须将DS:DX指向驱动器名、路径名、文件名和以数值零为结尾的ASCIIZ字符串的首地址。 2) 对于一个新文件要用3CH系统功能调用,建立文件。(如果不是新文件,此步骤可略) 3) 已存在的文件则利用3DH系统功能调用,打开此文件。 4) 如果文件建立、打开成功,则CF=0,并且在AX寄存器中返回文件标记。 5) 在建立、打开文件成功之后,即可对文件进行读、写操作。如果要对文件进行读操作,则在打开文件之后,用3FH系统功能调用将文件读入数据缓冲区,调用前的入口参数是:文件标记存入BX,读入文件的字节数放入CX,数据缓冲区的起始地址存入DS:DX。调用完毕,AX 返回实际读入的字节数。 6) 读入数据缓冲区的文件,可利用40H系统功能调用将文件写入指定的磁盘。调用入口参数是:文件标记存入BX,要写入的字节数放入CX,DS:DX指向要写入数据缓冲区的首地址。调用结束后AX返回实际写入的字节数。如果AX

bcb文件读写操作

bcb文件读写操作 (转) 2010-09-16 16:45 在BCB提供的这组文件操作函数中,可分为三种类型,就是:1、文件名函数,2、文件管理函数;3、文件I/O函数。 1、文件名函数 文件名函数可以对文件的名称、所在子目录、驱动器和扩展名等进行操作。下表列出这些函数及其功能。 函数说明 ExpandFileName() 返回文件的全路径(含驱动器、路径) ExtractFileExt() 从文件名中抽取扩展名 ExtractFileName() 从文件名中抽取不含路径的文件名 ExtractFilePath() 从文件名中抽取路径名 ExtractFileDir() 从文件名中抽取目录名 ExtractFileDrive() 从文件名中抽取驱动器名 ChangeFileExt() 改变文件的扩展名 ExpandUNCFileName() 返回含有网络驱动器的文件全路径 ExtractRelativePath() 从文件名中抽取相对路径信息ExtractShortPathName() 把文件名转化为DOS的8·3格式 MatchesMask() 检查文件是否与指定的文件名格式匹配 下面就把这些函数作一一介绍: ⑴ExpandFileName() 原型:extern PACKAGE AnsiString __fastcall ExpandFileName(const AnsiString FileName); 功能:返回文件的全路径(含驱动器、路径) 参数:FileName:要处理的文件名 例:ShowMessage(ExpandFileName(Application->ExeName));//显示你的程序文件名,如C:\MyBCB\Sample1.EXE ⑵ExtractFileExt() 原型:extern PACKAGE AnsiString __fastcall ExtractFileExt(const AnsiString FileName); 功能:从文件名中抽取扩展名 参数:FileName:要处理的文件名(全路径) 例:ShowMessage(ExtractFileExt(Application->ExeName));//显示".exe"

红头文件格式以及设置方法

本文根据2013年最新公文格式,涵盖了党政机关所用收发文格式。 《党政机关公文格式》 一、公文的构成要素 公文一般由份号、密级和保密期限、紧急程度、发文机关标志、发文字号、签发人、标题、主送机关、正文、附件说明、发文机关署名、成文日期、印章、附注、附件、抄送机关、印发机关和印发日期、页码等组成。 二、公文的排版形式 排版形式指公文各组成要素在文件版面上的标印格式。 1.公文用纸幅面尺寸: 采用国际标准A4型纸,297mm×210mm。 公文页边与版心尺寸为:公文用纸天头37MM,公文用纸订口28MM,版心尺寸225mm×156mm(不含页码)。 发文机关标识上边缘至版心上边缘为25mm。对于上报的公文,发文机关标识上边缘至版心上边缘为80mm。 2.信函式公文 发文机关名称上边缘距上页边的距离为30mm ,推荐用小标宋体字,字号由发文机关酌定;发文机关全称下4mm 处为一条武文线(上粗下细),距下页边20mm 处为一条文武线(上细下粗),两条线长均为170mm。每行居中排28个字。发文机关名称及双线均印红色。 3.字体字号 发文机关标识使用2号小标宋体字,红色标识;秘密等级、保密期限、紧急程度用3号黑体字;发文字号、签发人、主送机关、附注、抄送机关、印发机关、印发时间用3号仿宋体字;签发人姓名

用3号楷体字;正文以3号仿宋体字,一般每面排22行,每行排28字,正文中如有小标题可用3号小标宋体字或黑体字。 三、公文各要素及排版形式 公文的各要素分为眉首、主体、版记三部分。 1.眉首 置于公文首页红色反线以上的各要素统称公文眉首。眉首包括:公文份数序号、秘密等级和保密期限、紧急程度、发文机关标识、发文字号、签发人。 (1)份号:公文印制份数的顺序号,即将同一文稿印刷若干份时每份公文的顺序编号。涉密公文应当标注份号。置于版心左上角第一行,用阿拉伯数字。 (2)密级和保密期限:密级分为绝密、机密和秘密;保密期限是对公文秘密等级时效规定的说明。置于版心右上角第一行,两字之间空一字。 (3)紧急程度:是对公文送达和办理的时限要求。根据紧急程度,标注“特急”、“加急”;紧急电报分为“特提”、“特急”、“加急”、“平急”。置于版心右上角第一行,两字之间空一字。公文同时标识秘密等级与紧急程度,秘密等级顶格标识在版心右上角第一行,紧急程度顶格标识在版心右上角第二行。 (4)发文机关标识:发文机关标识表明公文的作者,他是发文机关制作公文时使用的、规范板式的文件版头,通常称“文头”。由发文机关全称或规范化简称后加“文件”组成,居中红色套印在文件首页上端。联合行文时,发文机关标志可以并用联合发文机关名称,也可以单独用主办机关名称,“文件”二字置于发文机关名称右侧,上下居中排布。 (5)发文字号:发文字号是发文机关按照发文顺序编排的顺序号。由发文机关代字、年份和序号组成。置于发文机关标识下空两行,居

(完整word版)BMP文件结构读写操作(图文)c实现

BITMAPFILEHEADER结构的各个域详细说明如下: bfType:位图文件类型,必须是0x424D,即字符串“BM”,也就是说,所有的“*.bmp”文件的头两个字节都是“BM”。

bfSize:位图文件大小,包括这14个字节。 bfReserved1, bfReserved2:Windows保留字,暂不用。 bfOffBits:从文件头到实际的位图数据的偏移字节数,图1-7中前3个部分的长度之和。 图1-7 BMP文件结构示意图 第2部分为位图信息头BITMAPINFOHEADER,也是一个结构体类型的数据结构,该结构的长度也是固定的,为40个字节(WORD为无符号16位整数,DWORD为无符号32位整数,LONG为32位整数)。其定义如下: typedef struct tagBITMAPINFOHEADER { DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed;

RGBQUAD结构的各个域的详细说明如下: rgbBlue:该颜色的蓝色分量; rgbGreen:该颜色的绿色分量; rgbRed:该颜色的红色分量; rgbReserved:保留字节,暂不用。 有些位图需要颜色表;有些位图(如真彩色图)则不需要颜色表,颜色表的长度由BITMAPINFOHEADER结构中biBitCount分量决定。对于biBitCount值为1的二值图像,每像素占1bit,图像中只有两种(如黑白)颜色,颜色表也就有21=2个表项,整个颜色表的大小为个字节;对于biBitCount值为8的灰度图像,每 像素占8bit,图像中有颜色,颜色表也就有256个表项,且每个表项的R、G、B分量相等,整个颜色表的大小为个字节;而对于biBitCount=24的真彩色图像,由于每像素3个字节中分别代表了R、G、B三分量的值,此时不需要颜色表,因此真彩色图的BITMAPINFOHEADER结构后面直接就是位图数据。 第4部分是位图数据,即图像数据,其紧跟在位图文件头、位图信息头和颜色表(如果有颜色表的话)之后,记录了图像的每一个像素值。对于有颜色表的位图,位图数据就是该像素颜色在调色板中的索引值;对于真彩色图,位图数据就是实际的R、G、B值(三个分量的存储顺序是B、G、R)。下面分别就2色、16色、256色和真彩色位图的位图数据进行说明: 对于2色位图,用1位就可以表示该像素的颜色,所以1个字节能存储8个像素的颜色值。 对于16色位图,用4位可以表示一个像素的颜色。所以一个字节可以存储2个像素的颜色值。 对于256色位图,1个字节刚好存储1个像素的颜色值。 对于真彩色位图,3个字节才能表示1个像素的颜色值。 需要注意两点: 第一,Windows规定一个扫描行所占的字节数必须是4的倍数,不足4的倍数则要对其进行扩充。假设图像的宽为biWidth个像素、每像素biBitCount个比特,其一个扫描行所占的真实字节数的计算公式如下: DataSizePerLine = (biWidth * biBitCount /8+ 3) / 4*4

相关文档