[fpc-pascal] cannot read /sys/class/net/eth1/address even as root user on linux

Michael Van Canneyt michael at freepascal.org
Fri Jan 3 13:31:14 CET 2014



On Fri, 3 Jan 2014, Dennis Poon wrote:

>
>
> Michael Van Canneyt wrote:
>> 
>> 
>> On Thu, 5 Dec 2013, Dennis Poon wrote:
>> 
>>> I tried to read the mac address in the captioned file path.
>>> In terminal, I can simply 'cat' and display the mac address.
>>> 
>>> In FPC, when I tried to use TFileStream to read it,
>>>
>>>  FS := TFileStream.Create('/sys/class/net/eth1/address', 
>>> fmOpenRead+fmShareDenyWrite);
>>> 
>>> it raised "stream read error"

The problem is not there.

> {//strange, the following will raise stream read error
>        FS := TFilestream.Create(FileName, fmOpenRead+fmShareDenyWrite );
>        try
>          if FS.Size > 0 then begin
>            SetLength(s, FS.Size);
>            FS.ReadBuffer(s[1], FS.Size);

This is the source of your problem. 
ReadBuffer raises an error if LESS THAN FS.Size bytes have been read.

The size *reported* by the linux kernel is 4K, but actually read bytes is only 16 or so.

So, just change this line to
SetLength(S,FS.Read(s[1], FS.Size));

And all will be well. I tested.

Michael.



More information about the fpc-pascal mailing list