473,509 Members | 3,543 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Strange I/O error

I was testing the buffer size of system call, read(), and found a
strange error on Ubuntu 7.10 server. The code is attached.

If the BUFFSIZE is set to from 128 to 255, the code will produce an error as

read error: Success

If the if statement (and the perror) is removed, the error disappears.

I have tried the same program on Sun Solaris 5.10 and got the same results.

The program read from the standard input and write to standard output.
Use any large file as the input redirected to standard input and dump
the output to null.

How to test:

../a.out < AnySufficientLargeFile >/dev/null

----------------------------------------

#include <stdio.h>
#include <unistd.h>

#define BUFFSIZE 128

int main(void)
{
char n;
char buf[BUFFSIZE];

while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) 0)
if (write(STDOUT_FILENO, buf, n) != n)
perror("write error");

if (n < 0)
perror("read error");
return 0;
}
-----------------------------------------
Jun 27 '08 #1
9 1377
Larry said:
I was testing the buffer size of system call, read(), and found a
strange error on Ubuntu 7.10 server. The code is attached.
Check the return type of read() - I think you'll find that it's not char,
and that fixing it to be the right type will fix your problem.

<snip>

--
Richard Heathfield <http://www.cpax.org.uk>
Email: -http://www. +rjh@
Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
"Usenet is a strange place" - dmr 29 July 1999
Jun 27 '08 #2

"Larry" <la*******@hotmail.comwrote in message
news:ft**********@aioe.org...
>I was testing the buffer size of system call, read(), and found a strange
error on Ubuntu 7.10 server. The code is attached.

If the BUFFSIZE is set to from 128 to 255, the code will produce an error
as

read error: Success

If the if statement (and the perror) is removed, the error disappears.
Naturally..

char n;
....
if (n < 0)
perror("read error");
return 0;
}
As RH has said, the char n is the problem.

But for this code, n needs to be unsigned, in which case the 'if (n<0)'
should be a compilation error. And if n is signed, it's maximum range seems
to be 127.

--
Bart
Jun 27 '08 #3
On Sun, 13 Apr 2008 10:21:48 +0000, Bartc wrote:
But for this code, n needs to be unsigned, in which case the 'if (n<0)'
should be a compilation error.
Huh? If n is unsigned, it will never be less than zero, but why would
checking that anyway result is a compilation error? What if you're
dealing with a typedef that may be signed or unsigned, depending on the
system, and you want to check that a value is in the range of [0 .. 10]?
It shouldn't be and isn't an error to check
if (n < 0 || n 10) /* handle error */

