精华内容
下载资源
问答
  • C语言写入文件

    2014-05-31 18:35:51
    #include #include int main() { int ch; FILE *fp;...当正确写入一个字符或一个字节的数据后,文件内部写 指针 会自动后移一个字节的位置。EOF是在头文件 stdio.h中定义的宏。
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int ch;
        FILE *fp;
        fp =fopen("c.txt","w");
        while((ch=getchar()) !='!')
        {
            fputc(ch,fp);
        }
        fclose(fp);
        return 0;
    }

    fputc
    函数功能: 将字符ch写到文件指针fp所指向的文件的当前写指针的位置。
    函数名称:写字符文件函数fputc()
    函数格式:int fputc (int n, File *fp)
    参数解释:fp为文件指针,它的值是执行fopen()打开文件时获得的。
    n为输出的字符量。
    虽然函数被定义为整形数,但仅用其低八位。
    返回值:在正常调用情况下,函数返回读取字符的ASCII码值,出错时,返回EOF(-1)。当正确写入一个字符或一个字节的数据后,文件内部写指针会自动后移一个字节的位置。EOF是在头文件 stdio.h中定义的宏。

    展开全文
  • 二.ftruncate64/ftruncate如果用系统函数就稍微有些麻烦,因为涉及到宏...文件sparse.c://OPTION 1:是否定义与大文件相关的宏#define _LARGEFILE_SOURCE #define _LARGEFILE64_SOURCE #define _FILE_OFFSET_BITS 64 ...

    二.ftruncate64/ftruncate

    如果用系统函数就稍微有些麻烦,因为涉及到宏的问题。我会结合一个实际例子详细说明,其中OPTION标志的就是测试项。

    文件sparse.c:

    //OPTION 1:是否定义与大文件相关的宏

    #define _LARGEFILE_SOURCE #define _LARGEFILE64_SOURCE #define _FILE_OFFSET_BITS 64   #include #include #include #include #include #include #define FILENAME "bigfile" #define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) int main(int argc, char **argv) {   int fd, ret;   off_t offset;   int total = 0;   if ( argc >= 2 )   {   total = atol(argv[1]);   printf("total=%d/n", total);   }     //OPTION 2:是否有O_LARGEFILE选项   //fd = open(FILENAME,O_RDWR|O_CREAT|O_LARGEFILE, 0644);   fd = open(FILENAME, O_RDWR|O_CREAT, 0644);   if (fd < 0) {   perror(FILENAME);   return -1;   }   offset = (off_t)total*1024ll*1024ll*1024ll;   printf("offset=%ld/n", offset);     //OPTION 3:是否调用64位系统函数   //if (ftruncate64(fd, offset) <0)   if (ftruncate(fd, offset) <0)   {   printf("[%d]-ftruncate64 error: %s/n", errno,strerror(errno));   close(fd);   return 0;   }   close(fd);   printf("OK/n");   return 0; }   测试环境: linux:/disk/test/big # gcc --version gcc (GCC) 3.3.5 20050117 (prerelease) (SUSE Linux) linux:/disk/test/big # uname -a Linux linux 2.6.11.4-20a-default #1 Wed Mar 23 21:52:37 UTC 2005i686 i686 i386 GNU/Linux   测试结果(伪码表示): 1.宏定义完全的情况下: IF {O_LARGEFILE=TRUE &&ftruncate64=TRUE}   OK; ELSEIF {O_LARGEFILE=FALSE &&ftruncate64=TRUE}   OK; ELSEIF {O_LARGEFILE=FALSE &&ftruncate64=FALSE}   运行不报错,但是不支持>4G; ELSEIF {O_LARGEFILE=TRUE &&ftruncate64=FALSE}   运行不报错,但是不支持>4G; 【结论】:在宏定义完全的情况下,是否调用ftruncate64,是决定支持4G以上文件的关键,O_LARGEFILE无作用。   2.宏定义不完全:缺少_FILE_OFFSET_BITS 首先声明一点,O_LARGEFILE需要定义_LARGEFILE64_SOURCE。 IF {O_LARGEFILE=TRUE &&ftruncate64=TRUE}   产生不正常超大文件; ELSEIF {O_LARGEFILE=FALSE &&ftruncate64=TRUE}   产生不正常超大文件; ELSEIF {O_LARGEFILE=FALSE &&ftruncate64=FALSE}   运行不报错,但是不支持>2G; ELSEIF {O_LARGEFILE=TRUE &&ftruncate64=FALSE}   运行不报错,但是不支持>4G; 【结论】:未定义_FILE_OFFSET_BITS的情况下,ftruncate64调用是非法的,会产生无法预料的后果,这里的测试就是产生一个超大文件(>1T),我也无法解释其原因;O_LARGEFILE的作用就是在32位系统中支持大文件系统,允许打开那些用31位(2G)都不能表示其长度的大文件;此外,off_t为unsignedint类型,也就是说最多只能达到4G,所以ftruncate最大支持4G文件。   总结一下:如果要支持超过2G的文件,至少需要定义_LARGEFILE64_SOURCE宏,并且设置O_LARGEFILE选项;如果要支持超过4G,需要定义所有上述的宏,并且调用ftruncate64;其余的搭配都是错误的!   【附】: dd 的主要选项: 指定数字的地方若以下列字符结尾乘以相应的数字: b=512, c=1, k=1024, w=2, m=1024k, g=1024m 大小写不限。 if=file 输入文件名,缺省为标准输入。 of=file 输出文件名,缺省为标准输出。 ibs=bytes 一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。 obs=bytes 一次写 bytes 个字节(即一个块大小为 bytes 个字节)。 bs=bytes 同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。 cbs=bytes 一次转换 bytes 个字节,即转换缓冲区大小。 skip=blocks 从输入文件开头跳过 blocks 个块后再开始复制。 seek=blocks 从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效) count=blocks 仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。 conv=conversion[,conversion...] 用指定的参数转换文件。 转换参数: ascii 转换 EBCDIC 为 ASCII。 ebcdic 转换 ASCII 为 EBCDIC。 ibm 转换 ASCII 为 alternate EBCDIC. block 把每一行转换为长度为 cbs 的记录,不足部分用空格填充。 unblock 使每一行的长度都为 cbs ,不足部分用空格填充。 lcase 把大写字符转换为小写字符。 ucase 把小写字符转换为大写字符。 noerror 不显示错误 notrunc 不截短输出文件。 sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。 本文转自: http://blog.sina.com.cn/s/blog_5c93b2ab0100vhk1.html

    展开全文
  • 图 2 AOF持久化 是否将 aof_buf 缓冲区中内容写入AOF文件中,由 redis.conf 配置文件中的 appendfsync 设置的值来决定,通过 flushAppendFile 函数来进行相关操作。 //事件轮询函数def evenloop(): while True: .....

    在 Redis 中客户端向服务器发送相关写命令请求,这时服务器中有个用于处理这些命令的事件循环进程,对这些命令进行处理,并将相关信息处理的结果反馈给客户端,如:"OK",等。同时,在这个期间,服务器中命令请求器会将相关写命令追加到 aof_buf 缓冲区和 aof_rewrite_buf 重写缓冲区。

    这个阶段服务器进程会处理这三个操作:

    (1)执行客户端的命令。

    (2)将执行后的写命令 append 入 aof_buf 中。

    (3)将执行后的写命令 append 入 aof_rewrite_buf 中。

    603cf0892a0104306ef13a63b4faf7c6.png

    图 1 写命令追加到缓冲区中

    当进行 AOF持久化的时候,对于 aof_buf 中的数据需要写入并同步到 appendonly.aof 文件中。

    1eccd024e4505c1e10b82d10ebeca19d.png

    图 2 AOF持久化

    是否将 aof_buf 缓冲区中内容写入AOF文件中,由 redis.conf 配置文件中的 appendfsync 设置的值来决定,通过 flushAppendFile 函数来进行相关操作。

    //事件轮询函数def evenloop():  while True:       ........    //是否将 aof_buf 缓冲区中的内容写入并同步到 appendonly.aof 文件中。       flushAppendOnlyFile()

    appendfsync 选项的值flushAppendOnlyFile 函数的行为

    always将 aof_buf 缓冲区中的所有内容写入并同步到 AOF 文件中(最安全,但性能差)

    everysec将 aof_buf 缓冲区中的所有内容写入并同步到 AOF 文件中,如果上次同步 AOF 文件的时间距离现在超过 1 秒钟,那么会再次对 AOF 文件进行同步。 (安全,性能较好)

    no

    将 aof_buf 缓冲区中的所有内容写入并同步到 AOF 文件中,但不对 AOF 文件进行同步,何时进行同步一般有操作系统来决定。(一般为 30 秒,不安全,性能最好)

    将 aof_buf 缓冲区中的所有内容写入并同步到 AOF 文件中,但不对 AOF 文件进行同步,何时进行同步一般由操作系统来决定。(一般为 30 秒,不安全,性能最好)

    对于操作系统来说,为了提高对文件的写入操作,一般都是等缓冲区满了或者设置了同步时间,才会将内存缓冲区中的数据写入到磁盘中,完成相关持久化工作。这就可以把写入操作比作把东西写到文本中,同步比作保存。如果没有进行保存,计算机宕机之后,写入文本中的数据会全部丢失。而对于 Redis 来说,要将缓冲区中的数据同步到 aof 文件中,才能避免 Redis 突然宕机后,进行相关数据信息的恢复操作。

    展开全文
  • c语言写入文件 不能马上更新

    千次阅读 2012-05-29 16:42:58
    今天用c语言 写入一个文件发现 调用写入函数后 打开文件文件里面是空的。只有程序结束后或关闭指针后文件中的内容才能更新。   网上找了半天终于把问题解决了:      原来是C语言文件的操作使用了文件...

          今天用c语言  写入一个文件发现  调用写入函数后    打开文件文件里面是空的。只有程序结束后或关闭指针后文件中的内容才能更新。

     

    网上找了半天终于把问题解决了:

     

                      

                     原来是C语言对文件的操作使用了文件缓冲系统。

        C语言对文件的操作使用了缓冲文件系统,具体的说就是系统自动为每个正在使用的文件在内存中开辟了一块缓冲区,从内存向磁盘文件写入的数据必须先送到内存中这个缓冲区,直到这个缓冲区装满之后,才把其中的数据一起送到磁盘上的文件中。因此当程序运行时虽然进行了写数据操作,但是如果写入的数据没有装满内存中的缓冲区,就不会将数据写入到磁盘文件中。当程序运行结束后,系统就会将缓冲区中的数据写入到磁盘上的文件中,因此就可以看到文件中的内容。

        同样,如果是从磁盘文件向内存中读取数据,其过程首先是将一批数据读入内存中的缓冲区,当该缓冲区满了之后,再将数据从该缓冲区逐个送到程序的数据区。

        如果需要在数据写入内存缓冲区后,能立即从磁盘文件中看到数据,那么可以使用fclose函数关闭文件,表示对文件的操作已经完成,这时系统就会把缓冲区中的内容写入磁盘上的文件中。

        但是将文件关闭以后再需要写入文件的话,就要再次打开文件。如果访问某个文件次数比较多的话,这种方法不太方便。因此,可以使用C语言的另一个C函数:fflush(文件指针)。这个函数的作用是将缓冲区的数据写入到磁盘文件

     

          目前C语言使用的文件系统分为缓冲文件系统(标准I / O)和非缓冲文件系统(系统I / O)。

    缓冲文件系统的特点是:

     

         在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执
         行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”,装满后再从内存“缓冲区”依
         此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”
        装满后再写入文件。由此可以看出,内存“缓冲区”的大小,影响着实际操作外存的次数,
        内存“缓冲区”越大,则操作外存的次数就少,执行速度就快、效率高。一般来说,文件
        “缓冲区”的大小随机器而定。

     

     

    展开全文
  • 1.文件基本知识不论你编程还是编程,只要你使用电脑,就一定会跟文件打交道。...打开文件关闭文件读取文件写入文件移动文件删除文件创建文件创建文件夹下面就说明C语言和python语言是如何操作文件的。2.C...
  • 用数组的方式写入一行字符串,成功执行。 int main() { char str[10]; //char *str; FILE *fp; gets(str); fp = fopen("test.txt","a+"); fputs(*str,fp); //将字符串str追加写到test....
  • 问题:为什么我向文件写入4个信息但是只显示三个? if ((fp=fopen("wupinxinxi.dat","r"))==NULL)//打开物品信息文件,不存在该文件则新建 { fp=fopen("wupinxinxi.dat","w"); fclose(fp); fp=fopen(...
  • 是这样子的,C语言程序实现把一个文件中的“edge[source x target y]”写入另一个文件并且转换成“a(x,y)=1;”形式(其中x,y是数字),我的核心代码如下(虽然写的有点儿长,但是其实不难,多谢各位大大阅读!) ...
  • C语言 fprintf写入文件

    2020-04-28 19:17:41
    C语言 fprintf写入文件以追加方式写入txt文件(若无该文件,则新建) 以追加方式写入txt文件(若无该文件,则新建) FILE *fp; fp=fopen("9.txt","a+"); //用 fopen 函数打开txt文件 for (int i = 0; i < K - 1...
  • c语言文件写入格式

    2015-11-19 11:25:30
    本资源为c语言文件写入格式,包括各种写入格式及解释说明及运用
  • C语言写入文件的函数用的是:  FILE *stream;  stream = fopen( "test.txt", "w" );  fprintf( stream,"\n%d,",bidtemp); 先写了个小程序测试一下是否写入: while ((line=br.readLine())
  • 导入头文件 ...#include 读取文件 /** read file */ char* readFile(char *filePath){ FILE *fp; fp = fopen(filePath , "r"); fseek( fp , 0 , SEEK_END ); int file_size; file_size = ftel
  • LESSON lessondatewrite(FILE *fl,LESSON date)//这是一个结构体类型的函数,它可以写入课程数据,接受一个文件指针 { fflush(fl);//刷新缓存区 使将要输入的数据写入硬盘 一次性输入大量数据时使用 避免输入失败...
  • C语言文件写入

    2019-09-25 14:08:57
    1.文件指针的方式 头文件 #include<conio.h> #include<stdlib.h> #inlcude<fstream> 声明变量 FILE * fp; 查看文件创建是否成功 if((fp = fopen("test.dat","w")) == NULL) { printf("\...
  • C语言写入读取

    2020-04-09 20:41:18
    fputs 写入字符串或字符数据 fprintf 写入任意数据 fscanf 读取 void Read() { int flag = 1; FILE *file = NULL; file = fopen(PATH,"r"); //打开文件 if(!file) //判断文件是否打开...
  • 本篇文章是对C语言把文件读入字符串以及将字符串写入文件的方法进行了详细的分析介绍,需要的朋友参考下
  • c语言打开文件写入[rps-include post=6557] [rps-include post = 6557] While learning C programming language one of the most exciting part is writing and reading a file. Because this operations creates ...
  • C语言实现数据写入文件

    万次阅读 多人点赞 2020-03-19 18:21:22
    文件写入数据(C语言) 在分析数据时,首先要解决数据的保存问题,c中提供了相应的函数来实现将数据写入指定文件中的功能 使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件 FILE *fopen(const chat ...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼void save1() //将工具的基本信息保存至文件:"工具基本信息.file"{FILE*fp; //定义fp是一个指向FILE类型数据的指针变量...
  • C语言结构体数组写入文件的问题 siukjk LV12 2016-05-21 information;将结构体写入文件fclose(p);char b[2].a.h"i++){printf("n");}!=EOF)putchar(ch);}/。,len=sizeof(struct node);i#include&quot:\,无关问题...
  • /* fscanf 遇到空格、换行符时结束 fgets 遇到换行符时结束 假设 1.txt 文件内容 文件内容 则 f1 将持续读取到 EOF,即 buffer1 内容持续不变 而 f2 将继续读取新内容,即 buffer2 内容持续变化 即 buffer1 和 ...
  • C语言实现创建N个文件,并对文件写入想要的内容。
  • c语言文件写入

    2014-03-26 19:24:00
    c语言文件写入 创建一个文件使用fopen打开,然后使用fprintf输出,最后关闭文件流 FILE *out; out = fopen("test.txt","a+"); if(out == NULL){ exit(EXIT_...
  • C语言文件读取与写入操作

    万次阅读 多人点赞 2016-04-13 10:28:43
    学了一年的C语言了,现在回过头来做一下总结。并且博客开了挺长一段时间却没有谢什么实际的东西。...所以读取与写入文件就用到了指针,而这个指针是一个特殊的指针,我们称为文件指针。 指针名称是
  • Linux下用C语言实现文件写入

    万次阅读 2018-07-11 18:49:53
    C语言自带的文件写入机制是非常不错的选择我们可以通过一下代码来轻松完成文件写入C语言中对文件操作的标准库函数以下所示: 文件的打开操作 fopen 打开一个文件 文件的关闭操作 fclose 关闭一个文件 文件的...
  • C语言文件写入

    2021-04-21 17:45:48
    C语言文件写入 #include <stdio.h> void print(int *a,int len); typedef struct _table{ char name[12]; int num[12]; }table; int main(){ FILE* fp=fopen("textName.txt","r+"); if(fp==NULL){ ...
  • 作为一个新手学习C语言读写数据,我整合了一下自己查找的一些资料,用C语言实现将一个文件读入内存中,里面有运行工具,和一个word文档代码。
  • C语言实现写入日志文件 [cpp] view plaincopy #include #include #include #include #ifdef WIN32 #include #else #include // linux下头文件 #endif #define FILE_MAX_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,356
精华内容 942
关键字:

c语言写入文件

c语言 订阅