X



Solarisプログラミング教えてチョンマゲ

1帰宅部高校1年
垢版 |
NGNG
一ヶ月前、父親に「パソコン買って」とねだったら[Ultra10]と書かれたマシンをくれました。
わくわくして起動してみるとなんか友達の持ってるヤツと全然違う・・・
っていうかキーボードとマウスもよく見るとなんかおかしい。

親にネットにつないでもらって調べてみるとUltra10というのは
サン・マイクロシステムズというメーカーが出しているワークステーションで
Solarisというシステム(UNIX?)が動いているようです。
父親にこのワークステーションで何ができるのか聞いてみると、
「ホ→ムペ→ジもメールも見られるぞ」「派手なゲームはできない」
「どうせ暇なんだからプログラムでも勉強してみろ」
とつれない答えが・・・

まあ冬休みで暇だからプログラミングを勉強でもしてみるか、と
ネットで勉強しながらifとかwhileとか構造体とかポインタとか覚えました。
しかしこれを使って具体的に何ができるのか・・・?
ネットで見られる情報には↑とかの基本的な使い方しか書かれて無い模様。
ここからステップアップしたいのですがどうすればいいんでしょうか?

友達にも知ってる人はいないし、
本屋で立ち読みしてもネットで得られるものと同じような基本的な部分にしか触れていません。

2ch閉鎖騒動の動画をみてUNIX板の存在を知り
ここならすごいプログラマーの人がいると思い質問させていただきました。

お願いします。
151 
垢版 |
NGNG
sizeof(A)の値はどーなってるの?
NGNG
構造体の列をそうやって一括でmallocするのが諸刃の剣だっ
ツーことは分かっているヨナ?
153名無しさん@お腹いっぱい。
垢版 |
NGNG
まさか stdlib.h を include してないってオチはないよな?
NGNG
>>152
一括でmallocして何の問題があるつうのよ
おまえ諸刃の剣って言ってみたかっただけだろ
NGNG
>>148
こうすればいいんだろ。
32bit、64bitどうこう言う前にK&R本が必要では?

typedef struct {
int a;
short b;
}A;

typedef A *PA;

int main(){
PA pa;
int num = 3;

pa = (PA)malloc(sizeof(A)*num);
pa[0].a = 1; //ここでsegmentation fault
return 0;
}
NGNG
>>155
K&R本がどうこう言う前に>>150をよく見ては?
NGNG
>>150
たぶんコンパイルオプションがおかしいんじゃない?
ちゃんと64bitライブラリをリンクしてる?
158157
垢版 |
NGNG
下のソースでコンパイルも実行も問題なかった

/*
 * c -xarch=v9 -o aaa aaa.c
 */
#include <stdlib.h>

typedef
struct {
        int     a;
        short   b;
} A;

typedef  A *    PA;

