linux创建随机数并写文件处理

简介: 一、案例代码 /**************************************************************** * Name   : rondom_create_score.

一、案例代码


  1. /****************************************************************
  2. * Name   : rondom_create_score.c
  3. * Author : dyli2000
  4. * Date   : 20121031
  5. * Description :
  6. * This file show how to create a rondom data and
  7. * write it to a txt.And show the function application of
  8. * file operate.
  9. ****************************************************************/

  10. #include stdio.h>
  11. #include string.h>
  12. #include time.h>

  13. #define TIMES 20
  14. //#define DEBUG

  15. int main()
  16. {
  17.     FILE *fp;
  18.     int count = 0;
  19.     char string[200];
  20.     int k = 0;

  21.     memset(string,'0',200);
  22.     fp = fopen("test.txt","w+");
  23.     if(fp == NULL)
  24.         perror("fail!");

  25.     /* step1,call srand.It's return value is "void" */
  26.     srand((unsigned int)time(0));

  27.     for(;count TIMES; count++)
  28.     {
  29.         /* step2,call rand */
  30.         k = rand()%10;
  31.         #ifdef DEBUG
  32.         printf("----------------------------------\n");
  33.         #endif
  34.         sprintf(string,"Name %d ",k);
  35.         //fwrite(string,sizeof(char),strlen(string)+1,fp);
  36.         fwrite(string,sizeof(char),strlen(string),fp);
  37.         #ifdef DEBUG
  38.         printf("==================================\n");
  39.         #endif
  40.     }

  41.     /* seek to the endding of the file*/
  42.     fseek(fp,0L,SEEK_END);
  43.     /* count the file size */
  44.     int len_read = ftell(fp);
  45.     printf("len_read=%d\n",len_read);

  46.     /* seek to the beginning of the file */
  47.     rewind(fp); // => fseek(fp,0,SEEK_SET);

  48.     char read_buf[300];
  49.     memset(read_buf,0,300);
  50.     fread(read_buf,1,len_read,fp);
  51.     read_buf[len_read] = '\0'; // Very important
  52.     printf("%s\n",read_buf);
  53.     fclose(fp);

  54.     return 0;
  55. }


二、操作及运行效果


[root@localhost printTotxt]# vim test.txt

正常写入语句 fwrite(string,sizeof(char),strlen(string),fp);txt文件的显示效果。

image_thumb1


如果改为

fwrite(string,sizeof(char),strlen(string)+1,fp);

就会出现下面的图示,说明字符串的’\0’被写进了文本文件

image_thumb4


如果直接先操作

fread(read_buf,1,len_read,fp);

然后

printf("%s\n",read_buf);   

则只能输出第一个Name 3 ,因为读到第一个'\0'就断开了。

image_thumb6

 

故对于读写文件,上面代码的做法为合理的写法。主要步骤为:

(1)、fwrite(string,sizeof(char),strlen(string),fp); 写数据时不用写‘\0’到文本;

(2)、读的时候,读完后再加一个’\0’。如果不加,这样输出时才有可能出现乱码。

    fread(read_buf,1,len_read,fp);
    read_buf[len_read] = '\0';    // Very important
    printf("%s\n",read_buf);   

 

三、相关接口函数说明


1、linux调用系统函数产生随机数,需要将srand(),rand()两个函数合并使用。


srand(),返回值为void;rand(),返回值为随机数。

单独使用Rand(),每次返回的值都一样。必须先用srand(),用它的参数对随机数产生器进行初始化。常用技巧为使用时间做为随机数产生器的种seed,即srand(unsigned int)time(0))。

 

2、fopen,fwrite,fread,fseek,fclose等文件操作函数简介


 (1)、fp = fopen("test.txt","w+");  

//注意打开的方式 为w+而不是w,请分析原因。


r 以只读方式打开文件,该文件必须存在。

r+ 以可读写方式打开文件,该文件必须存在。

rb+ 读写打开一个二进制文件,允许读数据。

rw+ 读写打开一个文本文件,允许读和写。

 

w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。(注意,这个时候调用fread,是无法读出数据的)

w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。(注意,这个时候调用fread,是可以读出数据)

a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)

a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)

wb 只写打开或新建一个二进制文件;只允许写数据。

wb+ 读写打开或建立一个二进制文件,允许读和写。

ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。


