RKの日記: PPC Linux distribution (memo)

日記 by RK 

最近PPCを離れていたので調べてみると…

http://www.penguinppc.org/about/distributions.php

ちまたではx86-64で64bit Linux、とか言っているが、
G5でppc64でも64bit Linuxが使えるのね。ふむふむ。

 

RKの日記: CPUの数~。

日記 by RK 
CygwinのHyperThreadingの取り扱いは1.5.13でFIXされたと
いうことらしいのだが、–enable-vforkが動かないので
perthread.hなどを復活させるパッチを作ってみる…
が、やっぱりどうもおかしいので1.5.12でSMPを切る
おまじないをパッチして使ってみている。

それはともかく、CPUの数を知るためのプログラムをCYGWIN
本体からかっぱらってでっち上げてみた。そのうち役に立つかも
しれないしー。

–ここから–
#include <windows.h>
#include <ntdef.h>
#include <stdio.h>

typedef struct _SYSTEM_BASIC_INFORMATION
{
ULONG Unknown;
ULONG MaximumIncrement;
ULONG PhysicalPageSize;
ULONG NumberOfPhysicalPages;
ULONG LowestPhysicalPage;
ULONG HighestPhysicalPage;
ULONG AllocationGranularity;
ULONG LowestUserAddress;
ULONG HighestUserAddress;
ULONG ActiveProcessors;
UCHAR NumberProcessors;
} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;

typedef enum _SYSTEM_INFORMATION_CLASS
{
SystemBasicInformation = 0,
SystemPerformanceInformation = 2,
SystemTimeOfDayInformation = 3,
SystemProcessesAndThreadsInformation = 5,
SystemProcessorTimes = 8,
SystemPagefileInformation = 18,
/* There are a lot more of these… */
} SYSTEM_INFORMATION_CLASS;

NTSTATUS NTAPI NtQuerySystemInformation (SYSTEM_INFORMATION_CLASS,
PVOID, ULONG, PULONG);

int main(void) {

NTSTATUS ret;
SYSTEM_BASIC_INFORMATION sbi;

NtQuerySystemInformation (SystemBasicInformation, (PVOID) &sbi,
sizeof sbi, NULL);

printf(“NumberProcessors: %d\n”,sbi.NumberProcessors);
printf(“ActiveProcessors: %d\n”,sbi.ActiveProcessors);
printf(“NumberOfPhysicalPages: %d\n”,sbi.NumberOfPhysicalPages);

}
–ここまで–

関係ないけど、このページを作るために
$ cygstart cputest.c
とやってTeraPadを起動しようとしたらVC++が起動してきて
ちょっと萎え。

 

RKの日記: 精度。

日記 by RK 

http://www001.upp.so-net.ne.jp/tklab/linux/sci1a.html
のページにあるGMPのサンプルをCygwinで実行したら結果が
違うんだけど、こんなもん?

$ ./a.exe
0.177245385090551602729742179868533526555121958408590419889
69395170523076808929009790025066808353478677117967425280285
21548977352029145633167773281144127669260136841610887832832
81185928880866074791268440541374354055413287728847723499996
75106251938188128772133872095219196026854635331591045035424
52562031149610298e11

0.314159265358979323845999999999999999999999999999999999999
9999999999999999999999e21

 

RKの日記: 今日のこぼれ話。

日記 by RK 
CYGWINのnl_langinfoが正しい値を返すにはどうしたらよいんでしょうね。
まだ駄目?

$ cat langinfo_test.c
#include <langinfo.h>
#include <stdio.h>

int main(void) {

printf(“%s\n”,nl_langinfo( CODESET));
return 0;
}
$ cc langinfo_test.c
$ ./a.exe
US-ASCII

US-ASCII以外を返してこさせる方法が分からん。
Linuxだと、UTF-8とかちゃんと返してくるのだけど…

もうちょっと試してみた。
$ cat langinfo_test2.c
#include <langinfo.h>
#include <stdio.h>
#include <locale.h>

int main(void) {

printf(“%s\n”,setlocale(LC_ALL, “C”));
printf(“%s\n”,nl_langinfo(0));

printf(“%s\n”,setlocale(LC_ALL, “POSIX”));
printf(“%s\n”,nl_langinfo(0));

printf(“%s\n”,setlocale(LC_ALL, “ja_JP.eucJP”));
printf(“%s\n”,nl_langinfo(0));

return 0;
}
$ cc langinfo_test2.c
$ ./a.exe
C
US-ASCII
(null)
US-ASCII
(null)
US-ASCII
…ないほうがましだ。こんなの:p

ちなみに、
$ cat langinfo_test3.c
#include <langinfo.h>
#include <stdio.h>
#include <X11/Xlocale.h>

#define X_LOCALE 1

int main(void) {
struct lconv * lc;

printf(“%s\n”,_Xsetlocale(LC_ALL, “C”));
printf(“%s\n”,nl_langinfo(0));

printf(“%s\n”,_Xsetlocale(LC_ALL, “POSIX”));
printf(“%s\n”,nl_langinfo(0));

printf(“%s\n”,_Xsetlocale(LC_ALL, “ja_JP.eucJP”));
printf(“%s\n”,nl_langinfo(0));

return 0;
}
$ cc langinfo_test3.c /usr/X11R6/bin/cygX11-6.dll
$ ./a.exe
C
US-ASCII
POSIX
US-ASCII
ja_JP.eucJP
US-ASCII
やっぱ、native locale機能はOFFにしちまったほうがよいのかしらん。