int main(){
        PA      pa;
        int     num = 3;
        pa = (PA)malloc(sizeof(A)*num);
        pa[0].a = 1;
}
159155
垢版 |
NGNG
>>156
>K&R本がどうこう言う前に>>150をよく見ては?
は?
言ってる意味がわかんねーよ。
155のソースでは駄目ってこと?
>>158は、155のソースにincludeつけただけじゃん。
要するに
struct {
inta;
shortb;
}A;
は、
typedef struct {
int a;
short b;
}A;
だろ。
NGNG
1 stdlib.hをincludeし忘れ
2 mallocの戻り値が32bit整数と見なされ
3 64bitポインタの上位(下位?)32bitがpaに格納され
4 あぼーんされ
NGNG
>>159
typedefが無いとコンパイルエラーになるから、
それは単なるコピペミスだと思う
162155
垢版 |
NGNG
>>160
それ以前に>>150のソースをそのまま
コンパイルすると警告が続出なんですけど。
163155
垢版 |
NGNG
>>161
なるほど、そういうことですか。
NGNG
プログラミング好きですよ
NGNG
iconv()に関して質問させてください。
static int KONBU(char *to_code, char *from_code, const char **inp, char **outp, size_t *inl, size_t *outl)
{
iconv_t icv_hook;
size_t ret_val;
icv_hook = iconv_open(to_code, from_code);
if(icv_hook == (iconv_t)-1)return(ANS_ERR);// NG Return
ret_val = iconv(icv_hook, inp, inl, outp, outl);
iconv_close(icv_hook);
if(ret_val == (size_t)-1){
if(errno == EILSEQ) printf("EILSEQ\n");
else if (errno == E2BIG) printf("E2BIG\n");
else if (errno == EINVAL) printf("EINVAL\n");
return(ANS_ERR);// NG Return
}
return(ANS_OK);// OK Return
}
上記のようなiconv()を用いた関数があります。
unsinged char *sb, db;
ret = KONBU("JIS7", "PCK",(const char **)&sb,(char **)&db,2,8);
そしてこのように呼び出しており、unchar sbには
83 31 83 32 83 34 ....といったようなデータを渡しています。
実行結果はEINVALが返ってきます。
ここで質問なのですが
@第5引数の2はsbを2バイトずつ読み込むということでよろしいのでしょうか?
A第6引数の8は何を指すのでしょうか?
Bsbには0x81 0x31 ....というようにヘキサを読み込ませているつもりなのですが
そもそも文字列で渡すべきなのでしょうか?
CEINVALのエラーの意味がよくわからない。
以上4点になります。
厨な質問かとは思いますがご教授お願いいたします。
166 
垢版 |
NGNG
てか○数字使ってる時点であぼーん。
NGNG
はい、次の人どうぞ
NGNG
>>1
>わくわくして起動してみるとなんか友達の持ってるヤツと全然違う・・・
>っていうかキーボードとマウスもよく見るとなんかおかしい。
いつも自分が慣れたブツ以外は「おかしい」「違う」といって種類の多様性を
容認しようとしないMS中心のグローバルスタンダード的な考えは
(あえていえば自分がそのような事を考えたことが無いにしても
排斥的思考を恐らくは無意識のうちに行なっているという事は)
差別や偏見にもつながりかねない重大な問題だと思うんですが、どうでせう?
NGNG
いやむしろ多様性を受け入れようとした結果がこの惨状なのでは?
NGNG
>>168
つまり>>168>>1を偏見的な目で見ているから
そういう解釈になるのですね?
ということが言いたいわけですね。
NGNG
つーか「パチョコン」といいながら「ワークステーション」といってるところで
ネタ確定。
あとSPARCウザーから言わせればultra5/10はパチョコン同等。
ブリッジの下に何でもぶら下がってるのは安物。バスがスイッチなUltra60ハァハァ
NGNG
>>171
UPAバスの有無のことだろうけど、1cpuや2cpu程度なら
あんまし意味ないっしょ
NGNG
はい、次の人どうぞ
174名無しさん@お腹いっぱい。
垢版 |
NGNG
天×
×罰
175697
垢版 |
NGNG
100%ネタ
こんな陰険な父親いたらヤダなぁ〜(爆)
176名無しさん@お腹いっぱい。
垢版 |
NGNG
>>175
そうかなー、俺はこの親父かっこえーと思うけどね。
もっとも、親父も本人が工学方面の興味をもってるから与えたんだろ。
正直言って、パソコンなんて5万程度で買えるんだからバイト代で買えるし、
ある意味、ワークステーションなんて親父が買わなければ、最初のうちは
出会えない代物だから、親父の判断は正しいと思うよ。
177名無しさん@お腹いっぱい。
垢版 |
NGNG
デモ実際にいそうじゃあない?
大学の教授とかでさー。
学校の放出品もらってきたりとか…。
漏れは先日大学からもらってきたぞい。
178名無しさん@お腹いっぱい。
垢版 |
NGNG
age
179名無しさん@お腹いっぱい。
垢版 |
NGNG
ども。
Solaris8+SunONE7 で ローカル時間にmsec(ミリ秒)を使いたい。
localtime構造体には、msecがなく、困ってます。
何か他のmsecのある構造体を教えてください。
また、time構造体から上の構造体への変換関数もお願いします。

