2005年07月11日
川俣晶の縁側ソフトウェア技術雑記total 2916 count

Borland C++ 5.5.1 for Win32において、パイプに対するfeof関数が機能しない問題

Written By: 川俣 晶連絡先

 Borland C++ 5.5.1 for Win32で標準Cライブラリを使用し、標準入力から入力するプログラムを作成した場合、パイプから入力させた場合のみ、入力の終わりがEOFではなく"Broken pipe"のエラーとして扱われるケースがあります。

 つまり、パイプ入力の最後でfeof関数が真を返すことが期待されているにもかかわらず、ferror関数が真を返し、feof関数は偽を返します。

 再現条件は、こちらの環境での結果ではありますが、Windows XP, Windows 2000 Workstationで再現することを確認しました。Windows 95, Windows 98SE, Windows MEでは正常にfeof関数が真になりました。

検証プログラム (feof.c) §

#include <stdio.h>

int main()

{

    for(;;)

    {

        int ch = getchar();

        if( feof(stdin) ) break;

        if( ferror(stdin) )

        {

            perror("ferror");

            break;

        }

        putchar(ch);

    }

    return 0;

}

検証実行 §

 上記ソースをbcc32 feof.cリターンとしてコンパイル後、コマンドプロンプトから以下のようなコマンドを入力します。(詳細は略)

dir|feof

 最後に以下のようなメッセージが表示された場合は、ferror関数が真を返しています。

ferror: Broken pipe

 なお、上記ソースコードを、Visuai Studio.NET 2003で、C++のWin32アプリケーションのプロジェクトでビルドして実行すると、この問題は発生しません。つまり、上記メッセージは表示されず、feof関数が真となります。

Facebook

キーワード【 川俣晶の縁側ソフトウェア技術雑記
【技術雑記】の次のコンテンツ
2005年
07月
25日
Managed C++で書かれたテストクラスをNUnitが発見できない問題の原因と解決
3days 0 count
total 2138 count
【技術雑記】の前のコンテンツ
2005年
07月
10日
ソフト冒険記・ソースにXML文書を書き込めるECMAScript for XML(E4X)をRhinoで使う
3days 0 count
total 3643 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20050711144109
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.34 (Alpha-Test) Copyright (c) 2004-2018 Pie Dey.Co.,Ltd.