非缓冲文件编程(实时操作)

在下面情况下需要非缓冲文件编程。

//银行数据安全要求严格

//键盘,鼠标,显卡设备

1.文本文件读写操作:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include<io.h>
#include<fcntl.h>//文件打开,设置文件打开模式,就是下面的一大列函数。
#include<sys/stat.h>//系统底层,sys表示驱动,stat表示文件的状态。

void main1()
{
    char str[256] = { 0 };
    scanf("%s", str);

    int fhd = _open("C:\\mem.txt", O_WRONLY | O_CREAT);//既只写 ,又创建
    if (fhd==-1)
    {
        printf("打不开");
    }
    else
    {
        _write(fhd, str, sizeof(str));//即刻生效
        _close(fhd);//关闭文件
    }

    system("pause");

}
//#define O_RDONLY        _O_RDONLY  只读
//#define O_WRONLY        _O_WRONLY 只写
//#define O_RDWR          _O_RDWR  读写
//#define O_APPEND        _O_APPEND 增加
//#define O_CREAT         _O_CREAT 创建
//#define O_TRUNC         _O_TRUNC
//#define O_EXCL          _O_EXCL
//#define O_TEXT          _O_TEXT  文本
//#define O_BINARY        _O_BINARY  二进制
//#define O_RAW           _O_BINARY
//#define O_TEMPORARY     _O_TEMPORARY 临时
//#define O_NOINHERIT     _O_NOINHERIT
//#define O_SEQUENTIAL    _O_SEQUENTIAL
//#define O_RANDOM        _O_RANDOM  随机读写

void main2()
{

    char str[256] = { 0 };
    int fhd = _open("C:\\mem.txt", O_RDONLY | O_TEXT);

    if (fhd==-1)
    {
        printf("打不开");
    }
    else
    {
        _read(fhd, str, 256);
        puts(str);
        _close(fhd);//关闭文件
    }

    system("pause");
}

2.文本文件查询:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include<io.h>
#include<fcntl.h>//文件打开
#include<sys/stat.h>//系统底层
//银行数据安全要求严格
//键盘,鼠标,显卡设备,

char path[128] = "Z:\\I\\尹成清华终极版C语言视频源码文档20150131\\大数据相关数据\\xh-2.txt";
char newpath[128] = "C:\\renren.txt";

void main12()
{
    int fhdr = _open(path, O_RDONLY);
    int fhdw = _open(newpath, O_CREAT | O_WRONLY);
    if (fhdr ==-1 || fhdw ==-1)
    {
        return -1;//操作失败
    }
    else
    {
        while (!_eof(fhdr))
        {
            char str[256] = { 0 };
            int length=_read(fhdr, str, 256);//读取
            _write(fhdw, str, length);//写入

        }

        _close(fhdr);//文件不可以关闭两次,
        _close(fhdw);
    }

    system("pause");
}

//fgets
void main()
{
    int fhdr = _open("I:\\尹成清华终极版C语言视频源码文档20150131\\大数据相关数据\\kaifang.txt", O_RDONLY);
    if (fhdr == -1 )
    {
        return -1;//操作失败
    }
    else
    {
        _lseek(fhdr, 1023, SEEK_SET);
        while (!_eof(fhdr))
        {
            char str[1024] = { 0 };
            int length = _read(fhdr, str, 1024);//读取

            char *p = strstr(str, "曾彬");
            if (p)
            {
                printf("%s\n", str);
            }

        }

        _close(fhdr);//文件不可以关闭两次,

    }

    system("pause");
}

弊端:文件是连成一片的,它是取一段长度作为一行,有可能实际的一行与下一行发生错位。如果是非缓冲文件编程,无法判断\n,不能读一个写一个需要建立双索引(开始和长度),

3.二进制文本文件读写:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include<io.h>
#include<fcntl.h>//文件打开
#include<sys/stat.h>//系统底层
//银行数据安全要求严格
//键盘,鼠标,显卡设备,

struct info
{
    char name[100];
    double db;

};

void main1x()
{
    struct info infos[8] = { { "zengbin1", 9876.5 }, { "zengbin2", 88176.5 },
    { "zengbinreal", 1888876.5 }, { "zengbin4", 18276.5 }, { "zengbinchangesex", 8888876.5 },
    { "zengbin5", 2876.5 }, { "zengbin7", 38876.5 }, { "zengbin38", 238876.5 } };
    //printf("\n%d", sizeof(struct info)); 112*8
    int fhdw = _open("C:\\zeng.bin", O_CREAT | O_BINARY | O_WRONLY);

    if (fhdw==-1)
    {
        return;
    }
    else
    {
        _write(fhdw, infos, sizeof(infos));
        _close(fhdw);
    }

    system("pause");
}