#プログラム板の方にも書き込みしちゃったけど、その後、ここ見つけたんで、
#書き込ませてください。
NGNG
time構造体なの? time_tとかstruct tmではなくて?

gettimeofday(3C)で使うstruct timevalは
マイクロ秒単位のメンバを持ってるよ。
6〜10msec程度の精度はあると思う。

ただし、gettimeofday(3C)で得られるのはUTC時間なので
タイムゾーン処理は自分でやる必要あり。
181179
垢版 |
NGNG
>180
 レスありがとう。

 すいません、timeじゃなくてもいいです。
 time_t,struct tm,hrestime,など。
 標準的な関数かシステムコールで、時間を取ってこれて、それを
 ローカル時間に変換できる関数があればいいです。

 UTC時間だとそっから自分で変換するのに、処理にかかる時間が
 問題になるかもしれないので。
 できればローカル時間へ一発で変換したいところ。
NGNG
> 標準的な関数かシステムコールで、時間を取ってこれて、それを
> ローカル時間に変換できる関数があればいいです。

「localtime構造体」ってのはstruct tmのことでいいんだよね?
少なくとも2038年までなら、struct timevalのtv_secをtime_tに変換すれば
localtime関数が使えるでしょ。

struct timeval tv;
time_t t;
struct tm *tm;

gettimeofday(&tv, NULL);
t = tv.tv_sec;
tm = localtime(&t);
printf("%02d:%02d:%02d.%03d\n", tm->tm_hour, tm->tm_min, tm->tm_sec, tv.tv_usec / 1000);

> 6〜10msec程度の精度はあると思う。

訂正。実測したら20usecくらいの精度はあるみたい(@Blade 100)。
NGNG
1は今頃大学生か・・・
184179
垢版 |
NGNG
>182

 返事ありがとう。
 まさしく求めていたもの、そのものって感じです。
 ありがとうございました。
 
185名無しさん@お腹いっぱい。
垢版 |
NGNG
Solaris8のSun ONE7 でディレクトリの存在チェックをするには
どうしたらいいでしょうか?
opendirを使おうと思ったんだけど、DIR *が大きさ不定?な
構造体らしく、どうしたらいいかわかりません。

簡単にディレクトリの存在(ある、なし)をチェックするには
どうしたらいいか、教えてください。
exec(ls)のようでないものをお願いします。

186名無しさん@お腹いっぱい。
垢版 |
NGNG
>>185 stat(2)は使えないのか?
187
垢版 |
NGNG
えっ?
http://www.mxy.jp/home/topic.swf
188名無しさん@お腹いっぱい。
垢版 |
NGNG
Solaris8ってlibpthread.a無いんですか?
Linuxだとちゃんとあって、スタティックリンクできるんですが。
NGNG
Solaris の場合、スタティックリンクできない。
これは pthread 回りでシステムコールインターフェースの変更が
あっても、libpthread.so でその変更を吸収するためなので、
我慢しる。
NGNG
>>189
ラジャー。
がんばってみます。
191名無しさん@お腹いっぱい。
垢版 |
NGNG
処理時間が一定時間を越えた場合には、強制終了するように、スレッドとシグナルを使って、
以下のようなプログラムを組んでいます。
しかし、シグナルハンドラを無視(起動しない)もしくはシグナルの無効化ができません。
どうしたらよいでしょうか?

・初期設定
・スレッドA起動
( ---> シグナルハンドラ(SIGALRM)設定、インターバルタイマーセット )
( ---> タイマー待ち ---> 時間が来たらハンドラ起動 ---> ハンドラ(abortで強制終了)  )
・処理B
・処理Bが時間内に終了
・スレッドA終了処理
( シグナルハンドラを再設定 ---> インターバルタイマーリセット )
( スレッドAをキャンセル                          )
・処理続行

このとき、シグナルハンドラの再設定し、スレッドAを終了させると、ALARM CLOCKで終了。
スレッドAを終了させて、なおかつ、ハンドラを起動させないようにするためにはどうしたら
いいか教えてください。

なんか、Solarisの中味(システムコール?)について、よくわかってないので、変なこと書いてる
かもしれませんが、よろしくお願いします。

