[saga-rg] Re: Meeting Notes: Messaging API

Andrei Hutanu ahutanu at cct.lsu.edu
Tue Nov 22 18:52:27 CST 2005


John Shalf wrote:

>
> On Nov 22, 2005, at 3:21 PM, Andre Merzky wrote:
>
>> Quoting [Andrei Hutanu] (Nov 22 2005):
>>
>>> Andre,
>>>
>>> Thanks for the notes!
>>>
>>>>
>>>> - read: two step mechanism:
>>>>   (int   handle, int size) = query_size ();
>>>>   (char* buffer)           = read (handle, size);
>>>>
>>>>   - handle can be zero, if size is known (one step read)
>>>>   - buffer needs to be allocated by application.
>>>>   - if size is zero, the buffer is allocated by the
>>>>     implementation and returned to be freed by the
>>>>     application (one step read)
>>>>
>>>>
>>> This part is a bit confusing .. with the one step read you lose the
>>> length of the message?
>>> it should probably be  (char* buffer, int size) = read () for the one
>>> step read ..Or am I reading it wrong..
>>
>>
>> No, you are probably right.  IIRC, we pinned down two
>> different semantics for one step read:
>>
>>  a) size is known, malloc by application
>>     (buffer) = read (handle = NULL, size);
>
>
> The read should be like POSIX and return the buffer size rather than  
> the buffer itself.
>
>>  b) size unknown, malloc by implementation
>>     (buffer, size) = read ();
>
>
> Wait, I think Andre had it correct.  There is also a
>     c) size unknown, but buffer is presized to what the application  
> programmer expects to the the max message size.  Under this  
> circumstance, you can do a single step read which returns the  
> *actual* size of the read.  If the message was larger than the buffer  
> size declared in the read(), then the read will be truncated and the  
> truncated message data will be dropped.
>     int read(handle, buffer, size)
>     buffer is presumed to be "size" bytes in length.  Read returns 
> the  actual message size.  If message is larger than buffer size, 
> then  truncated data is dropped.

Isn't this the same as a? I see only two cases :
a) user knows something (max expected size or actual size) - int 
read(buffer, size) described above
b) user doesn't know anything - (buffer, size) = read ();
I'm probably missing something obvious ..

Andrei





More information about the saga-rg mailing list