(2)、fwrite(buf,sizeof(char),strlen(string),fp),将buf中的数据写到fp中

代码段:

sprintf(buf,"Name %d ",k);

fwrite(buf,sizeof(char),strlen(buf),fp)

buf             : 数据读出的缓冲区;

sizeof(char) :每个元素的大小;

count          : 要读多少个元素;


(3)、fread() 读数据;

fread(read_buf,1,len_read,fp);

将fp中的数据读出到read_buf中。

read_buf : 数据读入的缓冲区
1      : 实则 sizeof(char),读入的每个元素的大小;
len_read : 读入的数据的长度
          

(4)、rewind 和 fseek(fp,0L,SEEK_END)

  /* seek to the beginning of the file */ rewind(fp); // fseek(fp,0,SEEK_SET);


(5)、len_read = ftell(fp),获取文本的大小。



相关文章
|
6月前
|
Linux
Linux下获取一个UUID随机数
Linux下获取一个UUID随机数
35 0
|
Ubuntu Linux 网络安全
Linux Debian11服务器安装SSH,创建新用户并允许远程SSH远程登录,并禁止root用户远程SSH登录
本文介绍了Linux Debian11服务器安装SSH,创建新用户并允许远程SSH远程登录,并禁止root用户远程SSH登录。
2773 1
Linux Debian11服务器安装SSH,创建新用户并允许远程SSH远程登录,并禁止root用户远程SSH登录
|
4月前
|
存储 数据挖掘 Linux
Linux命令split详解:大文件处理的得力助手
`split`命令是Linux用于将大文件分割成小文件的工具,常用于日志处理、备份。它支持按行数(-l)、字节数(-b)分割,并能自定义输出文件名(-a, -d)。例如,`split -b 10M largefile.txt smallfile_`会按10MB切割`largefile.txt`,生成`smallfile_`开头的文件。注意确保磁盘空间充足,避免文件名冲突,并备份原始文件。结合其他命令使用,能提高文件管理效率。
|
4月前
|
Linux Perl
Linux中文件处理
Linux中文件处理
|
5月前
|
算法 安全 Linux
Linux命令mcookie:随机数生成的艺术
`mcookie`是Linux下的命令行工具,用于生成128位安全的随机十六进制数,常用于加密、身份验证等场景。它基于强大的随机数算法,保证数字的独特性和安全性。简单用法如直接输出或保存到文件,也可与其他命令结合,如生成随机文件名。使用时注意安全性,备份关键生成数,并根据需求结合其他工具使用。
|
5月前
|
算法 Linux 测试技术
Linux编程:测试-高效内存复制与随机数生成的性能
该文探讨了软件工程中的性能优化,重点关注内存复制和随机数生成。文章通过测试指出,`g_memmove`在内存复制中表现出显著优势,比简单for循环快约32倍。在随机数生成方面,`GRand`库在1000万次循环中的效率超过传统`rand()`。文中提供了测试代码和Makefile,建议在性能关键场景中使用`memcpy`、`g_memmove`以及高效的随机数生成库。
|
安全 JavaScript 前端开发
在Linux中生成随机数的各种方法
在计算机编程中,生成随机数是一项常见的任务,用于模拟实际情况、加密、游戏设计等。Linux系统提供了多种方法来生成随机数。本文将介绍Linux环境下生成随机数的几种常用方法,包括伪随机数生成器、/dev/random 和 /dev/urandom 设备、以及使用编程语言生成随机数。
873 3
|
6月前
|
关系型数据库 Linux Shell
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(文件处理指令-上)
在当今的数字化时代,Linux已成为服务器、云计算、物联网等众多领域的核心操作系统。对于技术从业者、开发者以及系统管理员来说,掌握Linux指令不仅是一项基本技能,更是打开专业领域大门的关键。
86 3
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(文件处理指令-上)
|
Linux 数据安全/隐私保护
Linux Debian11创建新用户和删除用户
Linux Debian11创建新用户和删除用户
4172 0
Linux Debian11创建新用户和删除用户
|
安全 Linux Shell
[Linux命令]九个常用的对文件处理的Linux 命令(文件查找、文件打包上传和下载、文件权限设置)
[Linux命令]九个常用的对文件处理的Linux 命令(文件查找、文件打包上传和下载、文件权限设置)
下一篇
无影云桌面