void main2x()
{
    struct info infos[8] = {0};

    int fhdr = _open("C:\\zeng.bin",  O_BINARY | O_RDONLY);
    if (fhdr==-1)
    {
        return;
    }
    else
    {
        _read(fhdr, infos, sizeof(infos));
        _close(fhdr);
    }
    for (int i = 0; i < 8;i++)
    {
        printf("娃娃名称%s娃娃价格 %f\n", infos[i].name, infos[i].db);
    }

    system("pause");
}

void main3()
{

    struct info  info1 = { 0 };
    int fhdr = _open("C:\\zeng.bin", O_BINARY | O_RDONLY);
    if (fhdr == -1)
    {
        return;
    }
    else
    {
        while (1)
        {
            int num;
            scanf("%d", &num);
            _lseek(fhdr, sizeof(info1)*(num - 1), SEEK_SET);
            _read(fhdr, &info1, sizeof(info1));
            printf("娃娃名称%s娃娃价格 %f\n", info1.name, info1.db);
        }

        _close(fhdr);
    }

    system("pause");
}
时间: 2024-11-12 14:50:54

非缓冲文件编程(实时操作)的相关文章

Linux下基于文件描述符的文件操作(非缓冲)

1 文件描述符 内核为每个进程维护一个已打开文件的记录表(实现为结构体数组),文件描述符是一个较小的正整数(0-1023)(结构体数组下标),它代表记录表的一项,通过文件描述符和一组基于文件描述符的文件操作函数,就可以实现对文件的读.写.创建.删除等操作. 常用基于文件描述符的函数有open(打开).creat(创建).close(关闭).read(读取).write(写入).ftruncate(改变文件大小).lseek(定位).fsync(同步).fstat(获取文件状态).fchmod(权

75.非缓冲编程

IO 创建文件并写文件 1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include<io.h> 5 #include<fcntl.h>//文件打开 6 #include<sys/stat.h>//系统底层 7 //银行数据安全要求严格 8 //键盘,鼠标,显卡设备, 9 10 11 void main() 12 { 13 char

Linux文件编程实例

//捕获fopen调用中的错误 #include <stdio.h> #include <errno.h> #include <string.h> #define MYFILE "missing.txt" int main(  ) { FILE* fin; fin=fopen( MYFILE,"r" ); if( fin==(FILE*)NULL ) { printf( "%s: %s\n",MYFILE,st

linux应用程序开发-文件编程-系统调用方式

在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻, 所以把学习过程记录下来,也作为linux应用程序开发的一个系列吧! 文件编程有两种方式,一是系统调用方式,二是库函数调用. 前者依赖特定的平台,后者不依赖平台. 系统调用:创建 int creat(const char *filename,mode_t mode); filename:要创建的文件名 mode:创建模式 S_IR

mysql的缓冲查询和非缓冲查询

最近在开发一个PHP程序时遇到了下面的错误: PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted 错误信息显示允许的最大内存已经耗尽.遇到这样的错误起初让我很诧异,但转眼一想,也不奇怪,因为我正在开发的这个程序是要用一个foreach循环语句在一个有4万条记录的表里全表搜索具有特定特征的数据,也就是说,一次要把4万条数据取出,然后逐条检查每天数据.可想而知,4万条数据全部加载到内存中,内存不爆才怪. 毕竟编程这么

C# 托管和非托管混合编程

在非托管模块中实现你比较重要的算法,然后通过 CLR 的平台互操作,来使托管代码调用它,这样程序仍然能够正常工作,但对非托管的本地代码进行反编译,就很困难. 最直接的实现托管与非托管编程的方法就是使用C++/CLI 介绍 项目存档一直是企业的采用的做法,而是事实证明他们也是对的!对于一个程序员,这是几千men-days的工作量.为什么不开发一小段代码去重新利用那段代码,项目. 现在提供了一个渐渐的转向C#的新技术: 使用托管与非托管的混合编程.这是一个可行的方案在top-down issue(f

非缓冲 和 全缓冲

body { font-family: 微软雅黑,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5; } html, body { } h1 { font-size:1.5em; font-weight:bold; } h2 { font-size:1.4em; font-weight:bold; } h3 { fon

WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等

核心概念 WAF Web应用防火墙(Web Application Firewall),简称WAF. Web攻击 针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入.XSS跨站.Webshell上传.命令注入.非法HTTP协议请求.非授权文件访问等.

C言语模块化开辟(多文件编程)

你好,欢迎离开「C言语模块化开辟」专题,在这里你将进修到大中型程序开辟技巧.本专题由C言语中文网站长执笔,将多年的编程经历灌注贯注个中,典型的理论派,你可以猛击<关于作者><若何才干完成这部教程>理解教程面前的故事.到今朝为止,我们编写的大局部C言语程序都只包括一个源文件,没有将代码疏散到多个模块中,关于只要几百行的小程序来说这或答应以承受,但关于动辄上万行的大中型程序,将一切代码都集中在一个源文件中几乎是一场灾害,后续浏览和保护都将称为顺手的成绩.在C言语中,我们可以将一个.c文