Difference between revisions of "Dev random"

From Free Pascal wiki
Jump to navigationJump to search
(Categories: applies to FPC (rather than Lazarus); has example code, so adding it to tutorial makes sense)
(I know data is plural but it is often used as singular by CS guys ;))
Line 1: Line 1:
 
== Summary ==
 
== Summary ==
/dev/random and /dev/urandom are two Unix and *nix based devices that process memory, disc, network dumps from the kernel. This allows us to use a "random" like seed for performing "random" tasks with the "random" function.
+
<code>/dev/random</code> and <code>/dev/urandom</code> are two Unix and *nix based devices that process memory, disc, network dumps from the kernel. This allows us to use a "random" like seed for performing "random" tasks with the "random" function.
  
 
The difference between /dev/random and /dev/urandom is whether the device is "blocking" or "non blocking":
 
The difference between /dev/random and /dev/urandom is whether the device is "blocking" or "non blocking":
  
 
* While /dev/random gives random seeds, it will wait until it has something to give us, before returning the seed.  
 
* While /dev/random gives random seeds, it will wait until it has something to give us, before returning the seed.  
 +
* /dev/urandom does not stop us from when we do not have a new seed from dump, and will also return data that is less random. This way we will not need to wait until any type of activity will occur, but ''randomness is reduced''.
  
* /dev/urandom does not stop us from when we do not have a new seed from dump, and will return also data that are less random. This way we will not need to wait until any type of activity will occur, but randomness is reduced.
+
== Examples ==
 
 
== Coding ==
 
 
In order to make Free Pascal work with /dev/random and /dev/random we can write the following code:  
 
In order to make Free Pascal work with /dev/random and /dev/random we can write the following code:  
 
<syntaxhighlight>
 
<syntaxhighlight>
Line 28: Line 27:
  
 
== Explanation ==  
 
== Explanation ==  
Like everything else in *nix like OSes, everything is a file! So, we access urandom as a file and we read only one integer at a time.
+
Like almost everything else in *nix like OSes, everything is a file! So, we access urandom as a file and we read only one integer at a time.
  
 
Then, we place the data we made as RandSeed (the seed number that the function random uses). And that's it, we have a random seeder for "random" usage.
 
Then, we place the data we made as RandSeed (the seed number that the function random uses). And that's it, we have a random seeder for "random" usage.
 +
 +
== See also ==
 +
* [[doc:rtl/system/random.html|random]]
 +
* [[Generating Random Numbers]]
  
 
[[Category:Statistical algorithms]]
 
[[Category:Statistical algorithms]]

Revision as of 14:48, 5 May 2014

Summary

/dev/random and /dev/urandom are two Unix and *nix based devices that process memory, disc, network dumps from the kernel. This allows us to use a "random" like seed for performing "random" tasks with the "random" function.

The difference between /dev/random and /dev/urandom is whether the device is "blocking" or "non blocking":

  • While /dev/random gives random seeds, it will wait until it has something to give us, before returning the seed.
  • /dev/urandom does not stop us from when we do not have a new seed from dump, and will also return data that is less random. This way we will not need to wait until any type of activity will occur, but randomness is reduced.

Examples

In order to make Free Pascal work with /dev/random and /dev/random we can write the following code:

procedure RandomSeed;
var
  f : file of integer;
  i : integer;

begin
  i        := 0;
  filemode := 0;
  AssignFile(f, '/dev/urandom'); 
  reset (f,1);
  read (f,i);
  CloseFile (f);
  RandSeed := i;
end;

Explanation

Like almost everything else in *nix like OSes, everything is a file! So, we access urandom as a file and we read only one integer at a time.

Then, we place the data we made as RandSeed (the seed number that the function random uses). And that's it, we have a random seeder for "random" usage.

See also