[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
- Subject: [FDclone-users:00214] Re: FD-2.03b at NEWS-OS 6.1.2
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Mon, 09 Jun 2003 23:14:53 +0900
しらいです。
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) に関しては小島さんからの報告を待って
実装しようと思います。
取り敢えずはこの三つを実装してみて貰えますか?
しらい たかし