|
Boost Users : |
Subject: [Boost-users] [interprocess] garbage chars when extending interprocess strings?
From: Anthony Foiani (tkil_at_[hidden])
Date: 2011-07-31 02:39:52
I'm having a peculiar problem with interprocess strings.
0. Create the shared string type.
typedef boost::interprocess::managed_shared_memory ShmManagerType;
typedef char ShmCharType;
typedef boost::interprocess::allocator<
ShmCharType,
ShmManagerType::segment_manager
> ShmCharAllocatorType;
typedef boost::interprocess::basic_string<
ShmCharType,
std::char_traits< ShmCharType >,
ShmCharAllocatorType
> ShmStringType;
1. Initial write succeeds.
ShmStringType val;
val = "x";
cout << quoteString( x ) << endl; // prints "x" as expected
2. When I overwrite the value with a longer value, the longer value is
stored and the length is updated -- but a null character (\0) is
inserted at the *old* length.
ShmStringType x3( "xxx" );
val = x3;
cout << quoteString( val ) << endl; // prints "x\0x" !!!
3. When I write the longer value again, it is stored correctly and
there is no \0 in the middle of the string.
val = x3;
cout << quoteString( val ) << endl; // prints "xxx" as expected
4. The same thing happens if we try a longer value again:
ShmStringType x5( "xxxxx" );
val = x5;
cout << quoteString( val ) << endl; // prints "xxx\0x"
val = x5
cout << quoteString( val ) << endl; // prints "xxxxx"
Does this ring bells for anyone?
On my embedded platform, I'm using:
powerpc e300c3
Linux 2.6.36
eglibc 2.13
boost 1_44_0
g++ 4.5.1
And on my development workstation:
intel x86-64
Linux 2.6.35.13-92.fc14
glibc 2.13-1
boost 1.44.0-8.fc14
gcc 4.5.1-4.fc14
Testing this on my development workstation, I see similar issues
(although it's not always \0; in this case, I'm getting \xC0 junk
characters. Odd!)
Test case at:
http://foiani.com/cpp/boost/InterProcStringTest.cpp
Sample output:
http://foiani.com/cpp/boost/ipst-out-ppc32.txt
http://foiani.com/cpp/boost/ipst-out-x86_64.txt
The output isn't the same: some cases work on one platform but not the
other, and the garbage character introduced isn't always \0.
Any ideas would be welcome.
Testing with a more current boost is a bit problematic; if someone
believes that it's been fixed in the mean time, I'll do my best to try
with a modern boost.
In the mean time, I'll just write the values twice, I guess. :)
Thanks for your time and attention!
Best regards,
Tony
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net