NGNG
>>191
そのスレッドAってのは時間監視だけしてるの? それとも処理BってのもスレッドAの仕事?
時間監視だけなら、シグナル使わないでスレッドAをその時間だけ眠らせておけばいいんでない?
NGNG
>>192
> >>191
> そのスレッドAってのは時間監視だけしてるの? それとも処理BってのもスレッドAの仕事?
> 時間監視だけなら、シグナル使わないでスレッドAをその時間だけ眠らせておけばいいんでない?

そうしておいて、B側で処理が間に合ったらフラグをセットして、スリープから起きてきたA側がそのフラグをチェックすればいいんじゃないのかな?
194191
垢版 |
NGNG

 レスありがとう。

>192,193

 スリープでもいいかなと思って、暫定的にそのような処理にして、動かしていました。
 しかし、他にもいくつかのスレッドが立ち上がっており、タイマー待ちができない状態になりました。
 結局、なんとか今日解決したのですが、どのようにしたかというと、以下のような感じです。
 (SIGALRMは他のスレッドで使用するため、ほかのシグナル(SIGUSR1)に変更することになりました)

 スレッドAは時間監視セット処理のみ行う。
 処理Bはタイマーによって監視され、一定時間経過したら、ハンドラによって強制的にプロセスごと終了させられる。


・初期設定
・スレッドA起動
( ---> シグナルハンドラ(SIGUSR1)設定、timer_create(TimerID), timer_settime() -----> スレッドA終了)
( 時間が来たらハンドラ起動 ---> ハンドラ(終了処理後、abortで強制終了)  )
・処理B
・処理Bが時間内に終了
・タイマー削除処理(timer_delete(TimerID))
・処理続行

 
 以上、こんな感じです。
 ありがとうございました。
195名無しさん@おなかいっぱい
垢版 |
NGNG
スレッドとシグナルを併用するってぇいうのが間違いの元
NGNG
Solaris Systems Programming
ttp://www.amazon.com/exec/obidos/tg/detail/-/0201750392/
翻訳期待の本
197名無しさん@お腹いっぱい。
垢版 |
NGNG
Sunblade 100のCPUは、sparc64でつか?
NGNG
UltraSPARC IIe
199197
垢版 |
NGNG
>>198
それは64bitでつか?
200198
垢版 |
NGNG
何が64bitかはわからんが、まあ普通は64bit CPUに分類される。
201197
垢版 |
NGNG
>>200
ありがとうでした。
いや、ちょっと今ビッグエンディアンとリトルエンディアンのテストしたかったので、
x86とSparcを使用して64bit,32bitデータがどうなるか調べたかったのです。
おかげでエンディアン問題に影響しないコードが書けました。m(_ _)m
202名無しさん@お腹いっぱい。
垢版 |
2005/10/09(日) 02:29:53
age
203名無しさん@お腹いっぱい。
垢版 |
2005/10/29(土) 16:27:35
sage
2005/10/29(土) 19:55:55
そりゃそうだろ。
大抵のプログラムはエンディアン問題には影響*しない*。
影響*される*ことはままあるがな。
2005/10/29(土) 20:00:53
9ヶ月遅れで「そりゃそうだろ」って言ってもな。
206名無しさん@お腹いっぱい。
垢版 |
2006/05/08(月) 02:38:07
age
2006/05/08(月) 02:47:05
>>205
うるさいうるさいうるさい
2006/05/08(月) 05:06:00
とりあえずあれだ、漏れが適当なWindowsマシン(ライセンス付き)送ってあげるから
そのマシンと交換してほしいよ。マジで。
209名無しさん@お腹いっぱい。
垢版 |
2006/05/16(火) 05:06:04
Puttyを使ってsshで接続後、makeとかしてるんですけどセッションが切れてもmakeし続ける方法ってないんですかね?
makeに1、2時間かかる間にPuttyやネットワークが落ちてもサーバー側に問題がなければmakeしててほしい。
210名無しさん@お腹いっぱい。
垢版 |
2006/05/16(火) 13:33:54
screen 使ってでたっちするか
nohupするか。

