win32-mmap 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +7 -0
- data/MANIFEST +4 -5
- data/README +10 -10
- data/Rakefile +12 -2
- data/examples/example_mmap_client.rb +20 -0
- data/examples/example_mmap_file.rb +25 -0
- data/examples/example_mmap_server.rb +20 -0
- data/lib/win32/mmap.rb +11 -5
- data/test/{tc_mmap.rb → test_win32_mmap.rb} +3 -3
- data/win32-mmap.gemspec +23 -20
- metadata +59 -52
data/CHANGES
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
== 0.2.3 - 12-Aug-2009
|
2
|
+
* Changed license to Artistic 2.0.
|
3
|
+
* The MMap.open method now properly handles a block.
|
4
|
+
* Some gemspec updates, including the license and description.
|
5
|
+
* Changed test and example file names.
|
6
|
+
* Some Rakefile updates, including tasks for running example programs.
|
7
|
+
|
1
8
|
== 0.2.2 - 16-May-2007
|
2
9
|
* Fixed a bug where marshalled data that happened to end with a "\0" would
|
3
10
|
cause the getter to fail.
|
data/MANIFEST
CHANGED
@@ -3,9 +3,8 @@
|
|
3
3
|
* README
|
4
4
|
* Rakefile
|
5
5
|
* win32-mmap.gemspec
|
6
|
-
*
|
7
|
-
* examples/
|
8
|
-
* examples/
|
9
|
-
* examples/test_server.rb
|
6
|
+
* examples/example_mmap.rb
|
7
|
+
* examples/example_mmap_client.rb
|
8
|
+
* examples/example_mmap_server.rb
|
10
9
|
* lib/win32/mmap.rb
|
11
|
-
* test/
|
10
|
+
* test/test_win32_mmap.rb
|
data/README
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
This package provides a Ruby interface for memory mapped I/O on MS Windows.
|
3
3
|
|
4
4
|
= Prerequisites
|
5
|
-
Ruby 1.8.
|
5
|
+
Ruby 1.8.2 or later.
|
6
6
|
windows-pr, 0.5.5 or later.
|
7
7
|
|
8
8
|
= Installation
|
@@ -30,15 +30,15 @@
|
|
30
30
|
|
31
31
|
= About Memory Mapped Files under Windows
|
32
32
|
Under Windows, code and data are both repesented by pages of memory backed
|
33
|
-
by files on disk
|
34
|
-
(swapfile). These are called memory mapped files. Memory mapped files
|
35
|
-
used to provide a mechanism for shared memory between processes.
|
36
|
-
processes are able to share data backed by the same swapfile,
|
37
|
-
the system pagefile or a user-defined swapfile.
|
33
|
+
by files on disk, code by executable image and data by system pagefile
|
34
|
+
(i.e. swapfile). These are called memory mapped files. Memory mapped files
|
35
|
+
can be used to provide a mechanism for shared memory between processes.
|
36
|
+
Different processes are able to share data backed by the same swapfile,
|
37
|
+
whether it's the system pagefile or a user-defined swapfile.
|
38
38
|
|
39
39
|
Windows has a tight security system that prevents processes from directly
|
40
40
|
sharing information among each other, but mapped memory files provide a
|
41
|
-
mechanism that works with the Windows security system
|
41
|
+
mechanism that works with the Windows security system by using a name that
|
42
42
|
all processes use to open the swapfile.
|
43
43
|
|
44
44
|
A shared section of the swapfile is translated into pages of memory that are
|
@@ -47,7 +47,7 @@
|
|
47
47
|
the same physical page of memory, thus multiple process can share the same
|
48
48
|
data without violating the Windows system security.
|
49
49
|
|
50
|
-
In short,
|
50
|
+
In short, memory mapped files provide shared memory under Windows.
|
51
51
|
|
52
52
|
(This explanation was largely borrowed from Roger Lee's Win32::MMF Perl
|
53
53
|
module.)
|
@@ -56,10 +56,10 @@
|
|
56
56
|
Suggestions welcome.
|
57
57
|
|
58
58
|
= License
|
59
|
-
|
59
|
+
Artistic 2.0
|
60
60
|
|
61
61
|
= Copyright
|
62
|
-
(C) 2003-
|
62
|
+
(C) 2003-2009 Daniel J. Berger, All Rights Reserved
|
63
63
|
|
64
64
|
= Warranty
|
65
65
|
This package is provided "as is" and without any express or
|
data/Rakefile
CHANGED
@@ -13,9 +13,19 @@ task :install do
|
|
13
13
|
FileUtils.cp(file, installdir, :verbose => true)
|
14
14
|
end
|
15
15
|
|
16
|
+
desc 'Run the example mmap file program'
|
17
|
+
task :example_file do
|
18
|
+
ruby '-Ilib examples/example_mmap_file.rb'
|
19
|
+
|
20
|
+
desc 'Run the example mmap server'
|
21
|
+
task :example_server do
|
22
|
+
ruby '-Ilib examples/example_mmap_server.rb'
|
23
|
+
|
24
|
+
desc 'Run the example mmap client'
|
25
|
+
task :example_client do
|
26
|
+
ruby '-Ilib examples/example_mmap_client.rb'
|
27
|
+
|
16
28
|
Rake::TestTask.new do |t|
|
17
|
-
t.libs << 'test'
|
18
29
|
t.verbose = true
|
19
30
|
t.warning = true
|
20
|
-
t.test_files = FileList['test/tc_mmap.rb']
|
21
31
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#######################################################################
|
2
|
+
# example_mmap_client.rb
|
3
|
+
#
|
4
|
+
# This program demonstrates a simple mmap client. You should run this
|
5
|
+
# program *after* you have run the example server program in a
|
6
|
+
# separate terminal.
|
7
|
+
#
|
8
|
+
# You can run this program via the 'rake example_client' task.
|
9
|
+
#
|
10
|
+
# Modify this program as you see fit.
|
11
|
+
#######################################################################
|
12
|
+
require 'win32/mmap'
|
13
|
+
include Win32
|
14
|
+
|
15
|
+
mmap = MMap.open('alpha')
|
16
|
+
|
17
|
+
p mmap.foo
|
18
|
+
p mmap.bar
|
19
|
+
|
20
|
+
mmap.close
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#######################################################################
|
2
|
+
# example_mmap_file.rb
|
3
|
+
#
|
4
|
+
# This sample script demonstrates creating a memory mapped file, then
|
5
|
+
# later reading from it. You can run this example via the
|
6
|
+
# 'rake example_file' task.
|
7
|
+
#
|
8
|
+
# Modify this program as you see fit.
|
9
|
+
#######################################################################
|
10
|
+
require 'win32/mmap'
|
11
|
+
include Win32
|
12
|
+
|
13
|
+
map1 = MMap.new(:file => "C:\\mmap.test", :size => 1024)
|
14
|
+
|
15
|
+
map1.foo = 'hello'
|
16
|
+
map1.bar = 77
|
17
|
+
|
18
|
+
map1.close
|
19
|
+
|
20
|
+
map2 = MMap.new(:file => "C:\\mmap.test")
|
21
|
+
|
22
|
+
p map2.foo
|
23
|
+
p map2.bar
|
24
|
+
|
25
|
+
map2.close
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#######################################################################
|
2
|
+
# example_mmap_server.rb
|
3
|
+
#
|
4
|
+
# A test script for general futzing. Run this in its own terminal
|
5
|
+
# then run the example_mmap_client.rb program in a separate terminal.
|
6
|
+
# You can run this program via the 'rake example_server' task.
|
7
|
+
#
|
8
|
+
# Modify as you see fit.
|
9
|
+
#######################################################################
|
10
|
+
require 'win32/mmap'
|
11
|
+
include Win32
|
12
|
+
|
13
|
+
mmap = MMap.new(:name => 'alpha', :size => 2000)
|
14
|
+
|
15
|
+
mmap.foo = 'hello'
|
16
|
+
mmap.bar = 27
|
17
|
+
|
18
|
+
sleep 100
|
19
|
+
|
20
|
+
mmap.close
|
data/lib/win32/mmap.rb
CHANGED
@@ -6,14 +6,18 @@ require 'windows/msvcrt/buffer'
|
|
6
6
|
require 'windows/synchronize'
|
7
7
|
require 'windows/memory'
|
8
8
|
|
9
|
+
# The Win32 module serves as a namespace only.
|
10
|
+
#
|
9
11
|
module Win32
|
10
12
|
|
11
|
-
#
|
13
|
+
# The MMap class encapsulates functions for memory mapped files.
|
12
14
|
#
|
13
15
|
class MMap
|
14
|
-
|
16
|
+
|
17
|
+
# The version of the win32-mmap library.
|
18
|
+
VERSION = '0.2.3'
|
15
19
|
|
16
|
-
#
|
20
|
+
# Error typically raised in any method of Win32::MMap should fail.
|
17
21
|
#
|
18
22
|
class Error < StandardError; end
|
19
23
|
|
@@ -242,10 +246,10 @@ module Win32
|
|
242
246
|
#--
|
243
247
|
# This forces MMap.new to use OpenFileMapping() behind the scenes.
|
244
248
|
#
|
245
|
-
def self.open(name, opts={})
|
249
|
+
def self.open(name, opts={}, &block)
|
246
250
|
opts[:name] = name
|
247
251
|
opts[:open] = true
|
248
|
-
self.new(opts)
|
252
|
+
self.new(opts, &block)
|
249
253
|
end
|
250
254
|
|
251
255
|
# Sets whether or not the mapping handle can be inherited
|
@@ -300,6 +304,8 @@ module Win32
|
|
300
304
|
end
|
301
305
|
|
302
306
|
private
|
307
|
+
|
308
|
+
# :stopdoc:
|
303
309
|
|
304
310
|
# This is used to allow dynamic getters and setters between memory
|
305
311
|
# mapped objects.
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#####################################################################
|
2
|
-
#
|
2
|
+
# test_win32_mmap.rb
|
3
3
|
#
|
4
4
|
# Test suite for the win32-mmap package. This should be run via the
|
5
5
|
# 'rake test' task.
|
@@ -8,13 +8,13 @@ require 'test/unit'
|
|
8
8
|
require 'win32/mmap'
|
9
9
|
include Win32
|
10
10
|
|
11
|
-
class
|
11
|
+
class TC_Win32_Mmap < Test::Unit::TestCase
|
12
12
|
def setup
|
13
13
|
@mmap = MMap.new(:name => 'test', :size => 100)
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_version
|
17
|
-
assert_equal('0.2.
|
17
|
+
assert_equal('0.2.3', MMap::VERSION)
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_dynamic_string_value
|
data/win32-mmap.gemspec
CHANGED
@@ -1,24 +1,27 @@
|
|
1
|
-
require
|
1
|
+
require 'rubygems'
|
2
2
|
|
3
3
|
spec = Gem::Specification.new do |gem|
|
4
|
-
gem.name
|
5
|
-
gem.version
|
6
|
-
gem.author
|
7
|
-
gem.
|
8
|
-
gem.
|
9
|
-
gem.
|
10
|
-
gem.
|
11
|
-
gem.
|
12
|
-
gem.test_file
|
13
|
-
gem.has_rdoc
|
14
|
-
gem.files
|
15
|
-
|
16
|
-
gem.
|
17
|
-
gem.extra_rdoc_files
|
18
|
-
gem.add_dependency("windows-pr", ">= 0.5.6")
|
19
|
-
end
|
4
|
+
gem.name = 'win32-mmap'
|
5
|
+
gem.version = '0.2.3'
|
6
|
+
gem.author = 'Daniel J. Berger'
|
7
|
+
gem.license = 'Artistic 2.0'
|
8
|
+
gem.email = 'djberg96@gmail.com'
|
9
|
+
gem.homepage = 'http://www.rubyforge.org/projects/win32utils'
|
10
|
+
gem.platform = Gem::Platform::RUBY
|
11
|
+
gem.summary = 'Memory mapped IO for Windows.'
|
12
|
+
gem.test_file = 'test/test_win32_mmap.rb'
|
13
|
+
gem.has_rdoc = true
|
14
|
+
gem.files = Dir['**/*'].reject{ |f| f.include?('CVS') }
|
15
|
+
|
16
|
+
gem.rubyforge_project = 'win32utils'
|
17
|
+
gem.extra_rdoc_files = ['MANIFEST', 'README', 'CHANGES']
|
20
18
|
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
gem.add_dependency('windows-pr')
|
20
|
+
|
21
|
+
gem.description = <<-EOF
|
22
|
+
The win32-mmap library provides an interface for memory mapped IO on
|
23
|
+
MS Windows.
|
24
|
+
EOF
|
24
25
|
end
|
26
|
+
|
27
|
+
Gem::Builder.new(spec).build
|
metadata
CHANGED
@@ -1,68 +1,75 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.3
|
3
|
-
specification_version: 1
|
4
2
|
name: win32-mmap
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.
|
7
|
-
date: 2007-05-16 00:00:00 -06:00
|
8
|
-
summary: Memory mapped IO for Windows.
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: djberg96@gmail.com
|
12
|
-
homepage: http://www.rubyforge.org/projects/win32utils
|
13
|
-
rubyforge_project:
|
14
|
-
description: Memory mapped IO for Windows.
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.2.3
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Daniel J. Berger
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-08-12 00:00:00 -06:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: windows-pr
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
description: " The win32-mmap library provides an interface for memory mapped IO on\n MS Windows.\n"
|
26
|
+
email: djberg96@gmail.com
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- MANIFEST
|
33
|
+
- README
|
34
|
+
- CHANGES
|
31
35
|
files:
|
32
|
-
- lib/win32/mmap.rb
|
33
|
-
- test/CVS
|
34
|
-
- test/tc_mmap.rb
|
35
36
|
- CHANGES
|
36
|
-
-
|
37
|
-
-
|
38
|
-
- examples
|
39
|
-
- lib
|
37
|
+
- examples/example_mmap_client.rb
|
38
|
+
- examples/example_mmap_file.rb
|
39
|
+
- examples/example_mmap_server.rb
|
40
|
+
- lib/win32/mmap.rb
|
40
41
|
- MANIFEST
|
41
42
|
- Rakefile
|
42
43
|
- README
|
43
|
-
- test
|
44
|
+
- test/test_win32_mmap.rb
|
44
45
|
- win32-mmap.gemspec
|
45
|
-
|
46
|
-
|
46
|
+
has_rdoc: true
|
47
|
+
homepage: http://www.rubyforge.org/projects/win32utils
|
48
|
+
licenses:
|
49
|
+
- Artistic 2.0
|
50
|
+
post_install_message:
|
47
51
|
rdoc_options: []
|
48
52
|
|
49
|
-
|
50
|
-
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
53
|
+
require_paths:
|
54
|
+
- lib
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: "0"
|
60
|
+
version:
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: "0"
|
66
|
+
version:
|
57
67
|
requirements: []
|
58
68
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: 0.5.6
|
68
|
-
version:
|
69
|
+
rubyforge_project: win32utils
|
70
|
+
rubygems_version: 1.3.5
|
71
|
+
signing_key:
|
72
|
+
specification_version: 3
|
73
|
+
summary: Memory mapped IO for Windows.
|
74
|
+
test_files:
|
75
|
+
- test/test_win32_mmap.rb
|