1

通常は正常にコンパイルされたアプリケーションがあります。これは、sleep() と daemon() という 2 つの「非標準」関数 (両方とも cstdlib に含まれています) を使用します。システムを更新すると、プログラムがコンパイルされなくなることがわかりました (私の古いシステムではまだコンパイルされます)。GCC から次のメッセージが表示されます。

error: 'daemon' was not declared in this scope
error: 'sleep' was not declared in this scope

過去に一度、sleep() で同じ問題が発生し、cstdlib を含めることで問題が解決したことを覚えています。cstdlib の変更ログが見つからず、関数がどこに移動されたのか (削除されていない場合) もわかりません。また、daemon() にも同じことが起こったと想定しています。これに関連するものはグーグルで見つかりません。

これらがどこに行ったのか、またはこの問題に再び遭遇した場合に備えて、将来どこで見つけることができるかを知っている人はいますか?

daemon() が物事を行うのが怠惰な方法であり、このプログラムを自分で (fork などを使用して) デーモン化する適切な方法を作成できることは知っていますが、それを使用すると非常に便利です。

4

2 に答える 2

8

C 標準ライブラリ (cstdlib) の一部sleepでもありません。で定義された POSIX.1-2001 関数であり、Linuxでも利用できる非 POSIX 関数です。daemonsleepunistd.hdaemonunistd.h

非標準関数として、の定義を取得する_GNU_SOURCE前に定義する必要がある場合があります。#include <unistd.h>daemon

于 2012-08-11T22:49:01.720 に答える
3

Linux の man ページには、多くの場合、ほとんどの機能に必要なヘッダー ファイルが含まれています。

man daemon

また

man 3 sleep

どちらもおそらくあなたが必要だと言っています#include <unistd.h>

于 2012-08-11T22:51:49.187 に答える