2006/05/17(水) 10:37:03
なんで、なんでなんで。
おすぎですっ。ぴーこですっ。

ゆーたいりだつっ。

ざ・たっち。
212名無しさん@お腹いっぱい。
垢版 |
2007/08/13(月) 13:12:01
>>204
文字をintで扱うからエンディアン影響するんじゃ?
キャストってスペックにだけ影響するの?
2007/08/28(火) 23:33:12
一ヶ月前、父親に「パソコン買って」とねだったら[PC8801]と書かれたマシンをくれました。
わくわくして起動してみるとなんか友達の持ってるヤツと全然違う・・・
っていうかキーボードとマウスもよく見るとなんかおかしい。

親にネットにつないでもらって調べてみるとPC8801というのは
NECというメーカーが出しているワークステーションで
N88BASICというシステム(Microsoft?)が動いているようです。
父親にこのワークステーションで何ができるのか聞いてみると、
「ホ→ムペ→ジもメールも見られるぞ」「派手なゲームはできない」
「どうせ暇なんだからプログラムでも勉強してみろ」
とつれない答えが・・・

まあ冬休みで暇だからプログラミングを勉強でもしてみるか、と
ネットで勉強しながらifとかwhileとか構造体とかポインタとか覚えました。
しかしこれを使って具体的に何ができるのか・・・?
ネットで見られる情報には↑とかの基本的な使い方しか書かれて無い模様。
ここからステップアップしたいのですがどうすればいいんでしょうか?

友達にも知ってる人はいないし、
本屋で立ち読みしてもネットで得られるものと同じような基本的な部分にしか触れていません。

2ch閉鎖騒動の動画をみてUNIX板の存在を知り
ここならすごいプログラマーの人がいると思い質問させていただきました。

お願いします。
2007/08/28(火) 23:54:43
PC88でwebもメールもできるんなら、それはたしかにわくわくするなあ。
215名無しさん@お腹いっぱい。
垢版 |
2007/08/28(火) 23:59:16
PC88ってN88Basicしか動かんのじゃないの?
DOSの前だよなw
おれSRmkU持ってたけど。単なるゲームマシンだったな。なつかぴ。
2007/08/30(木) 00:35:44
CPUはZ80(相当)だから、CP/Mもあったらしいよ。
UZIXも動けばおもしろいんだけどね。
2007/08/30(木) 00:54:29
CP/Mあったよ。仕事もあったよ。
218名無しさん@お腹いっぱい。
垢版 |
2007/08/30(木) 01:26:57
おお CP/M ね。
あったなぁ。 俺は日電CP/M持ってたもんね。

あの頃のソフトはほんとバケモノのように良く出来てたよ。
Fortran,PL/I,CPBOL,C
2007/08/30(木) 15:35:50
つか、ふつー PC-8001 で CP/M だろ?
メディアは8インチフロッピーw
2007/09/12(水) 01:40:05
お父さんのクオリティに感動!!

てか絶対WindowsPCより高い金出してるよな
2008/01/13(日) 15:37:38
特定のウィンドウ1〜3を指定した順に上位スタックするようにしたく・・・
 ※ウィンドウは他にも多数あるという前提で

Display *dsp;
Window win[3];
int w_num;

w_num = 3;
wim[0]=123; /* アプリ1のWindowID*/
wim[1]=456; /* アプリ2のWindowID*/
wim[2]=789; /* アプリ3のWindowID*/
        /*IDは引数で渡されたものを数値変換したもの、または、*/
        /*共有メモリから取得した値。ここの例では省略している*/

dsp = XOpenDisplay(display_name);

XRestackWindows(dsp, win, w_num); /*指定した順でウィンドウを再スタック*/

と、したのだがウィンドウがピクリとも動きませんでした。
どこが誤っているのか、なにか処理が足りないのかが判りません。
どなたかお判りになる方は居ませんか?

222名無しさん@お腹いっぱい。
垢版 |
2008/01/14(月) 00:08:19
誰も居ない・・
2008/01/23(水) 12:39:43
>>221
適当なWindowManagerのソース見てみたら?

