[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00214] Re: FD-2.03b at NEWS-OS 6.1.2



 しらいです。

In Message-Id <73256.1055165528@ideon.st.ryukoku.ac.jp>
        KOJIMA Hajime / =?ISO-2022-JP?B?GyRCPi5FZ0glGyhC?= <kjm@rins.ryukoku.ac.jp>さんwrites:
>   NEWS-OS 6.1.2 がまだあったので (もうすぐ廃棄予定)、FD-2.03b をつ
>   くってみました。

 では廃棄される前に急がなくては。


> # define _XOPEN_SOURCE_EXTENDED  1
> 
>       を追加しないと、sys/resource.h の struct rusage の定義が読み
>       込まれませんでした。

 getrusage(2) は POSIX でも規定されていると思ったんですが、
NEWS-OS では非標準なんですね。どうも Issue 5 で extension か
ら BASE に移されたようです。
 となると古い SVR4 の実装では getrusage(2) が無い可能性が高
いですね。この代替関数には times(2) があるんですが、FDclone
の実装では getrusage(2) の方を優先して使うようにしています。
 ということで、USETIMESH に times(2) を優先して使うような指
定の意味を持たせることにしましょう。


>   (2) /usr/ucblib/libucb.a から
>       killpg.o getrusage.o getdtblsize.o 
>       を取り出して link しないと fd がつくれませんでした。

 getrusage(2) は上の対応でいいと思います。具体的には、こん
な感じ。

---- Cut Here ----
diff -u FD-2.03b/machine.h ./machine.h
--- FD-2.03b/machine.h	Thu May 15 00:00:00 2003
+++ ./machine.h	Mon Jun  9 23:04:06 2003
@@ -120,6 +120,7 @@
 # define	USEMNTTABH
 # define	USEMKTIME
 # define	USEUTIME
+# define	USETIMESH
 # define	SIGFNCINT
 # define	GETTODARGS	1
 # else	/* !USGr4 && !SYSTYPE_SYSV */
diff -u FD-2.03b/system.c ./system.c
--- FD-2.03b/system.c	Thu May 15 00:00:00 2003
+++ ./system.c	Mon Jun  9 23:03:09 2003
@@ -8198,14 +8198,7 @@
 syntaxtree *trp;
 {
 	int usrtime, systime;
-#ifdef	USERESOURCEH
-	struct rusage ru;
-
-	getrusage(RUSAGE_CHILDREN, &ru);
-	usrtime = ru.ru_utime.tv_sec;
-	systime = ru.ru_stime.tv_sec;
-#else	/* !USERESOURCEH */
-# ifdef	USETIMESH
+#ifdef	USETIMESH
 	struct tms buf;
 
 	times(&buf);
@@ -8213,10 +8206,17 @@
 	if (buf.tms_cutime % CLK_TCK > CLK_TCK / 2) usrtime++;
 	systime = buf.tms_cstime / CLK_TCK;
 	if (buf.tms_cstime % CLK_TCK > CLK_TCK / 2) systime++;
+#else	/* !USETIMESH */
+# ifdef	USERESOURCEH
+	struct rusage ru;
+
+	getrusage(RUSAGE_CHILDREN, &ru);
+	usrtime = ru.ru_utime.tv_sec;
+	systime = ru.ru_stime.tv_sec;
 # else
 	usrtime = systime = 0;
 # endif
-#endif	/* !USERESOURCEH */
+#endif	/* !USETIMESH */
 	fputlong(usrtime / 60, stdout);
 	fputc('m', stdout);
 	fputlong(usrtime % 60, stdout);
---- Cut Here ----

 killpg(2) については system.h 辺りにこんな記述を書いてみて
下さい。

---- Cut Here ----
#define	killpg(p, s)	kill(-(p), s)
---- Cut Here ----

 getdtable(2) も System V 用に system.c にこんな static 関
数を用意してあります。

---- Cut Here ----
static int NEAR getdtablesize(VOID_A)
{
#ifdef	USERESOURCEH
	struct rlimit lim;

	if (getrlimit(RLIMIT_NOFILE, &lim) < 0) return(-1);
	return(lim.rlim_cur);
#else	/* !USERESOURCEH */
# ifdef	USEULIMITH
	return(ulimit(UL_GDESLIM, 0L));
# else
	return(-1);
# endif
#endif	/* !USERESOURCEH */
}
---- Cut Here ----

 この三つの対処で NEWS-OS 6 でも無事動くのではないでしょう
か。
 後ろの二つは他の System V 系 OS でも必要だったので既に実装
済ですが、getrusage(2) に関しては小島さんからの報告を待って
実装しようと思います。
 取り敢えずはこの三つを実装してみて貰えますか?

                                               しらい たかし