2017-07-11 13 views
0

Kernighan and Ritchieの著書「The C Programming Language、2nd Edition」に示されているストレージアロケータプログラムを理解しようとしています。私はほとんどを理解したと思うが、プログラムをコード化するときWindows 8.1 x86_64 with TDM GCC version 5.1.0。エラーundefined reference to 'sbrk'を出力します。これらは私の含まれています:Kernighan&RitchieのStorage Allocator実装プログラムのTDM-GCC - sbrk()への未定義参照

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/types.h> 
#include <unistd.h> 

私は非常に多くを検索しましたが、他の答えは私を助けたことはありません。それはunistd.hの中にあるはずですが、そうではありません。それはシステムコールなのでWindowsでは見つからないからですか?なにが問題ですか?

+0

K&Rは、ほとんどのUNIX、 'sbrk'に基づいていますUnixシステムコールです。私は 'unistd.h 'もUnixだけのものだと思っていました。リンクする前にコードをコンパイルしましたか? – dlmeetei

+0

はい、コンパイルしました。私はいろいろなものを固定しましたが(私は新しいコードを追加しませんでした)、コンパイルします。 –

答えて

2

はい、sbrkはunixシステムコールです。 Windowsでは利用できません。

(サイドノート:。自体は内部ヘッダない機能、ヘッダは、一般的にのみ宣言を含む実際の機能は、いくつかのライブラリー(この場合のlibc)である)

+0

彼の本の他のプログラムは、 'open'、' read'、 'write'などのシステムコールを使用します。これらは私のWinシステム上で動作します。しかし、Windowsには同じ名前のものがあるからだと思いますが、そうですか? –

+0

@ RestlessC0braはい、そうです。例えば、ウィンドウ上の 'open'機能についてはhttps://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/openを参照してください。 – melpomene

+0

私はこの本でK&R mallocの実装を覚えているので(おそらくそれは後で変更されました)、malloc関数を書く良い例ではありませんでした。少なくともそれは完全であったか、または私たちが今や悪いプログラミングの練習として考えている(多くのリターンなど)。だから、おそらくこの例をスキップするか、代わりに現代的な実装を見てみる必要があります:) –

関連する問題