(This thread was posted to comp.os.linux, but according to my ISP, it
doesn't exist. Newsgroups set to comp.lang.c only.)
Jun 27 '08 #4

"Harald van D?k" <tr*****@gmail.comwrote in message
news:38**************************@cache4.tilbu1.nb .home.nl...
On Sun, 13 Apr 2008 10:21:48 +0000, Bartc wrote:
>But for this code, n needs to be unsigned, in which case the 'if (n<0)'
should be a compilation error.

Huh? If n is unsigned, it will never be less than zero, but why would
checking that anyway result is a compilation error?
gcc produces this message:

c:\c>gcc c.c
c.c: In function `main':
c.c:8: warning: comparison is always false due to limited range of data type

Well, OK, it's a warning not an error.

--
Bart
Jun 27 '08 #5
Harald van D?k wrote:
>
.... snip ...
>
(This thread was posted to comp.os.linux, but according to my ISP,
it doesn't exist. Newsgroups set to comp.lang.c only.)
Your ISP is wrong. It probably simply means it doesn't subscribe
to that newsgroup, which is ridiculous, since c.o.l is a principal
group.

--
[mail]: Chuck F (cbfalconer at maineline dot net)
[page]: <http://cbfalconer.home.att.net>
Try the download section.
** Posted from http://www.teranews.com **
Jun 27 '08 #6
On Sun, 13 Apr 2008 11:26:26 -0400, CBFalconer wrote:
Harald van D?k wrote:
>>
... snip ...
>>
(This thread was posted to comp.os.linux, but according to my ISP, it
doesn't exist. Newsgroups set to comp.lang.c only.)

Your ISP is wrong. It probably simply means it doesn't subscribe to
that newsgroup, which is ridiculous, since c.o.l is a principal group.
Are you sure about that? I can access c.o.l.* without problems, but
that's not what this thread was posted to. According to the archives on
Google Groups, there hasn't been any message to c.o.l itself since 2005
either.

Newsgroups reset again, since I can't post otherwise.
Jun 27 '08 #7
Bartc wrote:
"Larry" <la*******@hotmail.comwrote in message
news:ft**********@aioe.org...
>>I was testing the buffer size of system call, read(), and found a strange
error on Ubuntu 7.10 server. The code is attached.

If the BUFFSIZE is set to from 128 to 255, the code will produce an error
as

read error: Success

If the if statement (and the perror) is removed, the error disappears.
Which error? The [apparently] erroneous statement printed, or the error in
your code. Without the 'if()' statment, your code error is still there
(just not so obvious, but could bite you later and you'd be pulling your
hair out trying to track it down - follow RH's advice).

....
>>char n;
...
>>if (n < 0)
perror("read error");
return 0;
}

As RH has said, the char n is the problem.
Not in the if() statement per se (that would depend upon the compiler - see
below).
But for this code, n needs to be unsigned,
Really? My impression is that for that code it /needs/ to be signed.
in which case the 'if (n<0)'
should be a compilation error. And if n is signed, it's maximum range seems
to be 127.
Possibly, depending upon compile options; most compilers I've used will
usually attempt some auto-cast, guessing what the programmer intended.

And then again, the error may, or may not, appear depending upon what the
compiler defines for a 'char'.

Jun 27 '08 #8

"Robert Newson" <Re*******@bullet3.fsnet.oc.kuwrote in message
news:48**************@bullet3.fsnet.oc.ku...
Bartc wrote:
>"Larry" <la*******@hotmail.comwrote in message
news:ft**********@aioe.org...
>>>I was testing the buffer size of system call, read(), and found a strange
error on Ubuntu 7.10 server. The code is attached.

If the BUFFSIZE is set to from 128 to 255, the code will produce an error
as

read error: Success

If the if statement (and the perror) is removed, the error disappears.

Which error? The [apparently] erroneous statement printed, or the error
in your code. Without the 'if()' statment, your code error is still there
(just not so obvious, but could bite you later and you'd be pulling your
hair out trying to track it down - follow RH's advice).

...
>>>char n;
...
>>>if (n < 0)
perror("read error");
return 0;
}

As RH has said, the char n is the problem.

Not in the if() statement per se (that would depend upon the compiler -
see below).
>But for this code, n needs to be unsigned,

Really? My impression is that for that code it /needs/ to be signed.
Well, if the OP had a pressing reason for using a char type for n, then it
needed to be unsigned to accommodate buffer sizes of 128 to 255. In this
case perhaps the erroneous negative values possibly would be eliminated.

But if those read/write functions could return negative statuses, then
you're right, the OP needs to move up to a wider, signed type.

--
Bart
Jun 27 '08 #9
Harald van D?k wrote:
CBFalconer wrote:
>Harald van D?k wrote:
>>>
... snip ...
>>>
(This thread was posted to comp.os.linux, but according to my
ISP, it doesn't exist. Newsgroups set to comp.lang.c only.)

Your ISP is wrong. It probably simply means it doesn't
subscribe to that newsgroup, which is ridiculous, since c.o.l is
a principal group.

Are you sure about that? I can access c.o.l.* without problems,
but that's not what this thread was posted to. According to the
archives on Google Groups, there hasn't been any message to c.o.l
itself since 2005 either.

Newsgroups reset again, since I can't post otherwise.
That (no messages) may well be true, since it seems to be an outer
'containment' group, with about 20 subgroups. My ISP doesn't
complain about the cross-post, but may simply delete it. I know
that posting to non-existent groups produces violent annoyance
messages here.

--
[mail]: Chuck F (cbfalconer at maineline dot net)
[page]: <http://cbfalconer.home.att.net>
Try the download section.
** Posted from http://www.teranews.com **
Jun 27 '08 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

2
8909
by: Olaf | last post by:
I have a frameset page witch contains the myFuc() function. The function is accessed from a page in one of the frames in the frameset. An example is shown below. <input...
25
3696
by: Neil Ginsberg | last post by:
I have a strange situation with my Access 2000 database. I have code in the database which has worked fine for years, and now all of a sudden doesn't work fine on one or two of my client's...
0
328
by: Kris Vanherck | last post by:
yesterday i started getting this strange error when i try to run my asp.net project: Compiler Error Message: CS0006: Metadata file 'c:\winnt\microsoft.net\framework\v1.1.4322\temporary asp.net...
6
1686
by: Gary | last post by:
I have an application that has been working just fine for a couple of years. It queries a SQL database and returns some formatted data back to the client. I have a new client, who has a larger...
5
1724
by: Nathan Sokalski | last post by:
When I view my index.aspx page any time after the first time, I recieve the following error: System.Web.TraceContext.AddNewControl(String id, String parentId, String type, Int32 viewStateSize)...
0
3556
by: ivb | last post by:
Hi all, I am using DB2 8.1.11.1 on NT with ASP.NET 1.1 When application make connection to database (via ADO.NET), it set "Connection timeout" parameter to 30 seconds. After, when my webpage...
11
2568
by: Martin Joergensen | last post by:
Hi, I've encountered a really, *really*, REALLY strange error :-) I have a for-loop and after 8 runs I get strange results...... I mean: A really strange result.... I'm calculating...
1
1533
by: JoReiners | last post by:
Hello, I have a really strange problem. I'm unable to figure it out on my own. I parse very simple xml documents, without any check for their form. These files look very similar and are encoded...
11
2462
by: Mike C# | last post by:
Hi all, I keep getting a strange error and can't pin it down. The message is: This application has requested the Runtime to terminate it in an unusual way. Please contact the application's...
3
1812
by: Shelly | last post by:
I am encountering two strange problems. First one: I get a "server misconfiguration error", but only sometimes. It occurs on the first screen that accesses the database on a submit. This error...
0
7416
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
1
7073
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
7506
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
1
5062
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
4732
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
0
3218
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The...
0
1571
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...
1
779
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
0
443
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.