自分がオープンしたウィンドウじゃないから
うまく動かないんじゃね?

WindowManager用に用意されてる関数があったような
気がする。
224名無しさん@お腹いっぱい。
垢版 |
2008/02/01(金) 23:06:22
PC8801ってデュアルCPUなんだよなw
2008/02/01(金) 23:44:22
FDD付はな
2008/02/06(水) 23:54:40
>>223
サンクス

WindowManagerみてみる。
いろいろ試してみたけど
CygwinでWindowManagerの介入阻止してやると
動きそうな幹事。
ただ、他のWindowManager上で試すとまったく
動かなかったりする。
よくわからん。
2008/02/11(月) 11:58:49
>>224
VictorのMSX2にもデュアルCPUなHC-95ってのがあったぞ。
2009/08/17(月) 14:58:23
>>222
あのね、子供がしたことに対して親が責任を取るというのは当然でしょ。
それと全く逆のことを考えればいいのよ。
歴史的な問題の場合、上の世代の過ちに対して、下の世代の人たちが責任を取らなくちゃいけないの。
2009/08/24(月) 05:29:01
なるほど、失敗した上の世代を吊るしていいということか
230名無しさん@お腹いっぱい。
垢版 |
2010/02/08(月) 21:35:00
nanosleep()命令がコンパイルできません。
何か設定があるんですか?
2010/02/09(火) 00:20:15
man nanosleepの冒頭を嫁
2010/02/09(火) 06:33:29
No manual entry for nanosleep
2010/02/09(火) 07:02:56
さがしもせず「ないからわかりません」とかほざくやつはしねばいいとおもうんだ
ttp://www.freebsd.org/cgi/man.cgi
2010/02/09(火) 07:19:55
>>233
スレタイよめ。
あと、古いSolarisだとnanosleep()は無かったと思うぞ。
2010/02/09(火) 07:19:56
Solaris なんだからこっちじゃないの。
-lrt オプションが必要だよ。

http://docs.sun.com/app/docs/doc/816-5171/nanosleep-3rt
2010/02/09(火) 07:31:29
さあ早く select()使ってnanosleep()を実装する仕事に戻るんだ、、
2010/02/09(火) 20:19:07
select()命令を使ってnanosleep()命令にする(?)って、そんな設定があるんですか?
2010/02/09(火) 20:25:39
select() のタイムアウトを nanosleep() の代わりに使うという話でしょ。
239名無しさん@お腹いっぱい。
垢版 |
2010/03/24(水) 20:43:18
PASS= に/usr/gnu/binを適応してるのに
xmkmfのジョブが実施できません><
ヘルフお願いします
2010/03/25(木) 04:48:47
setコマンドで本当にそのパスを食ってるか
rehashしてみるとかwhich xmkmfしてみるとかさぁ
2010/03/25(木) 07:41:51
>>240 回答者も低レベルだなw
2010/03/25(木) 09:25:33
>>241
5点
もっとがんばりましょう
243名無しさん@お腹いっぱい。
垢版 |
2010/03/27(土) 10:02:53
Solaris-7.0 x86 なんですけど、最新版に上げるための手順を教えてください。
2010/03/27(土) 23:14:59
7.0.?そんなVerあったっけか?
245名無しさん@お腹いっぱい。
垢版 |
2010/09/06(月) 22:38:35
C言語を静的リンクするのに、オプションは -staticじゃ駄目なんですか?
何かエラーが出るんですけど
2010/09/06(月) 22:53:39
コンパイラ(リンカ)により異なる
2010/09/06(月) 22:59:11
>>246 回答者も低レベルだなw
248名無しさん@お腹いっぱい。
垢版 |
2010/09/07(火) 19:33:35
>>246
その、コンパイラ(リンカ)により異なるオプションを付けても
エラーが出るんですけど
2010/09/09(木) 15:39:22
エラーメッセージを書かないのは、宗教上の理由からですか?
2010/09/09(木) 16:20:26
>>249
そうです。宗教上の理由です。
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況