プロが教える店舗&オフィスのセキュリティ対策術

Solaris2.6の環境です。
C++プログラム初学者です。

% uname -a
SunOS ultra 5.6 Generic_105181-23 sun4m sparc SUNW,SPARCstation-5

C++プログラムの学習中にC++のリストをmake使用とすると

% cd ~/test

% make
g++ -c -o timer.o timer.cc
cpp0: /var/tmp/cczy3NgV.ii: デバイス上の空き領域が足りません。
make: *** [timer.o] Error 1

というエラーが出てしまい、困っています。

% ls -l /var/tmp
合計 2086
-rw------- 1 matsui master 0 3月 13日 21:19 Ex0000001239
-rw------- 1 root root 821304 3月 14日 22:20 wsconAAA7eaqNa:0.0
-rw------- 1 root root 35659 2月 8日 19:05 wsconAAAP0aaNa:0.0
-rw------- 1 matsui master 0 1月 27日 17:44 wsconAAAXlaitb:0.0
-rw------- 1 root root 187687 2月 7日 19:31 wsconAAAxBaWxc:0.0

% df -k
Filesystem Kバイト used avail capacity Mounted on
/dev/dsk/c0t3d0s0 57567 21273 30538 42% /
/dev/dsk/c0t3d0s6 694454 497069 141829 78% /usr
/proc 0 0 0 0% /proc
fd 0 0 0 0% /dev/fd
/dev/dsk/c0t3d0s1 47975 44685 0 100% /var
/dev/dsk/c0t3d0s7 38383 14633 19912 43% /workl
swap 137384 16 137368 1% /tmp
lucas:/usr/local 1687016 824880 811528 51% /usr/local
lucas:/home 14110472 3550904 10418464 26% /home
lucas:/workn 57384 31880 19768 62% /workn

となっているのですがこれはどうすれば解決できるのでしょうか?

A 回答 (3件)

根本的な解決はNo.1で回答されている方のいう通りdisk full(空き領域なし)になっている/varの不要ファイルを削除して領域を空ける事ですが、そもそも/varの容量自体少ないようですから、こまめにチェックしてdisk fullが出ないようにしないといけないですよ。


/var配下のディレクトリに各種プログラムのログが出力されるでしょうからなおさらです。

また、今回は、

>コンパイル時には/var/tmp下に一時ファイルが生成されるのですね。
>この一時ファイルが生成できないと実行ファイルが生成できなくなってしまうのですね。

という不具合だけで済んでいるかもしれませんが、他に不具合が出てくる可能性も否めません。

あと、g++(C++)コンパイラの一時ファイルの作成先は、環境変数TMPDIRを設定する事によって/var/tmp以外にする事が可能です(一時的な回避策)。

この回答への補足

ご回答ありがとうございます。
遅くなりましてスイマセン。

> 根本的な解決はNo.1で回答されている方のいう通りdisk full(空き領域なし)になっ
> ている/varの不要ファイルを削除して領域を空ける事ですが、そもそも/varの容量自
> 体少ないようですから、こまめにチェックしてdisk fullが出ないようにしないとい
> けないですよ。
ご忠告感謝致します。気をつけたいと思います。

> /var配下のディレクトリに各種プログラムのログが出力されるでしょうからなおさら
> です。
% df -k | grep var
/dev/dsk/c0t3d0s1 47975 16655 26523 39% /var

でエラー「cpp0: /var/tmp/cczy3NgV.ii: デバイス上の空き領域が足りません。
ake: *** [timer.o] Error 1」
は解消されました。\(^o^)/

> という不具合だけで済んでいるかもしれませんが、他に不具合が出てくる可能性も否
> めません。
了解致しました。

> あと、g++(C++)コンパイラの一時ファイルの作成先は、環境変数TMPDIRを設定する事
> によって/var/tmp以外にする事が可能です(一時的な回避策)。
有難うございます。これは大変有益な情報です。

エーと、早速試してみたのですがこういう事ですかね。

% ls -a ~/ | grep shrc
.cshrc*

% cat .cshrc | grep TMPDIR
setenv TMPDIR ~/tmp

% source .cshrc

% echo $TMPDIR
/home/m/kaorim/tmp

% cat ./test.cc
#include<stdio.h>
int main(void){
printf("hello world");
return 0;
}

% ls ./
test.cc*

% g++ -o test test.cc
% ls
test* test.cc*
% ls -a ~/tmp
./ ../

としたのですが~/tmpには何も排出されませんでした。
うーん、やり方を勘違いしてますでしょうか?

補足日時:2005/03/18 18:30
    • good
    • 0

>% g++ -o test test.cc



上記の処理中に一時的に作成されるものですから、これが終了した後に確認してもファイルは何も存在しないと思いますよ。

どうしても、環境変数TEMPDIRで指定したディレクトリに一時ファイルが作成されるか確認したい場合は、別ターミナルで無限ループでそのディレクトリをlsするようなシェルスクリプトなりを動かした状態でコンパイルを行って確認すればいいと思いますよ。
    • good
    • 0

df の結果のとおりです。



Filesystem Kバイト used avail capacity Mounted on
/dev/dsk/c0t3d0s1 47975 44685 0 100% /var

一般ユーザが使える領域がないだけです。
要らないファイルを消すとかして使える領域を空けましょう。

この回答への補足

有難うございます。

> df の結果のとおりです。
> Filesystem Kバイト used avail capacity Mounted on
> /dev/dsk/c0t3d0s1 47975 44685 0 100% /var
コンパイル時には/var/tmp下に一時ファイルが生成されるのですね。
この一時ファイルが生成できないと実行ファイルが生成できなくなってしまうのですね。

> 一般ユーザが使える領域がないだけです。
> 要らないファイルを消すとかして使える領域を空けましょう。
どれが不要なファイルか調べてみたいと思います。

補足日時:2005/03/15 10:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!