1 :
名無し募集中。。。 :
05/01/15 02:18:37
2 :
名無し募集中。。。 :05/01/15 02:19:15
3 :
名無し募集中。。。 :05/01/15 02:20:16
4 :
名無し募集中。。。 :05/01/15 02:20:51
5 :
名無し募集中。。。 :05/01/15 02:22:57
/◇ oノハヽo /◇◇ 从*・ 。.・) / ◇ ◇ センター試験がんばってね /o y/ |`p し!|||ii|||J |||||||||
空気読まずに立てちゃったけどOK?
いやでも、 UNIXで挫折って、わかる気がするなあ。 ずっと意味不明なコマンドの文字列打ってたら頭おかしくなりそうだし、 ずっと真っ暗なコンソール眺めてると鬱になりそうじゃん? かといって思想のまるでないXは、オタ絵とただ沢山コンソール開くしか脳ないし、 こんなの与えても娯楽を常に要求する一般人は見向きもしない。 そもそもWebでしか見掛けない、哀れなOS、というのが一般人の見解だし。 そうそう、最近LindowsがUNIXの印象かなり悪くしたよね。 この事件でUNIXはビジネスで成功できないことがまた証明されてしまったわけだ。 昔からUNIXは関係者同士で常に足を引っ張って成長しない。 お金の匂いしないよね。全然。 そんなOSだから、挫折が常態であるのは必然なんだと思う。
ほらきた。 UNIX使いって貶されると、 すぐ言葉少なになるよね。 もう貶されるのに慣れちゃった? ちょっと、心をおちつけて。 UNIXを知らなかったあの頃を思い出してごらん。 あの頃の君達は希望に満ち溢れていたよね。 そう、今まで君達は、とっても悪い夢を見ていたんだ。 UNIXなんか捨てて、あの頃見ていた希望を取り戻そうよ!
10 :
デフォルトの名無しさん :05/01/15 15:25:13
どこの板の名無しだよ
モーヲタがUNIX使う時代なのか
ここ2,3年の間にUNIXのプログラミング題材にした書籍が アメリカで何冊か出てるよね。
Linux Is Not UniX
19 :
デフォルトの名無しさん :05/01/28 11:29:30
質問させていただきます Xのプログラムをコンパイルしようとおもったのですが [root@cf root]# gcc -I /usr/X11R6/include -lX11 -L /usr/X11R6/include -I/usr/X11R6/lib -L /usr/X11R6/lib xaa.c -o xaa [root@cf root]# ./a.out Shared object "libX11.so.6" not found といわれて、動作させることができません [root@cf root]# find /usr/X11R6/ -name "libX11.so.6" /usr/X11R6/lib/libX11.so.6 で、libX11.so.6はあるのですが‥ どこか根本的にまちがっているのでしょうか?
コンパイルする時に-R/usr/X11R6/libするか、 $ env LD_LIBRARY_PATH /usr/X11R6/lib ./a.out あるいは # vi /etc/ld.so.confに/usr/X11R6/lib 加えて、# ldconfig ちなみにその糞OSは何?
おそらくTurboかと
>>20 > $ env LD_LIBRARY_PATH /usr/X11R6/lib ./a.out あるいは
$ env LD_LIBRARY_PATH=/usr/X11R6/lib ./a.out
皆さんに質問で ファイルから設定を読みこむときって皆さんはどうやってますか? width=500 height=600 と、設定ファイルにかかれているとき Perlなら、widthを変数名に、500を値にいれていたのですが C言語ではどうするのでしょうか? もしよろしければ適当にソースを書いていただければ幸です
マルチすんなボケ
25 :
デフォルトの名無しさん :05/02/02 11:59:21
>>19 ./a.out <==./xaa の間違い?
28 :
デフォルトの名無しさん :05/02/04 12:08:09
詳解UNIXに載ってるIPCの機能は、いまあるメジャーなUNIXでは 殆ど使えてるんでしょうか?それともプロセス間通信はpipeや mmapみたいな基本的なものに限定しておいて、スレッドを使う 方向で考えた方が、推奨されるやり方なのですか?
>>28 ・使えるんじゃない?
・そうとは思わないけど。
>>30 POSIXに準拠してないOSがあったりするのがUNIXの難しさなのではないですか?
>>31 いまあるメジャーなUNIXでPOSIXのIPCが使えないのってどれ?
>>32 それが分らないから質問してるんですけど。
>>33 そんなのあるのか? って話だと思うけど。
31があると断言しちゃってるけど実際どれよ、FUDじゃねえの? って話じゃないかと。
APUE見りゃちゃんとPOSIXとSysVとBSDで事情がある場合はちゃんと断りがあって、
その上でIPCの機能の記述が通じない「メジャーなUNIX」って一体何を想定してるのか。
元質問者の無知はしょうがないとしても31はちゃんと明確に指摘すべきだろ。
すべてのUNIXで動作するコードを書きたいだけなのか?
>>36 そういうわけではないですけど、何らかの現実的なガイドライン
みたいなのがあれば、それを知りたいなあと思っただけです。
本来ならコード読んで体得するべきで怠けているだけなのは分ってます。
System V IPCがないUNIXがあったら俺の所へ持ってこい!
39 :
デフォルトの名無しさん :05/02/05 07:29:32
アホな質問なんですが、 APUEの10.7,10.8のサンプルコードってちゃんと動きますか? Linux2.6では期待した通りには動きません。 straceで見ると、 readシステムコール中にシグナルが発生しても 普通にreadに戻るだけなんです。
40 :
デフォルトの名無しさん :05/02/05 07:31:19
LinuxはLinux Is Not UniXの略だからなぁ。
#include<signal.h> #include<unistd.h> static void func(){return;} int main(){ int n=0; char line[256]; signal(SIGALRM,func); alarm(10); n=read(0,line,256); alarm(0); write(1,line,n); } $strace ./a.out ... rt_sigaction(SIGALRM, {0x8048424, [ALRM], SA_RESTORER|SA_RESTART, 0x40046678}, {SIG_DFL}, 8) = 0 alarm(10) = 0 read(0, 0xbffff980, 256) = ? ERESTARTSYS (To be restarted) --- SIGALRM (Alarm clock) @ 0 (0) --- sigreturn() = ? (mask now [RTMIN]) read(0, select使えばいいんだろうけど。
>>41 ソースの先頭で
#define _XOPEN_SOURCE
>>42 ありがとうございます。
rt_sigaction(SIGALRM, {0x8048434, [], SA_RESTORER|SA_INTERRUPT|SA_NOMASK|SA_ONESHOT, 0x40046678}, {SIG_DFL}, 8) = 0
>>41 と違ってrt_sigactionの引数としてSA_RESTARTの代わりにSA_INTERRUPTが入ってますね。
10.12のようにsigaction()でstruct sigactionのsa_flagsに フラグをきっちり指定してやるのが正しいということですな。 signal()のデフォルトの動作はSysV,4.3BSDはINTERRUCT、 SunOS,LinuxはRESTARTということですな。 お騒がせしました。
4.xBSDが、restartable system callのご先祖様です。
>>45 なるほどそうなんですか。
でも、restartable system callを一番最初に実装したのが4.xBSDだとしても、
ここでの、互換性の話を含むsignalの挙動の話はまた別のですよね?
そもそも上のようなケースがあるから、UNIXではsignal()はもう使うべきではないですね。
マルチプロセスを想定していない、ANSI C特有の関数としてのsignal(),raise()とみなす
べきなのでしょう。UNIXではsigaction(),kill()が正しい。
glibc$ man 2 signal (略) Trying to change the semantics of this call using defines and includes is not a good idea. It is better to avoid signal altogether, and use sigaction(2) instead. signal(2)だけじゃ扱いきれないことが多いですからね。 4.2BSDの頃にはこういう常識が形成されていたと思います。 今手元にないんですが、stevensの"Advanced"にも書いてあったと思います。
48 :
デフォルトの名無しさん :05/02/08 13:20:03
sagarisugi
49 :
デフォルトの名無しさん :05/02/08 15:18:19
XTIの方がUNIXのインターフェイスらすいと思うのですが、 これってもう誰も使ってないんですか?
50 :
デフォルトの名無しさん :05/02/08 15:57:05
らすい?
51 :
デフォルトの名無しさん :05/02/08 22:40:00
pthread使ってるからpopen()とか使うな、っつってるのに使いやがったアホ(上司と同義)のために、 「こう書き換えろう゛ぉけっ!」とアドバイスしたいのですが、どういう書き換え方があるでしょうか?
上司を部下に書き換えるとか、勤務先を書き換えるとか
53 :
デフォルトの名無しさん :05/02/08 22:50:45
マジレス希望です。
私は popen 使うならシェルからパイプ使えと思う人です
55 :
デフォルトの名無しさん :05/02/09 01:06:27
プロセスを走らせながらDLLって書き換えられますでしょうか。。。 dlopen()等でそういった書き換えが考慮されていないプロセスです。
書き換えるのはできないけど、入れ換えるのはできるぞ。 cp libhoge.so /usr/lib/libhoge.so.tmp mv /usr/lib/libhoge.so.tmp /usr/lib/libhoge.so
入れ替えられても元のdllはロードされたままの罠。
無理やりmunmapしてしまうとか。
dllゆーな。
dllって言う奴はWin上がり
UNIXerはなんて言うの?
そ。
さ。
どるる。
どるるゆーな。
66 :
デフォルトの名無しさん :05/02/10 00:03:50
>>56 やっぱ無理ですか。どうもでした。
ちなみにdllってWin用語ですか!?たまたま拡張子がDLLなだけでしょ。
そ。
>>66 なこといっても、dymamic loadable libararyとは言わないもん。
shared libraryだな。
同じというならWindowsのDLL作るのってなんであんなに面倒くさいかね。
誰が同じって言ったんだろう
どるるワラタ
>>68 確か dynamic link library の略だったような。
なぜか soopen() じゃなくて dlopen() だなあ。
>>71 shareされるかどうかの観点 -> so
dynamicにロードされるかどうかの観点 -> dl(l)
73 :
デフォルトの名無しさん :05/02/10 17:04:50
>>49 W=リチャード(故)の「UNIXネットワークプログラミング」8000円に
XTIのページが100ページぐらいあって
泣きたくなった
まじでいらん。金その分返せと
>>71 dlopenはもともと別のAPIですから。
76 :
デフォルトの名無しさん :05/02/11 21:26:59
perrorを呼んだ後はerrnoの値って変わっちゃうの? printfは何度呼んでも変わらないようだけど。 int main(void) { errno = ETIMEDOUT; printf("errno: %d \n", errno); perror("perror"); printf("errno: %d \n", errno); return 0; } errno: 2 perror: No such file or directory errno: 29
そういうもんです
78 :
デフォルトの名無しさん :05/02/11 23:16:43
FreeBSDでは変わらんけど。 29ってなんだ?
変らないのはたまたま。 後で利用したければ、保存しなさい。
>>76 perrorが標準エラーに出力するってことは、最終的にwrite(2)が
呼ばれるわけだから、どのみちerrnoが上書きされる可能性がある。
もし、errnoを保存してたとすると、write(2)が失敗した場合のerrnoを
取得できなくなってしまう(可能性も必要性も低いけど)。
こう考えれば納得できるんじゃないかな?
>>80 なるほどわかりますた…
あと
>>76 のETIMEDOUT→ENOENTですた、スマソ
まぁ何でもいいんですが。
82 :
デフォルトの名無しさん :05/02/12 21:15:07
>>51 popen()はスレッドセーフだよな?何故使ったらダメなんだ?
83 :
デフォルトの名無しさん :05/02/12 21:25:23
pthreadの動作を実際に見せてやれ。 おまいはできる部下だ
84 :
デフォルトの名無しさん :05/02/12 21:27:20
>74 本買う前に目録ぐらい見なよ
85 :
デフォルトの名無しさん :05/02/12 22:31:57
>85 何のために常時接続してんだか…
87 :
デフォルトの名無しさん :05/02/17 02:45:26
コマンドを実行してそれを返り値にして渡したいのですが どのような方法があるでしょうか? 具体的には ls -1 *.jpg の結果が欲しいのです すいませんがよろしくおねがいします
88 :
デフォルトの名無しさん :05/02/17 02:52:40
「返り値にして渡したい」の意味が正確には把握できませんが、 return system("ls -1 *.jpg"); ってことですか? それとも、 FILE *f = popen("ls -1 *.jpg", "r"); // fから読む ってことでしょうか?
呼び側で、引数それぞれにつき、BUFSIZぶん確保。 返り値は、エラーの有無。 おもしろかった。 int hoge(char *cmd, char *b) { FILE *fp; int ret; cmd[strlen(cmd) - 1] = '\0'; /* 改行がくっついてる、と、仮定 */ printf("cmd: %s\n", cmd); if ((fp = (popen(cmd, "r"))) == NULL) { perror("popen"); return (1); } if ((ret = fread(b, 1, BUFSIZ, fp)) < 1) { printf("no output from \"%s\"\n", cmd); } else if (ret < 0) { perror("fread"); pclose(fp); return (1); } pclose(fp); return (0); }
??ちょとまずかった?? if ((ret = (fread(b, 1, BUFSIZ, fp))) < 1) { fprintf(stderr, "no output from \"%s\"\n", cmd); if (ferror(fp)) { perror("fread"); pclose(fp); return (1); } } ...すみません。もうやめます。
どうしてUNIX厨のソースはこんな醜いんだろう
92 :
デフォルトの名無しさん :05/02/17 07:40:22
それがUNIXクオリティ
93 :
デフォルトの名無しさん :05/02/17 12:54:54
95 :
デフォルトの名無しさん :05/02/17 13:56:20
すみません。よろしければ教えてください。 mailxでメールを送信する際に 添付ファイルをつけて送信することは可能なのでしょうか? どこぞやにUNIXじゃ添付できないって書いてあったんですけれども もしできそうならおしえていただけますでしょうか?
帰れ
97 :
デフォルトの名無しさん :05/02/17 13:58:42
あらら、答えられないなら黙ってればいいのにw UNIX厨っていつも余計な事するよね
もうしわけないです、どこの質問すればいいですか? 誘導願いしますw UNIXの環境上からmailxで添付ファイルの送り方 があればききたいのですけれども
なんでマニュアル読まないの?
101 :
デフォルトの名無しさん :05/02/17 14:06:43
マジレスすると $ man mailx
$ man ko
103 :
95 :05/02/17 14:08:38
manなんてインストールしてません おねがいします 教えてください
マニュアル熟読しないと使えない時点で糞だよね UNIXなんて捨てたら?
man入れてないんだったらオンラインマニュアルでもなんでもあるだろが 考えろよ
つーかおまえがmanなんて見ても参考にならねーと思う あきらめろ
107 :
95 :05/02/17 14:14:06
ばーか
108 :
デフォルトの名無しさん :05/02/17 14:14:20
ここはプログラミングのスレであって、ツールの使い方のスレではない。
シグナルってシグナルハンドラからすぐにリターンしないとだめ? そのまま延々と処理を続けてもいい?
110 :
95 :05/02/17 14:15:25
なんだかんだと言い訳ばっかでつかえねーやつら。 氏んだらいいと思うよ。
はいはいそうですね そのとうりです だからもうUNIXと言う文字があるところにはかかわらなくていいですよ じゃぁね ばいばい
112 :
デフォルトの名無しさん :05/02/17 14:16:37
いやでも、 UNIXで挫折って、わかる気がするなあ。 ずっと意味不明なコマンドの文字列打ってたら頭おかしくなりそうだし、 ずっと真っ暗なコンソール眺めてると鬱になりそうじゃん? かといって思想のまるでないXは、オタ絵とただ沢山コンソール開くしか脳ないし、 こんなの与えても娯楽を常に要求する一般人は見向きもしない。 そもそもWebでしか見掛けない、哀れなOS、というのが一般人の見解だし。 そうそう、最近LindowsがUNIXの印象かなり悪くしたよね。 この事件でUNIXはビジネスで成功できないことがまた証明されてしまったわけだ。 昔からUNIXは関係者同士で常に足を引っ張って成長しない。 お金の匂いしないよね。全然。 そんなOSだから、挫折が常態であるのは必然なんだと思う。
>>109 いいよ
Xのメセージは全部シグナルだし
元95です。偽者発生してもうきけるふんいきじゃないですね。残念です。 man 英語だったんでうーんって感じだったんですけど あとSHELLからコマンドで毎日定時に送るようにしたかったんですけど、 まあがんばって訳してみます。 結果あらしてすみませんw
115 :
デフォルトの名無しさん :05/02/17 14:33:24
ここは役立たずの巣窟
95は何を使ってるんだ? 話はそれからだ
オソル オソル キイテミル 現在実行中のプロセスが「自分自身」の絶対パスを知る方法ってありますか? 適当な path がとおってる環境下で、$ hoge <arguments...> とやったときに、 そのプログラムのなかで、hoge が /usr/bin/hoge なのか /usr/local/bin/hoge なのかを知る方法でつ。 argv[0] を拾っても、上記の例だと hoge が得られるだけだし・・・
>>117 Linux なら自身のpidを取得して/proc/pid/exe辺りを見ればいいんだけど。
man 5 proc で説明でると思う。他のOSの場合どうするのかは知らん。
SunのSolaris 8です これでこたえなってます?
>>114 だから、ここはプログラミング質問スレなんだから
プログラムの使い方を聞くなってば。
>>118 ありがd 調べてみまつ。
>>119 確かに
>>118 さんに教えて頂いた方法は「普通」の方法っぽくはないですね。
もっと簡単に出来そうなんだけど・・・
以下のような動作するコマンドって、珍しいものですか?
usage:
hoge (-f <conf file>)
-f で設定ファイルが指定されればそのファイルを使うけど、オプション指定なしで起動された
場合は、hoge 自身が置かれているディレクトリ直下の conf file を使います(default)。
みたいな・・・
>>95 氏は自分のやりたいことが分かっていないんじゃないかな。
ここで聞くより mailx と MIME でググると少しは幸せになったのに。
>>117 確実に(どんな場合でも)取得する方法はない。
起動後にchroot(2)してたらパスが存在しないことすらありえるし。
>>124 「hoge 自身が置かれているディレクトリ直下の……」というようなことは
「しない」っていうのがUNIXでの流儀なんですよ。
デフォルトのパスは定数として埋め込むのが安全です。
>>128 そんなに悪いものかな?
まあ、郷に入りては郷に従え、と。
そもそも1つのファイルは複数の場所に存在できるんだから、 「自身が置かれているディレクトリ」なんて特定できるわけがない。
↑馬鹿?
>>129 動作を既定する設定ファイルなら、利用者ごとに設定できるようにするべき。
実行モジュールと同じディレクトリに置くという悪しき習慣の弊害は、
Win95時代のソフトウェアがAdministratorでないと設定を変えられない+
利用者ごとに設定できないという形でも現れている。
また、環境に依存するような設定ファイルなら、アプリケーションに埋め込むか
システムで管理するデータベースなどに登録するのがいい。
ここでもやはり、実行モジュールと同じディレクトリに置くというメリットは殆ど無い。
>>130 ああそうか、そういう問題もあるね。今まで気付かなかったよ。
>>132 つーか一体いつの時代のWindowsとアプリを批判してるんだよ・・・
>>132 95くらいだとまだシングルユーザーだったからなぁ……
確かにそういう習慣はあったけれど今ではそれなりに改善されてるよ。
まだ昔の習慣引きずってるアプリケーション多いけどね。
普段Windowsしか使ってなかったから気付かなかったよ。参考になった。ありがとう。
つーかインストール先のデータ使うなんて普通にありそうだが
自己解凍書庫とか作れないじゃん
つーかシェルでは自分自身取得できるってことじゃん 無茶苦茶だな
142 :
デフォルトの名無しさん :05/02/18 01:09:34
馬鹿が多いな
自己パス得られないのはUNIXの欠陥の1つだよ
こいつ(
>>138 )こんなリンク張れば騙される奴がいるとでも思ってんだろうなw
UNIXはそういう便利関数が標準化される前に廃れちゃったからね。 POSIXにもないってのは失敗かもな。
まー、それでもなんとかなってるから別にいいけどね。
>>141 シェルとCで機能の同期が取れてないのはヤバイ
創作の妨げでしかない
はい、これでUNIXのヤバさが1つわかりましたね
ハイハイ
WindowsではAPI一個呼べば済む問題が、 UNIXでは流儀やら互換性やら実現不能やらで大騒ぎ たしかにアフォすぎる
ファイルシステムのセマンティクスからして違うのに無視して騒ぐバカがいるな。
ム板なんてWin厨ばっかなんだからしょうがないべ。
こんどは意味論で擁護か おめでたい頭だな UNIX板で普及スレとか立ってたけど こんなアフォばっかじゃ永久に無理
それ結構昔だね。 おれも無理だと思う。
まあ、ファイルがバラけるのを良しとしない人は多い気がする。 2chでそういう便利関数集めた汎用ライブラリ作らない? 主要UNIX環境で動くようなやつを。 完全PDSで。
PDSて・・・ PC98出身のフリーウェア作者かい?
じゃあ、とりあえず ・Linux、*BSD、SunOS等のメジャーな奴のやり方教えてくれ Linuxでのやり方は上に書いてたっけ。
シェルスクリプトならフルパスが得られるんだから、バイナリでもフルパスが 欲しいなら #! /bin/sh dir=$(dirname $0) exec ${dir}/../lib/hoge/hoge.bin "$@" みたいにするだけだよ。 jdk とか firefox とかでも使ってる、割とメジャーな手法。
じゃあそれ最初に言えよ・・
>>157 そういうシェルスクリプトを作るってことだから。
たぶん何の解決にもなってない。
UNIXは製作者側のセキュリティ保護をまったく考慮しないOS。
つまり嘘ファイルを掴まされてもわからんてことね。
それ引数にフルパス渡せばフルパスが分かるっていってるだけですから〜残念!
シェルスクリプトで出来ることがCで出来ないとでも思ってるのか?
ここはひどく汚染された釣堀ですね
釣り師もレッテル貼るしか能が無いしな。
>>134 >>132 の言う問題が明確に問題視されたのは、
Windows 2000 TSEのマルチユーザアプリケーションのガイドラインができてからですね。
その時からWindows(TSEやXP)でも
>>124 のやり方はガイドライン違反です。
今やMac OS Xでもそうです。
実行可能ならパスは通っているはずだから環境変数PATHを走査して…ってwhichみたいなことをする他ないのか…
違反って言い方は不正確だな。 Windowsロゴを取得する際に要求される仕様だってだけ。 しかもそれはユーザーデータの保存場所の指定に関してであって カレントディレクトリのコンフィグレーションを読むのは .NETアプリだって普通にやってるよ。
>>165 パスが通ってない所のものでも実行できるべ?
元々UNIXは専用マシンと一緒に買わせる抱き合わせ商法。 抱き合わせ商法が許されたのは20年以上前の秋葉原ぐらいだが、 現在も生き残ってるベンダーは、今でもその商法で売っている。 まさに20年前の思想。 当然ソフトウェアの保護にはものすごく疎い。 ぶっちゃげ自分のシステム以外の事はどうでもよく、問題を認識してすらいない。 ベンダーはマシンを買ってもらえれば元が取れるからわれ関せず。 不正ユーザーにとっては、動いているソフトは勝手にクラックしてください と言わんばかりの無法地帯。
>>167 それなら明確に起動時にパスを指定してるから位置がとれるだろうよ。
>>168 とはいえ、今のUNIX(互換OS)の主流であるLinux系やら
BSD系は通常ハードウェアについてこないぞ。
MacOSはついてくるな。
PCは、MSとの契約でWindowsを抱き合わせしないと販売できない
(Windowsを供給してもらえない、仕切り値が高くなる)ようになってる。
>>169 まあ1クッション置けばそうかもしれんが・・・
>>167 あぁ、そうか。あかんね。
カレントディレクトリとargv[0]を繋げるとか…駄目っぽい。
lsは常に/bin/lsでないとこまる。 たとえば/tmp/.../lsとか、./lsはあやしい。
そういう話じゃないだろ。
UNIX板には、シェルスクリプト、よくてperlやrubyスクリプトを ネチネチいじってオナニーしてる連中しか居らんべ?
argv[0][0]が ・'/'なら絶対パス。 ・'/'でなくargv[0]に'/'を含むなら相対パス。 ・そうでないならPATHを調べる。 でどう?
argv[0] はただの引数 execl("/path/to/your/program", "/bin/cat", "hoge", NULL); されたらどうするよ。
出来ません。デフォルトパスは~/にするよろし。 でいいじゃん。
というかmain()に入ったときには ファイルはunlinkされてるかもしれんし
どうしてできません。ごめんなさい。の一言がいえないのか。
>>180 確かにそれはそうなんだが、そこまで含めてしまうとなあ・・・
せめて自分自身の実体があった場所とか欲しいな
psの -o comm とか -o args は プロセス構造体とかユーザ構造体から 取得してるのですか??
>>177 ところでpsコマンドで見れるのは
>execl("/path/to/your/program", "/bin/cat", "hoge", NULL);
で言うと"/path/to/your/program"?それとも"/bin/cat"?
今端末の前に居ないんで確認できないんだ。
折角自身のPIDが分かるのにそこから引き出せないのかな?
すみません、ごめんなさい、出来ないみたいです、諦めます。
ld.so(1)さんが、頑張ってますんで参考に。
>>181 ここまでの議論は既にできないことを前提に、
ではどうするかということに移ってると思うんだが。
なぜ謝る必要があるのかわからんな。
そういうことはKen ThonmsonやらPOSIX作ったやつらやらに言っとくれ。
>>117 =
>>124 でつ。 @自宅なので、ID 変わっとります。
自分の書き込みに、こんなにたくさんレスがついたの、初めてです。 やっと、ヒッキー卒業
できそうな気がしてきました。 釣り師の快感も理解でき(ry
とまれ、
>>127 >>128 のご意見は参考になりますた。
それと、
>>181 。 一番、オモシロカターヨ。
ミンナ、アリガd
↑ つーか、ID ないじゃん
>>184 psで見れるのはどのUNIXでもargv[0]だと思う。
んだから、unixのファイルシステムでは、 1このファイルに対してファイル名(パス)がいくつでもつけられるから、 実行ファイルのある場所は?っていう質問には無理があるのよ。 実行ファイルといっしょに置いた設定ファイルを使おうとした場合、 最悪でも今のPATHと照らし合わせれば、どのファイル名で実行されたかは わかるだろうけど(which)、そこに一緒に置かれた設定ファイルが あるかどうか保証できないじゃん。
>>190 というか、ユーザー空間からpathnameを取得するための関数って
POSIXには含まれてないの?pathnameの有効性ともかくとしてさ。
man 〜すると、 | pathnameの有効性はともかく、こうなります って書いてあんのかよ…いらねーよ。つーか有害。
>>192 なにを言ってるのかよく分らないんだけど、
execveシステムコールを発行する時点で、
pathnameは決まってるんじゃないの?だったら
それをユーザー空間から取得できるよう、共通のインターフェイスを
提供してもいいんじゃないの?っていう話なんだけど。
♪ 喧嘩をやめて〜 二人を止めて〜 ♪ 私のため〜に〜 争わな〜い〜で〜
>>193 アプリは /usr/xxx/app
設定ファイルは /usr/xxx/app.conf
だとして
ln /usr/xxx/app /usr/bin/app
とやったらどうなのよ?
/usr/bin/app として実行したら
/usr/bin/app.conf は存在しないだろ?
>>195 それは「設定ファイルが見付かりません」でいいんじゃないの。
Linux で readlink("/proc/self/exe", ...) するとパスが取れるよう
な仕組みの、共通の API が欲しいぞ、と。
それを見付かりませんなんてするよりパスを固定する方がはるかに建設的じゃん。
>>195 みたいなのはUNIXでは完全にlegalな使い方なんだから、
それをわざわざ制限するのはアホ。
つまり Sun の Java はアホだと。 少ないとは思うけど需要はあるので、共通の手段があってもいいと思う けどねえ。自分は使わないけど。
>>198 いったいいつごろのJavaの話をしているのかねえ。
>>198 JDKはその配布形態から定数を埋め込めないが、
代わりにちゃんとJAVA_HOMEという環境変数をみるよ。
それがない場合にやむを得ずdirname $0をとってるだけ。
ちっちゃなアプリなら、インストールパスを固定 (configure 時に --prefix で指定する) で十分だ と思うけどなあ。そんなに大きなアプリなん? インストールされた場所から設定ファイルを探すっ てのは、UNIX 的にはむしろ嫌われることが多い。 どうしてかっていうと、インストールされたもの は NFS などで共有される可能性があるけど、 設定ファイルは各マシンごとあるいは各ユーザー ごとで別々にしたいから/etc か $HOME に置くの が普通だから。
大きなアプリで、設定ファイルじゃなくて、アプリ
に附属するデータファイルがあり、その場所を変更
したい場合には、JDK みたいに環境変数で指定可能
にして、環境変数がない場合には wrapper script
経由で dirname $0 を見るってのがまあ習慣。
Linux 方式は、カーネルメモリがちょっと無駄になる
(普通のカーネルは、わざわざ使えないかもしれない
情報を記憶して、物理メモリを無駄にするなんて
ことはしない) ってことの他に、
>>126 の言うよう
に chroot 環境からは、そのアプリが使えないって
問題もあるな。
あと、だから UNIXは… なんて言ってる Win厨は、 シンボリックリンクがないせいで、固定パス名 (たとえば C:\Program Files\アプリ名\data) から データを検索するように作ると、起動ドライブにしか データファイルを置けなくて実用に耐えないとか、 実行中のアプリケーションやDLLを削除することが できないせいで、セキュリティフィックスを当てる 間は実行中のサービスを止める必要があるし、結局 一度はリブートが必要になることが多いっていう Windows の欠陥を欠陥だと認識できてないんだと 思うな。 UNIX の場合、プログラム実行中でも削除できてしまう から、パス名の検索はもともとできない変わりに、 サービスを止める時間はほんとに一瞬で済むし、 リブートは必要ないんだが。
ムキになった海栗糞厨の見当違いなWindows批判が始まりました。
>>204 NTFS 使ってるならハードリンクもシンボリックリンクも使えるよ。
そのへんにしか反応できないって哀しいね。
WindowsにUnixスタイルを持ち込むのはアホ。 同じように、UnixにWindowsスタイルを持ち込むのはアホ。 どっちが良いとか悪いとかはケースバイケースでしょ。
結局、 できない ということでまとまりましたか?
>>206 シンボリックリンクってどうやるの?
.lnkの話?
>>210 wrapperスクリプト経由ならできるでまとまったのでは?
つまり、 できないと
>>209 そうなんだけどそれがわからん奴が多過ぎ。ム板にあるせいか
自分の無知からくる妄想的な優越感にかこつけて
昏いコンプレックスを晴らそうとする厨が絶えないね。
まあ元から知性に欠けるので馬脚を現しまくりなんだけど。
>>212 まとめは
>>202-203 だろ。
別にラッパースクリプトでしなければならない必然性はないけどね。
単にそれが手間がかからないからそうすることが多いってだけで。
あえて言えば、Cのコード書くより早いのと、動作を知るのに
特にドキュメントを探し回らなくても読めばわかるってのが利点だね。
FAQ
>>215 全然問題を理解してないね
さすがwwwwww
>>218 不親切な奴だな。
>>215 wrapper スクリプトの場合は、スクリプトが setuid/setgid
されてない限りは確実に argv[0] にパス名が渡ってくるん
だけど、Cプログラムの場合、argv[0] には基本的にコマンド
名しか渡ってこないから無理なんよ。
まあ、C でも、
1. strchr(argv[0], '/') != NULL なら argv[0]
からディレクトリを取り出す。
2. さもなくば $PATH から $argv[0] を探し、そこ
から探す
とすれば、実用上は問題なく探せるわけだが。
もう勘弁してくだせぇ。 「実行モジュールと同一ディレクトリを、設定ファイル置き場のデフォルトに・・」なんて こたぁ、もう口が裂けても言いませんからぁ・・・ gnu さまに逆らおうなんて気は、毛頭なかったんでごぜーます。 ほんの出来心で・・・ デフォルト位置は、リテラル文字列でソースに梅込みますです。 そのあと、core 吐いて氏にます。
>>219 > だけど、Cプログラムの場合、argv[0] には基本的にコマンド
> 名しか渡ってこないから無理なんよ。
え! もしかして俺はargv[0]に常にフルパスが入ると思ってたとみなされてるわけ?
イヤン。
> まあ、C でも、
> 1. strchr(argv[0], '/') != NULL なら argv[0]
> からディレクトリを取り出す。
> 2. さもなくば $PATH から $argv[0] を探し、そこ
> から探す
> とすれば、実用上は問題なく探せるわけだが。
普通そうするでしょ。
>
>>215 > wrapper スクリプトの場合は、スクリプトが setuid/setgid
> されてない限りは確実に argv[0] にパス名が渡ってくるん
これって$0のこと? そんなわけないと思うんだけど。
それともスクリプトの側にフルパスで書いてあるからって話?
> これって$0のこと? そうそう。 そう。$0 のこと。書き間違えた。 > そんなわけないと思うんだけど。 いいや、そんなわけある。 でないと、インタープリタ (/bin/sh とか) がスクリプトが どこにあるか見つけられないでしょ。だから $0 には確実に ディレクトリ名が渡ってくる。細かいことを言うと $PATH に カレントディレクトリが入っていて (← これはセキュリティ ホールだから避けるないとまずい設定だがそれは置いておいて)、 カレントディレクトリのスクリプトを起動した場合には、$0 に ディレクトリ名が入ってないわけだが、この場合もカレント ディレクトリにあるスクリプトであるという情報はちゃんと分かる。 wrapper を使うことが結構多いのは、この性質を利用するため。 ただし、セキュアな setuid/setgid スクリプトを実装している OS 上で、setuid/setgid スクリプトを起動した場合は例外。
>>204 ==
>>216 >
>>206 >ははあ、Windows 2000 からリバースポイントって機能が追加されて
>たのか。勉強になりますた。
>これって、ディスクが足らなくなって増設した場合とか、画期的に
>便利だと思うんだけど、広まってないのはなんでかな?
デフォルトフォーマットであるベーシックディスクでは実現出来ないので
ダイナミックディスクにフォーマットコンバージョンする必要がある。
別にディスクの中身が消える訳ではないのだが、変換直前に警告がうるさく
出てくるので普通の人はビビってそこで思いとどまることが多い。
パフォーマンスの低下を心配して思いとどまる人も多いらしい。
私は問答無用でインストール直後にダイナミックディスクにしてます。
>>184 FreeBSDで
execlp("./hoge", "/bin/oreore", "oredayo", NULL);
を、じっこうして、
ps -o comm,args すると、該当行の表示は
hoge /bin/oreore oredayo (hoge)
となりますた。(ばれています。)
manによると
> キーワード ucomm (アカウンティング名) は信用できます。
これのaliasのようです。
>>223 > > そんなわけないと思うんだけど。
>
> いいや、そんなわけある。
> でないと、インタープリタ (/bin/sh とか) がスクリプトが
> どこにあるか見つけられないでしょ。だから $0 には確実に
> ディレクトリ名が渡ってくる。細かいことを言うと $PATH に
ああ、そうかそうか。PATHの上にある場合は確かにフルパス必要ですね。
なぜか相対パスで叩く場合しか考えてませんでした。納得。
ついでに恥をしのんでおききしますが、
> ただし、セキュアな setuid/setgid スクリプトを実装している
> OS 上で、setuid/setgid スクリプトを起動した場合は例外。
これってどのようなOSでどのような動作をしますか?
私の知識は「最近はセキュリティ上の理由で昔のOSと違って
スクリプトのsetuidビットは無効になる」って10年前ので止まってるんですけど、
最近はその問題を解決した上でスクリプトに立てられたsetuidが有効になるんですか?
> これってどのようなOSでどのような動作をしますか? 通常、スクリプトファイルをオープンするのはインタープリタ の仕事だが、このような OS では、カーネルが直接スクリプトを オープンし、そのファイルディスクリプタ番号を、インタープリタ に「/dev/fd/ディスクリプタ」という名称で渡す。 少なくとも、SVR4 と NetBSD では実装してる。 NetBSD はカーネルオプションに SETUIDSCRIPTS と書かない限りは 無効。NetBSD が OpenBSD との分かれる前からある機能なので、 たぶん OpenBSD でも使えるんじゃないかと思う。 10年前でも、SVR4 は間違いなく対応してたと思うけど… SVR4 直系である Solaris でも勿論使える。
>>221 その背後で、魚たちはなおもじゃばじゃばと跳ね続けるのでした。
脱糞。
ヂャバジャバ
193だけど、誰もこれには真面目に答えてくれないのかな? カーネル内にプロセスと1:1対応する実行イメージのファイルパスは 保存されてるわけでしょ。なんでそれがユーザー空間から取得できないの? Win厨とバカにするなら、まずは疑問にはちゃんと答えるべきでしょ。
ファイル自体とファイルのパスは1:1対応じゃないと何度いったら
パッケージ(アプリ)の置場所を自由に変えるなんて事をしたい場合は、 そのパッケージに依存するパッケージが、 置場所を見つけられるような機構がないとどうにもならない。 そうしないとRPMにあるようなfile単位でのconflict, dependを扱えなくなってしまうから。
>>230 されてない。取得できるとも限らない。
unlink(2)してしまえばfile systemとの関係がなくなるので。
なんだかよくわかりませんがWindowsの圧勝ってことにしておきますね。
>>230 そういうものを利用するというのが既に挙げられたような具合で
悪習といえるからじゃない?
>>231 ハードリンクやchrootでpathnameという文字列の意味自体が変わるってことは分ってる。
知りたいのは、システムコールとして渡った文字列。なんでそれがユーザー空間から
取得できないのかってこと。
パスからvnodeを引っ張った後は、もうパスは使わないんじゃないの?
>>236 >システムコールとして渡った文字列
これってなんのこと?
その通り。だから Linux 以外の UNIX 系 OS では
コマンドのパス名はメモリの無駄だから保存されてない。
>>205 にある ucomm は、コマンド名のbasenameの部分
だけでディレクトリは含んでないの。
というか、システムコールとして渡った文字列がカーネルに 保存されているとなぜ思ったのかしら。保存しておいても、 あてにならない (コマンド実行中に削除されたりすれば意味が ない) んだから、保存しておく意味もないんだけど。 Windows の場合、実行中のプログラムの削除ができないから、 保存しておく意味も一応あるだろうけど。
Unixだとファイルオープン中に他プロセスからファイルを削除されても問題ないって聞いたけど、 ディレクトリエントリが消えるだけってことかな? だとすれば、実行モジュールの件もファイル名と実行モジュールが対応しないわけだよね。
ファイルは、自分を指しているディレクトリエントリが全部 unlink されて、 自分を開いているプロセスも1個もなくなったら消えます。 一時的に使うファイルを、オープン直後にunlinkしたりするのは昔からけっこうある。 誰にもいじられないし、プロセスが終わると勝手に消える。
>>242 その通り。
実行中に改名だってできるし。
UNIXのVFSが高度な柔軟性を持っていることはいいとして、 それに対するパスの表現力があまりにも貧弱だっていうことは ありませんか?。ユーザー空間からは、パスを通してしか VFSにアクセスできないわけでしょう。かといってパスに変わる 何があるんだって言われると、答えられないけど。
>>236 意味のないものを使えるかのように振る舞って、
初級プログラマを悩ませない。
そのような可能性のあるAPIは排除して、
問題のあるプログラムを作成させない。
これは一つの見識。Windowsとは違う点。
>>245 パス以外のアクセス手段を用意しようものなら、ディレクトリ階層と
そのパーミッションないしACLに基づいたアクセス制御モデルがご破算に
なりかねませんが。
まあ *BSD 系だと、vnode を意味する不透明データ
(handle。ただし Windows でいう HANDLE とは別物)
を指定して直接アクセスする fhopen って機能もある
けどね。
>>247 の言うようなセキュリティ上の問題が
あるから root だけからしか利用できないけど。
結論はWin厨から見たらUNIXは元々うんこな仕様だった、と。 これでいいかな。
勝利宣言? 朝鮮人みたい。
ウィルスが感染したらひとたまりもありませんね
・UNIX は実行中のプログラムの削除や改名ができるが、 その代わり、プログラムのパス名を求めることができない。 ・Windows はプログラムが自身のパス名を求めることができ るが、その代わり、実行中のプログラムおよびそれを含む ディレクトリの削除や改名ができない。 どっちをウンコだと思うかは人それぞれだと思うが。俺自身はUNIX厨だからセキュリティアップデートで多くの 場合リブートを必要とする Windows の仕様の方がヤだなー。
しかし、ってことは Windows の場合、リバースポイントの ジャンクションを含むパス名を指定したプログラムを実行中 の場合、そのジャンクションの削除もできないのかぁ。
>>252 ものの良し悪しはともかく、Windowsの方が
厨房にも直感的に理解できる仕様とはいえませんかね。
>224 スレ違いではあるんだが一応。 ベ ー シ ッ ク デ ィ ス ク で も で き ま す よ ? NTFS にしとけば OK なはず。つか実際使ってますが。 FAT32 と間違ってるんじゃない? 普及してない理由としては、標準状態で簡単に使えるインタフェースが用意されていない、 アプリによって挙動が異なる、があると思う。 例えば、適当なファイル、サブディレクトリがあるディレクトリに対するリパースポイント (ジャンクション)をエクスプローラで削除してみれば納得できるかと。 あ、あくまでテスト用のごみファイルでやりましょう。
>>255 >>224 はジャンクションの話をしてるんじゃなくて、
>>206 の言うディスクが足りなくなって増設した
場合に便利な機能==ダイナミックディスクの話を
してるみたいだね。
UNIX で言うところの LVM + Software RAID +
resizable filesystem に相当する機能のようだが
まとめて一つの名前になってるのがなんか変な感じ。
> エクスプローラで削除してみれば納得できるかと。
どうなるん?
>>254 そうね。
UNIXでは乱立のファイルロッキングも
Windowsはバカチョンだしね。
ただし、分散ファイルシステムでは、かなりきつい制約になるけども。
って、これ板違いの話題じゃねえ?
>って、これ板違いの話題じゃねえ? 海栗糞がいらんことで抗弁するから話題がそれていくんだよ
> UNIXでは乱立のファイルロッキングも 昔は確かに乱立してたけど、1990年代の 終わり以降は fcntl の F_GET/SETLK で ほぼ統一ですよ。 NFS 経由のロックも、今はそれなりに 動くようになったようだ。
いまだに advisory lock が基本なのは勘弁してほしい。
え?商用UNIXだとたいていmandatoryの方もサポートしてるけど?
RedHat Linuxは商用Linuxですが対応していますか?
スレが伸びてる!と思って覗いたらこれかよ・・・お前らLv低すぎです。 首 洗 っ て 出 直 し て き な!!
おまえが一番レベル低い。慣用句の使い方間違ってるし。
おもろい。
顔 洗 っ て 待 っ て ろ よ な!!
>>266 今さら言い直しですかw
お 前 L v 低 す ぎ で す
>>262 うん、対応してるよ。
もっとも俺は RedHat のことを指して商用UNIX とは
呼ばないけどなあ。商用UNIXクローンと呼ぶならまあ
分かるけど。
「商用UNIX」の定義議論はスルーの方向で。
270 :
デフォルトの名無しさん :05/02/19 12:27:53
BSDのstruct procはLinuxだと何に相当するんですか?
商用UNIXってどういう定義なの? MacOSXは商用UNIXに含まれますか?
板から言って、ユーザ空間から/proc関係をいじる時だよね? libproc(procps)の<proc/readproc.h>にあるproc_t辺りでどう?
>>268 RedHatLinuxを商用と呼べない、というのには納得がいかないな。
事実上商用として使われているメジャーOSのひとつだろ。
単なるオープンソース寄せ集めじゃなくて、コードのメンテナが付いてて
しかも24時間サポートもやってるわけじゃん。その分カネもかかるけど。
これを商用UNIXと呼ばないで何を商用UNIXと呼ぶの?
まさかコードの由来がどうのとかツマンナイこと言わないよね?
プログラミングに関係ないことは他所でおねがいします。
275 :
デフォルトの名無しさん :05/02/19 14:54:58
276 :
デフォルトの名無しさん :05/02/19 14:56:18
>>273 268はUNIXと呼びたくないだけじゃないの?
lockingについては結局のところOS依存?
なわけねー
>>272 カーネル内のデータ構造体だとどれになりますか?
struct task_structとstruct thread_infoってありますよね。 struct task_struct { .... unsigned long flags; /* per process flags, defined below */ #define PF_ALIGNWARN0x00000001/* Print alignment warning msgs */ #define PF_STARTING0x00000002/* being created */ #define PF_EXITING0x00000004/* getting shut down */ #define PF_DEAD0x00000008/* Dead */ これってどういう意味ですか? task_structってのはBSDのproc構造体とは違うんですか?
どのOSの話だよ。 まあ知ってはいるが、ちゃんと書け。バージョンもな。 あとここよりLinux板のカーネルなんちゃらスレの方が適切。
パーミッションをいじらないとmandatory lockをかけられないよな?
>>283 別に何の問題もないでしょ。
ファイルをロックする権限があるのに、パーミッションを変更
する権限がない状況なんてありえないんだから。
逆に、advisory と mandatory を切替えるのにプログラム側の
対処が全く必要ないっていうのは、大きなメリット。
開発サイドとはまったく関係なく、運用サイドだけで対応でき
るからね。
285 :
デフォルトの名無しさん :05/02/20 20:32:46
質問です。 fcntl (sock, F_SETOWN, getpid () ); fcntl (sock, F_SETFL, O_ASYNC); でSIGIOを受けるようにした後で、 SIGIOが発生しないように、fcntlで設定をするにはどうしたらいいでしょうか?
O_ASYNC←→O_SYNC
287 :
デフォルトの名無しさん :05/02/21 01:22:29
>>273 > これを商用UNIXと呼ばないで何を商用UNIXと呼ぶの?
RedHat が Open Group の conformance test 通ったら
商用 UNIX と呼んであげよう。
Linux is not Unix.
くだらね
>>290 チョー有名な再帰型定義だろ。今さら反応すんな。
>>288 それはcompatibleかどうかの定義であって
商用かどうかの定義とは異なるのでは?
商用Linuxという事でええやんか
だから商用UNIXというのはマシンとの抱き合わせ商法だってば HP-UXとかSolarisとか OSだけなんて商売にならねーって M$でさえPCとのバンドルで儲けてるのに
だからさー、なんで抱き合わせだとかconoformance testに通ったかどうか なんてのが「商用」になるのさ。 抱き合わせは、特定ハードウェア用の、という意味だろ? 全然商用と関係ないやん。
>>295 だ〜か〜ら〜、「商用」の部分に文句をつけてる奴は
誰もいないんだってば。
「商用UNIX」ではなく「商用Linux」
OK?
は?商用UNIXという言葉の定義が不明瞭だという話では?
このスレのレベルが下がりつつあります。
>>292 通んなきゃ、少なくとも商標としての UNIX は名乗れんぞ。
Linuxのどのあたりがテストにひっかかるの?
そもそもLinuxはUNIXを名乗るつもりは毛頭無い
1 名前:名無し募集中。。。 投稿日:05/01/15 02:18:37 UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド
UNIXと名乗るにはライセンシーが必要。 当然、金がかかる。
JEDIと名乗るにはライトセイバーが必要。 金がかかるかどうかは知らない。
Linuxってスレッドに別のアドレス空間を割り当てることもできるの?
それスレッドとは言わない。
それはスッドレだな。
別に不可能ではないだろう
UNIXにRead/WriteProcessMemoryみたいなのありませんか? プロセスのメモリ覗きたい
よく分らんけどptraceとか?
それであってる。
314 :
デフォルトの名無しさん :05/02/25 01:14:14
314げっち
時間を指定して 指定時間後に XCloseDisplay exit したいのですが、その指定時間までの間にもXNextEvent の処理を受けたいのですが この場合は どのように書くのでしょうか? XNextEvent をループでまわして そのループの中でtimeで計算して指定時間後に抜けようと思ったのですが XNextEvent は、イベントが起きるまでそこで止まってしまうのでループでまわすことができません すいませんが、教えていただけると幸です
>>315 イントリンシックスにタイマーなかったっけ?
それなら時間になれば勝手にコールバックが呼ばれると思うが。
XtAddInput() だな。Xt 使ってるならそれでOK。 Xlib しか使ってないなら ConnectionNumber() で ファイルディスクリプタを求めて、poll(2) かな。
なに寝惚けてるんだ俺は。 s/XtAddInput/XtAddTimeout/
>>282 2.6のkernel/fork.cのdo_fork関数とcopy_process関数を読んだら分りました。
しかしこのネーミングなんとかならないですかね。もう手遅れかな。
>>317 ありがとうございます
Xtはつかっていず、 Xlibだけです
ConnectionNumberとpollを調べてみたのですが
プログラミングを始めたばかりでよくわかりません
poll の第3引数にタイムアウトまでの時間を指定すると
言うことしかわかりませんでした・・・
すいませんが、 簡単にサンプルを書いていただけませんでしょうか?
すいませんが、 よろしくおねがいします
俺、納品作業中で逃避したい気分だから答えちゃう。 たぶん、こんな感じ。
*** piyo.c.org Fri Feb 25 23:51:21 2005 --- piyo.c Sat Feb 26 00:07:42 2005 *************** *** 1,6 **** --- 1,10 ---- #include <stdio.h> #include <X11/Xlib.h> #include <X11/Xutil.h> + #include <sys/types.h> + #include <poll.h> + #include <time.h> + #include <errno.h> #define STRING "Hello, world" #define BORDER 1 *************** *** 49,54 **** --- 53,59 ---- XSizeHints xsh; char *geomSpec; XSetWindowAttributes xswa; + time_t deadline = 0; if ((dpy = XOpenDisplay(NULL)) == NULL) { fprintf(stderr, "%s: can't open %s\n", argv[0], XDisplayName(NULL));
*************** XMapWindow(dpy, win); for (;;) { + time_t now; + struct pollfd fd; + int rv; + + if (deadline != 0 && !XPending(dpy)) { + time(&now); + if (deadline <= now) + break; + fd.fd = ConnectionNumber(dpy); + fd.events = POLLIN; + rv = poll(&fd, 1, (deadline - now) * 1000); + if (rv == -1) { + if (rv == EINTR) + continue; + perror("poll"); + exit(1); + } + if (rv == 0) /* timer expired */ + break; + } XNextEvent(dpy, &event);
deadline が 0 だったら終了しない。 deadline に、終了時刻 (UNIX Epoch からの秒数) を入れておくと、 そのタイミングで終わる。
あ、すまんちょっと間違えた。 if (rv == EINTR) は、 if (errno == EINTR) が正しい。
piyo.cってなんだよww
しかも何故にpatchなのかw
セキュリティ対策です
ワロス
>>325 for 分の、
(;;) ← が、なんかモサモサしててカワイー
↑ for 文の、
334 :
デフォルトの名無しさん :05/03/01 09:26:59
C, C++(gcc)で任意の文字コードをEUCやUTF-8に変換したいのですが, 良いライブラリがあったらお教えください。 ちょっと探してみたんですがシンプルで使いやすそうなのが見つかりませんでした。
ふつー、iconv(3C) くらいあるでしょ。
>336 iconvだと変換元の文字コードを指定しなきゃいけないですよね。 それは仕方ないのかな… PerlのJcode.pmみたいにお手軽に使えるのはないんですかね? sylpheedってMUAのソースにあるcodeconvあたりを流用するのが良いような気がしてるんですけど。 やっぱ定番はiconvなんですか?
iconv なんてよんでる? 私はあいこんぶ
340 :
335 :05/03/01 17:47:07
>>338 あー、なるほど。自動判別「も」したい、と。
そういうのって、用途 (というか、入力がどこまで
限定できるか) に拠って全然違ってくるからねぇ…
UNIXてどこで役に立つですか? このスレよんでたら眠くなってきた。
任意の文字コードの自動判別って可能なのかね?
もちろん、完全にやるのは不可能。 文字コードを自動判別しないといけない時点で負け。
>>342 なんか最近は自作自演で回ってるみたい。
俺も眠たくなってきた。
nkf
ELFフォーマットってUNIX共通ですか? 実行ファイルに細工したいので UNIXの実行ファイルのフォーマットを教えてください。
1年くらい前にも見たな。ウィルスでも作るのか?
Windowsのリソースの真似事がしたいのです。 わかりますか?リソース
過去ログでsharとか言ってた人がいますが、 セキュリティの減ったくれもないので使いたくありません。 WindowsでいうPEへのセクション追加ぐらいの手間で解決したいのです。
アーキテクチャに依存しないデータは、あまりバイナリの中には入れないよねUNIXの場合。
コメント領域があったと思うけど勝手に使えば
こたえる気がないなら答えなきゃいいのに。
リソースってようするに初期済みのデータだろ?
>>351 だから何ですか?
一般論を聞きたいのではなく、
入れたい場合が出てきたということです。
>>352 詳しく教えてください。
>>354 リンカでどうやって繋ぐのでしょうか?
>>356 初期済みのデータが初期化済みデータのことならその通りです。
そういえばX Windowってリソース管理どうなってんの? アイコンとかって外部ファイル? もしかしていちいちパス指定で取ってきてる? パス管理複雑にならない?
Cで初期化された大域変数をリンクするのと同じということでは? ELFの話はLinkers & Loadersていう本にそれなりに載ってる気がする。
X or X Window System
つまんねー揚げ足すんなよ おまえ、つまんねー奴って言われるだろ
>>359 そういうことでしたら
既存の実行ファイルに対して追加したいので
リンカを使う方法は無理です。
>>357 >だから何ですか?
漏れは351じゃないけど、別に多少関連した雑談や世間話くらいしても良いと思うんだけど・・・
質問と回答以外はスレ違い、っていう立場もあるのかもしれないけど。
>リンカでどうやって繋ぐのでしょうか?
テキトーなバイナリなりXMLなり文字列なりをソースとして、
const unsigned char appResourceHoge[] = { 0x11, 0x22, .............. };
みたいなソースファイルを出力するスクリプトなんかを使う。
Xのコードとか書いたことがあればイメージできると思う。
実行ファイルに細工したい(ソース無しでリソースだけ変更したい)って用途には向かない。
なんだから偉そうな質問者様に対してこんな返事しかできなくてごめんね。
なあ、俺もUNIXでトロイ作りたいんだけど、 実行ファイルのフォーマット教えてくれよ
>>362 ん?既存の実行ファイルを弄らないなら埋め込んでも意味ないだろ?
埋め込んだ上でそれを使うように修正しないと
>>363 うわ、そんなことできるならはじめからやってるだよ
どうやらここのUNIX使い様はリソースって概念がわからんらしい
>>365 Windowsのリソースのように、バイナリに埋め込まれていてかつ後から
編集できるデータ格納方法は無いだろうか、という質問だと思うが。
コード自体は自分で書くのだろう。
あらかじめリソース予定地とする空のゴミ領域を作っておいて、 後でマジックナンバーか何かで検索して挿げ替えるとか、かなあ。
ユーザに差し替えさすならもっと優しい方法にしろ。 自分で埋めるならリンカ使えるだろ 人のアプリをどうこうするなら、Winのリソース差し替えのようにはいかない。
だからELFの.commentに好きなフォーマットでデータ埋め込んで、 実行時にファイル開いてELFヘッダからその領域を見ればいいんじゃ。 OSのバグ踏む可能性あるけど
そもそもUNIXの実行ファイルはELFフォーマットなの? それでいいの?
ELFが多いだろうけど全部じゃないんじゃない?
UNIXのOSはリソースというものを扱えるの? もし、OSの支援が無いならば、 実行プロセスが自分自身の元になった実行ファイルの所在を 正確に把握する手段を持たなくてはいけないはず。 これって、少し前に出ていた設定ファイルの議論と重なるような気がする。
なんでここの連中は仮定で話したがるかね ちゃっちゃと調べて実際をどうなのかを書けよ
> UNIXのOSはリソースというものを扱えるの? リソースにもいろいろあるでしょ。 メモリとかディスクとかいったリソースならもちろん扱える。 人的リソースみたいなものは、OSの守備範囲外だから当然無理。 てゆうか、そもそも質問が意味不明。 > 実行プロセスが自分自身の元になった実行ファイルの所在を > 正確に把握する手段を持たなくてはいけないはず。 > これって、少し前に出ていた設定ファイルの議論と重なるような気がする。 実行ファイルのディスク上の物理位置は正確に把握している。 パス名は把握しても意味がない (Windows と違い、実行ファイル のパス名が存在しなくなっても実行を継続できる) から、そんな ものは記録しないってのは、このスレでさんざん既出。 なんか、基本的な素養に欠けているって感じの質問だなあ。 ソースとまでは言わんから、せめて本ぐらい読めというか。
そうはいかんざき
>>376 質問スレだから。
質問だけするのが正しい態度。
>>377 だったら最初からこの本読めとかリンク出せよヴォケ
で、アイコンとかダイアログのリソースはどっから取ってきてるのかね?ん?
ある一人のレスが浮き上がって見える
>>377 >リソースにもいろいろあるでしょ。
この流れだとWindowsや(旧)Macで言うところのリソースのことではないでしょうか。
>>381 WineではPEファイルから取ってくるみたいですよ。
たった今、UNIXに挫折したとです。
UNIXで良書なんて見たことないから どこに載ってるか書いて欲しいなあ。
>>384 !!!そのキーワードは、
いっちゃいかん!!
WindowsみたいなリソースはOSはサポートしないだろう。
リソースがなにを指しているか分からないと、
本の名前も出せないでしょ。
>>381 みたいな質問している人にOSの本勧めても
無意味だし。
>>381 Xの場合、ダイアローグの表示はツールキットの
仕事なのでツールキットの種類によりけり。
アイコンの表示はウィンドウマネージャの仕事
なので、ウィンドウマネージャによりけり。
(ツールキットが決まると、ツールキット標準の
ウィンドウマネージャが決まる場合もある。)
知りたいツールキットとウィンドウマネージャの
種類を具体的に述べれば、もっと具体的な答も
出せるかもね。
いにしえのXtとtwmで言うなら
/usr/X11R6/include/X11/{bitmaps,pixmaps}/
と /usr/X11R6/lib/X11/app-defaults/ あたりが
標準的な場所なわけだが。(アプリケーション固有
の場所に置くこともできる。)
ツールキットは狭義ではOSの一部ではない。
>>387 が言ってるのはそういう意味。
つか、ELFをばらして好きに弄ってもう一回固めればいいんじゃないの?
UNIXを捨てた おれは正解を選んだ
452 名前:デフォルトの名無しさん 投稿日:05/02/28 01:15:33 もうUNIXで仕事したくないのに UNIXの仕事がきます。 どうすればよいですか? 453 名前:デフォルトの名無しさん 投稿日:05/02/28 01:18:47 仕事があるだけマシってもんよ そうだろう?兄弟 454 名前:デフォルトの名無しさん 投稿日:05/02/28 01:26:38 もういやだ! もういやだ! もういやだ!
あほくさ
ELFフォーマットを採用してるOSを上げてください。 自分はLinux以外知りません。
>>394 商用、フリーを問わず、現役のUNIX系OS、ほぼ全て。
ELF の規格を定めたのは、AT&T と Sun じゃないかな。
linux は最初のうちはa.outしかサポートしてなかったね。
じゃ、とりあえずELFでトロイ作ってみるよ。 あんがと。
Windowsヲタは固定観念のかたまりだな...
>>394 Solaris, *BSD, IRIX, SVR4 等...
最近は組み込み用途の開発ツールも ELF を吐き出す.
BSD系は最近だな
CPUの種類やOSの種類が異なると、同じ elf でも 使える命令セットやシステムコールが異なるので、 同一のトロイの木馬を複数のOSに対応させるのは 面倒なんだけどね。まあやれば当然できるが。 つうか、そういうものを作るだけの知恵のある奴は、 ふつうはもう少し建設的なことに暇を使うと思うんだが。 そういう、できて当たり前で、人が困るだけのプログラム を作るのは、そういうことの判断ができない頭弱い奴だけ じゃない?
商用UNIXだとしっかりしてるんだけどね。
402 :
デフォルトの名無しさん :05/03/01 22:05:13
お前ら落ち着け
さては藻前も釣りだな。
UNIXにもノートンみたいな製品を進出させるには トロイとかウィルスばらまかないとね 需要のための供給
だよもんウィルスだよもん
1文書に複数文字コードが入ってるとか,そういうややこしいのじゃなくて
1文書が1つの文字コードに限定されてるんです.
>>341 そうです.自動判別”も”したいんですけど,
どうも良いライブラリがみつかんないんですよねぇ.
>>344 >文字コードを自動判別しないといけない時点で負け。
orz.
完全に自動判別すんのが厳しいのは分かってるんですけど…
大体でよいんです.
>>346 nkfに渡すのも考えてるんですけど…
ライブラリ化されてて使いやすいのはないものかと.
コードに日本語でコメントが入っているというだけで 使う気がしなくなるのは俺だけか?
↑ソースクレ厨
↑車輪を何度も再発明して貴重な人生を無駄にする香具師
>>410 ↑見ず知らずの他人の趣味を「人生の無駄」呼ばわりする香具師
>407 ありがとうございます。よさげですね。 g++だと何か問題があるんですかね? ちょっと試してみます。
413 :
デフォルトの名無しさん :05/03/03 23:45:23
各種UNIXでcursesの互換性ってどの程度まであるの?
415 :
デフォルトの名無しさん :05/03/05 11:28:09
問題ないくらい
416 :
デフォルトの名無しさん :05/03/07 13:17:21
linuxだとアドレス値を整数演算するときに unsigned longに入れてるんだけど、これって 128bitCPUが出てきたときに問題にならないの?
問題になるかならないかは不明。 128bit CPU が実用になる時代が本当に来たとしても、 その CPU で long>=128bit なら問題にならない。 long<128bit なら問題になる。 一般論としては、そういう用途には unsigned long では なく、uintptr_t ないし intptr_t を使うべき。 この型は C99 なら #include <stdint.h> すると定義 される。
418 :
デフォルトの名無しさん :05/03/07 13:42:04
>>416 longを128bitにするから問題なし。
仮想メモリアドレスの時代に型の大きさなんて気にしても仕方がないと思う ほとんどの場合unsignedにする意味なし Linuxのプロセスメモリマップの使い方でも調べたほうが賢明
>仮想メモリアドレスの時代に型の大きさなんて気にしても仕方がないと思う なんだこりゃ
>>419 さんは、
>>416 さんが 「 unsigned 」 を疑問視されていると受け取られた
ようでつね。
対して、多くの方々は
>>416 さんが疑問視しているのは 「 long 」 の方だと・・・
どちらにしても、
>>417 さんの答えで解決でつよね?
UNIXが採用してるLP64というCの型システムだけど、
128bitCPUが出てきたときは、LP128というものを定義して、
unsigned longはつねにポインタサイズと同じビット長になる
ことを暗に想定してるのかな?
LP128だと
short(16),int(32),long(128),long long(128)
こんな感じなのかな?
>>128 >一般論としては、そういう用途には unsigned long では
>なく、uintptr_t ないし intptr_t を使うべき。
ですよねえ
システムによって定義されるのはたった数個の型だけど、 これがいろんな型にtypedefされて、またそれらが インターフェイスの定義に既に使われていたりするところが ややこしいね。
>>422 予測できる将来に128bit CPUが実現するかどうかは
良く分からないけど、もし実現したらUNIX系は
short:int:long:long long=16:32:64:128 になるん
じゃないかなあ。だって、1/2/4/8/16 全てのサイズの
整数型が使えないと不便でしょ。
今やuintptr_tがあるから、long がポインタ変数を
保持できるとかいった仮定を設ける必要ないし。
LP64・・・longとポインタが64ビットに ILP64・・・intとlongとポインタが64ビットに LLP64・・・long longとポインタが64ビットに ILP32・・・intとlongとポインタは32ビット(今の32bit向けCコンパイラはこれかな?) LP32・・・longとポインタは32ビット、intは16ビット こんな感じ?
TRANSITION FROM CURRENT INDUSTRY PRACTICEも読め。
128bit化なんてその時になってから泥縄的に考えればいいんだよ。 もし動かなかったらIBMに金出させて力技で修正すればいいだけ。 今困っていない事を今対応するな。これがLinuxのモットーだ。
128bit が主流になる頃はおいらは隠居してる. 勝手にやってくれ.
というか32→64の経験でスキームは固まっている。
ところでIPV5って64bitだったの?
型同士の相対的な関係と実際のデータ長っていう 二つの視点で見るとこんなかな。 UNIXは32bit,64bitそれぞれILP32とLP64だけど、 char:short:int:longそれぞれ ILP32 8:16:32:32 32(pointer) LP64 8:16:32:64 64(pointer) ILP32からLP64への移行で変わったのは、 (int,long)と(int,pointer)の相対的関係が変わったことと、 longとpointerの実際のデータ長が変わったということ。 char:short:int:long:long long ILP128 8:16:128:128:128 LP128 8:16:32:128:128 LLP128 8:16:32:64:128 128bitCPUにおいてはこんな感じのがありえると思うけど、 今UNIXで32bit64bit両方に通用するコードとしてlong=pointerという 仮定の元にコードを書いてしまうともうLP128しかないと思うんだよね。 というかILP32から64bit化においてLP64を採用した時点で long=pointerという想定を受け入れてるように見える。 ILP128はちょっとありえないね。LP64でせっかくintの実データ長を32で固定した意味がなくなる。 LLP128が1番よさそうに見えるけど、LP64からlongとpointerの相対的関係が異なる。 素人考えだとLP128しかなさそうに見えるけど。
つーか128bit時代にもなってLinux使ってたとしたらソフトウェア界の敗北だな。
> LP64からlongとpointerの相対的関係が異なる だから intptr_t, uintptr_t を使えってばさ。 それで問題なし。
32bitマシンって1960年代にできて、64bitマシンって1990年頃 だよね。30年くらいかかっている。 同じような指数的ペースで発展する(1年で1bitくらい)として 128bit マシンができるのは、2050年を過ぎたぐらい… 俺は死んでるな。
UNIX/Cを潰したいメーカーが96bitマシンとか出して来たりして。
なぜbit数が増えるのか という根源的な疑問は起きないのか?
基本的にはストレージのサイズが増えるからという要因が 一番大きいでしょ。(AS/400 みたいに、アドレス空間の ほとんどを無駄に捨てざるをえないアーキテクチャだと 話は別だが。) 問題は、現在の指数関数的なストレージサイズの増大が、 あと50年続くかどうかと、たとえ続いたとしても、そんなに 使い道があるかどうかだな。 64ビットでも、人類ひとりひとりに、それぞれ2GB以上も あるというのに。
いつの時代もそういう近視眼的な発言をする奴がいたわけで
いつの日にか、家庭向けPCで地球シミュレーションが軽く動く日がくるんだよ
昔、12bit マシンってのもあったぞ。
>>439 438 じゃないんだけど, そのころはおいらは隠居してるわけだ.
興味ねぇ.
>>438 > 基本的にはストレージのサイズが増えるからという要因が
> 一番大きいでしょ。
数値計算とかやってると, アドレッシングできる領域がどれだけ増
えても実際の計算速度が上がらないと, メリットは小さい.
やっと 64bit を有効に使える計算速度に達したってのが現実では?
# DB 検索なんかでもそぉだと思うぞ, エンジン作ってる連中にし
# てみれば...
>>429 ダウト。
データベースとか情報検索とかはとっくに64bitないと話にならなくなってる。
ファイルシステムが2G4G以上をサポートしてる時点で64bit化の恩恵を受けられるわけで。
>>444 ブー。mmapが使えないと結構苦しい。
なんか444へのレスとするのは意味不明だな。ごめん。
32bit,64bitそれぞれのシステムでintとlongを使い分けてるけど、 これは一言でいってどういう事情によるものなのかしら? Linux linux/include/asm/posix_types.h BSD sys/arch/`uname -m`/include/ansi.h /*i386*/ #define _BSD_SIZE_T_ unsigned int #define _BSD_CLOCK_T_ unsigned long /*amd64*/ #define _BSD_SIZE_T_ unsigned long #define _BSD_CLOCK_T_ unsigned int
Linuxの場合 /*i386*/ typedef unsigned int __kernel_size_t; typedef long __kernel_clock_t; /*amd64*/ typedef unsigned long __kernel_size_t; typedef long __kernel_clock_t;
つまりポインタをlong型で扱う奴はバカint型で扱う奴はもっとバカってことでいいですか?
>>443 > データベースとか情報検索とかはとっくに64bitないと話にならなくなってる。
そぉゆう意味で言ってるんだが...
「やっと」ってゆう言い方が悪かった. すまん.
おれ的には, やっと 10年くらい前からってな感覚だったもんで...
当初からそれなりに, 64bit マシンはメモリバス帯域広いし, マル
チプロセッサ化するために, バスのクロスバ化なんて, ハードウェ
ア的に見た場合, 非効率以外のなにもんでも無いようなことまでやっ
てるところもあるし...
それ以前は, こんなぜいたくはスパコンにしか許されなかったわけ
だから...
452 :
デフォルトの名無しさん :05/03/08 09:07:01
printfでtypedefな型を扱えればいいんだが
>>448 BSDの方の型は、ユーザー空間にも公開しているものなので、
一度決めると変えない方がいいんじゃないかな。まあユーザー
プログラムが行儀良く書かれていれば、同じサイズの型に
変えても問題ない筈だけど、行儀良く書かれてない場合、
int と long の食い違いが生じると、lint では警告さえる
ケースがありそうな。
あとは、その CPU アーキテクチャの ABI の仕様書に書かれて
いる型名に合わせてるとかもあるかも。
Linux の方はカーネル内部用の型に見えるなので、良くわかんない。
>>452 C99 なら一応できるよ。
intptr_t x; なら
#include <inttypes.h>
printf("%" PRIdPTR "\n", x);
とか。
typedef intptr_t MyType;
してるなら同時に
#define PRIdMYTYPE PRIdPTR
もとしておいて、MyType の printf には
PRIdMYTYPE を同様に指定すればいい。
size_t も "z" 修飾子を使ってどうような
ことができる。
>>454 > size_t も "z" 修飾子を使ってどうような
> ことができる。
ついでにここも詳しく……
128ビットCPU(データバス幅>=アドレスバス幅>=64bit)なCPUは 相当長い間必要ないだろ。データバスが128bitなのはGPUじゃ 当たり前になってるんだろうけど。 16bit -> 32bit アドレス空間は6万5千倍。 32bit -> 64bit アドレス空間は42億倍。 このアドレス空間を使い尽くすのっていつ頃? ヘタしたら人間が絶滅してるかもなw
>128ビットCPU(データバス幅>=アドレスバス幅>=64bit)なCPUは ↓ 128ビットCPU(データバス幅>=アドレスバス幅=128bit)なCPUは
>>455 z A following integer conversion corresponds to a size_t or
ssize_t argument. (Linux libc5 has Z with this meaning. Don't
use it.)
#define PRIdSIZE "z"
こういうのあんまり好きじゃないが。
あ、標準では定義されてないけど458のように定義すりゃ同じようにできるよ、って 話かな?
そゆこと。でも
>>458 みたいにするんじゃなくて
#define PRIdSIZE "zd"
の方がいい。小文字の「d」の意味がなくなっちゃうから。
#define PRIxSIZE "zx"
とかしたいしね。
補足。 C99を前提にしていいソフトなら、#defineせずに "z"を直に書いた方がいいだろうけどね。 #defineする必要があるのは、C99より前の処理系 への移植を考慮する必要があるケースと、あとは typedef size_t MyType; #define PRIdMYTYPE "zd" のように、自分で定義した型に対して printf の フォーマット文字列を提供したい場合。
463 :
デフォルトの名無しさん :05/03/09 23:29:27
linuxで、mallocの関数の中身を知りたくて探してるのですが見当たりません。 glibcのソースを探してるのですが。。どこにあるのでしょうか?
465 :
463 :05/03/09 23:37:42
ダウンロードした場所ですか? うーん。glibc-xxx/malloc/malloc.cの中とかその周辺とか調べたんですがないんですよ。。
入れなきゃ無いわな
勝手にソース覗くのはストールマンに失礼ですよ。
検索したらやっとそれらしいのにヒットした。。
http://www.gelato.unsw.edu.au/linux-ia64/0111/2457.html >BTW, calloc is included in malloc.c.
> You would like to open the file glibc-2.2.4/malloc/malloc.c,
> and then you will be looking for cALLOc. It is calloc function.
そういえばmALLOcみたいな変なのがあったな。。
今ソースがないので明日調べてみます。お騒がせしました。
UNIXのソースってなんでこんなに汚いの?
お前の顔より綺麗だ
なんで俺の顔知ってんの?
基本
おそらく基本的な質問だとおもいますが -lpthreadのリンクを下のようにMakefileで記述するとcannot find -lpthreadという エラーがでてしまいます。 test:main.o sub.o gcc -o test main.o sub.o -lpthread main.o:main.c test.h gcc -c main.c test.h sub.o:sub.c test.h gcc -c sub.c test.h コンソールで一つずつコンパイルしていけば問題はないんですが・・・ よろしくおねがいします
-lpthreadをオプションと認識していないみたいですな。 それはともかく、スレ違いです。
>>475 Unixプログラミングの場合、スタンダードなIDEがないので、
Makefileやコンパイルオプション指定をする段階から
すでにコーディングの戦いが始まっていると思うのは俺だけですか?
ある程度以上の規模なら、IDEを使おうと使うまいと 素敵なビルドの仕組みを作ることは コード自体を書くことと同じくらい重要でぷ。
だからあれほどUNIX捨てろって言ったのに・・・
Windowsだとマウスでポチポチやるだけで終わる作業なのにねえ。 UNIXって頭悪すぎ。
みえみえの展開に萎え
>>474 -lpthread の前に変なコード入ってないか od ででも確認してみたらどうだろう。
>>480 みえみえというか、すでに1つのお約束になってますな。
お約束は美しい。
>>481 もう一回書き直してみましたけど直らないです
あとコンソール直打ちでもcannot findになってしまいました・・・
コンソール直打ちでうまくいってたときと、ダメなときの違いはなんなのよ。 libpthread.* がリンカから見えてないんじゃない?
たぶん環境変数 LD_LIBRARY_PATH が設定されてたとか、 そういう話じゃないの? でも libpthread が /usr/lib にない OS ってなんじゃろ? NetBSD-1.6 とか?
>>474 UNIXの種類は何か書いた方がいい。
それ専用の板やスレに行くとモアベター。
OSはFreeBSD4.11です。専用スレへ行ってきます スレ汚しすいませんでした
なんか-lpthreadを-pthreadにしたらリンクできた・・・ ちゃんと動いてるし・・・いいんだろうか・・・(´・ω・`)
>>488 いいです。
-pthreadで、マクロの定義、ライブラリの適切な処理等を行います。
>>489 どうもありがとうです
前にコンソールでやったのは-pthreadだったかもしれなかったです
この謎仕様も悪しきUNIX譲りですか?
ここはUNIXプログラミング質問スレですが何か?
やっぱWindowsの方がちゃんとしてるな。
スレッドってそんなにいいのか?
はい。
俺よりもいいのか?
ごめんなさい。
roz 違う… orz
・・・
>>491 ハァ?プログラミングは「UNIXこそが仕様」ですが何か?
>>500 -pthreadはUNIX仕様じゃなくて、gccの仕様だろ。
マニュアルに書いてある仕様を謎と呼ぶのは
マニュアルも読めない厨房だけだがな。
マニュアルってどこに売ってるんですか?
groff出力のテキストまたはポストスクリプトが、 アマゾン川流域で、約1000ペソ。
もうPOSIXだのANSIだのめんどくさいよ ぜんぶMSのWindowsにあわせればOKだよ。
WindowsのmessageとPOSIX Message Queueってどう違うの?
商用UNIXだったらしっかりしてるんだけどね。
UNIXやWindowsで動く自作言語を作っているのですが、 UNIXの例外処理はどんなロジックを使えばよいでしょうか? Windowsの場合はSEHという機構を使ってます。 Javaでいうfinallyやcatch辺りの処理の話です。
>>505 MSのWindows(ゲイツ)は、POSIXだのANSIにあわせるよう努力してくれるが、
逆の努力は誰もしてくれない。
Unixに腐敗臭が漂うのも無理はない。19世紀の老大国を見る思いだ。
ようするにUnixは何をやるにしてもダメっていうことね。
そうだね。UNIXも使えない人な何をやってもダメだね。
皮肉でしか返せないんだね
>>508 実装言語による。
C++で書くなら、C++標準の例外処理処理機構を使えばいいんじゃない?
Cで書くなら、自分で明示的に制御するしかない。
WindowsがやってるPOSIXに合わせようとする努力って なんの話? SFUのこと言ってるのかな? だったらUNIX上での似たようなものとしてはWineとか Monoがあるよ。 というわけで、逆の努力もしてるってことで終了。
コンパイラをANSIに対応させるのは当たり前だし WindowsNTにPOSIXサブシステムがあったのは「POSIXに準拠してないと導入しない」と アメリカの政府機関が言い出したからなんだけどな
>>515 NT系Windowsの POSIXサブシステムはそういう話だね。
はっきり言ってあれは全く使いものにならんかった。
FIPS規格に通ることだけが目的で、実用性ゼロ。
でもSFUの方は結構ましだと思うけど。
もちろん、ソースレベルの限定的な互換性しかないから、
バイナリ互換性を提供してくれるWineやMonoには劣るけど。
Unixer達はなんだかんだ言いながらもWindowsのアプリを動かしたくてたまらないちうことやね。 憧れちゃいますかそうですか。
別に好きで使いたいわけじゃないんだけど、上司や客が WordやExcel形式で文書を送ってくるので仕方ないっすよ。 という俺はVMwareのクライアントOSとしてWindowsを動かす派。 自分で一から書く文書には、もちろんそんなの使わないけどネ。
結論。 Unixerはいらん苦労が好き。
>>518 今ならOpenOffice使うって手もあるけどね。
互換性はまだまだ低いけど。
UNIXは昔からtelnet(というかteraterm)経由ですが何か? それで問題起きたことないなあ。 つーかteratermなかったらUNIXなんてとっくに死滅してたね。 おまえらもっとteratermの作者に感謝すべきだと思いませんか? つーかWindows上からteratermの快適さに比べたらX?ナニソレって感じ。 あんなのインスコしてもディスクの無駄。 どーせemacs動けばいいしね。
おっと誤爆した。
teratermを理由もなしに誉めるようじゃ……
telnet上でファイルをやり取りできたらすべての作業がtelnetでやるんだけどできる?
できるね。
>>525 Unixユーザ特有の思考停止だな。
ターミナル経由でなければできないことは、
想定しないように脳内で排除フィルタが発動する。
>>526 確かに面倒ではあるが、uuencodeして標準出力に出力、
telnet端末ソフトにログ機能などがあるだろうからそれを利用して端末側でuudecode。
自分の知識のなさを他人の思考停止に置き換えないように。
訂正。 s/telnet端末ソフト/telnet端末ソフト側/ Windows標準のtelnetでも(windowsの機能を利用して)copy&pasteくらいできるだろ。
関係ない話ししはよそでおねがいします
結論から言うと、できないことだらけなのだが、 Unix信者には、「それはそもそも、XであってUnixではない。」 と嘯きつつ逃亡する退路が確保されているので、 Unix信者を追及するのは時間の無駄。
時間の無駄だと言いながら、自分が最後に何か言わないと気がすまないのかね。
ほりえもんもUNIXにビジネスチャンスは無いってさ
UNIXの歴史を物語りみたいに仕立て上げたのって嫌い。文系厨みたい。 ただの実装史と割り切って書かれてる、スティーブンスの本は好き。
がたりり?
teraterm使ってる時点で既にUnix信者じゃないと思うけどね。 そういう俺は当然ktermですよ。mltermでも可。(w
むつかしくてわらえない
そもそもUNIXでプログラミングする事なんてあるの? teratermみたいにUNIX使うためのWindowsプログラミングでもしてた方がいいんじゃない?
時間の無駄だと言いながら、自分が最後に何か言わないと気がすまないのかね。
>>538 そりゃあるよ。だいたい世の中の7割のWebサイトは
(Linuxを含む)UNIX系OSで動いているんだしさ。
ソフトウェア開発作業を必要とする大規模なサイト
になるほどUNIX系OSのシェアは上がるし。
googleだってamazonだって、Linuxとかそういう
UNIX系OSで動いてるのは知らない?
てゆうか2chもUNIX系OSで動いているわけだが。
542 :
デフォルトの名無しさん :05/03/14 19:45:32
てゆうか2chもWindows系OSで動かせばいいんだ。
実際問題として、ライセンスにかかる価格の問題だけ 考えても Windows にすることはありえないけどね。 Windows XP だとクライアント数10までというライセンス 制限にひっかかるから、Windows 2003 Server が必要。 これで 1台あたり10万円×台数分の金がかかる。 これに対し、今みたいに FreeBSD や Linux を使ってれば ライセンス台はタダ。 Windows にするだけで性能が向上して、台数が1/10で済む とかいう効果があるのならともかく、そんなことも全然ない わけだし。
宗教的にUNIXだよもん
545 :
デフォルトの名無しさん :05/03/14 21:34:14
Windowsのほうが得意なことはWindowsでやればいいものを、 わざわざkterm上でやって「難しいなあ」とか喜んでる奴は末期症状
546 :
デフォルトの名無しさん :05/03/14 21:34:25
別に難しいことないけど。 てゆうかWindowsで好みの設定にするのは俺には難しい。(w UNIXだとcp .??*だけですむので俺には簡単。 もちろん、君にとっては逆だろう。いいじゃん好きずきなんだし。
つーかWindowsはデフォルトで快適だからなあ。
関係ない話しししはよそでおねがいします
550 :
デフォルトの名無しさん :05/03/14 21:54:35
かたいこと言うな
UNIXはいまだに基本がC言語なのがいかんと思う。 その上信頼性もクソもないshで書きなぐられたシステムなんか保守したくないだろ?
GNUマンセー
そういや某国はUNIXに進出しようとして失敗したな。
554 :
デフォルトの名無しさん :05/03/14 22:33:54
>>551 シェルスクリプトは滅多にエラーにならないからエラー処理は
必要なくてとても信頼できるらしいです
うちのUNIX暦20年の課長(40)が言ってました
エラーになっても気付いてないだけじゃないんですか、と言おうと
しましたがやめておきました
何について信頼できないとか言ってるのかよく 分からないんだが、シェルスクリプトだって エラー処理ぐらいできるし、俺はやってるよ。
たぶんそれぞれのエラー処理の意味がちがってるとおもう
>>508 コンパイラですかインタプリタですか?
その自作言語の実行スタックはどういう構成でしょう?
schemeのインタプリタ、コンパイラは参考になると思います。
すみません、質問させてください。 こういうプログラムを書いたのですが、 #include <iostream> main() { cout << "hello"; } gcc test.cppと書いてコンパイルすると、 /tmp/ccHDOsZp.o(.text+0x19): In function `main': : undefined reference to `std::cout' /tmp/ccHDOsZp.o(.text+0x1e): In function `main': : undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std ::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits <char> >&, char const*)' /tmp/ccHDOsZp.o(.text+0x4a): In function `__static_initialization_and_destructio n_0(int, int)': : undefined reference to `std::ios_base::Init::Init[in-charge]()' /tmp/ccHDOsZp.o(.text+0x79): In function `__tcf_0': : undefined reference to `std::ios_base::Init::~Init [in-charge]()' /tmp/ccHDOsZp.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' collect2: ld はステータス 1 で終了しました というエラーがでるのですが、C++のコンパイルの仕方が間違っているのでしょうか。
g++もしくは-lstdc++
ごめんなさい、std::を忘れてました。
>>559 対処法はあるのでしょうか・・・。よかったら教えてください。
スレ違い。 gccスレで聞け。
>>559 は嘘。
コンパイルのしかたが間違っとる。
>>560 が書いているように、gcc じゃなくて g++ か
あるいは c++ コマンドを指定する必要がある。
ここは盥回しスレですか。
↑ 盥・・・すごい字があるんだな、知らなかったヨ
566 :
デフォルトの名無しさん :05/03/15 10:03:09
もう10
>>558 ソースコードが間違ってます。
冒頭で、
using namespace std;
とするか、std::coutとするのが今ん流儀です。
それ以外は処理系依存の動作。
C++の名前空間がうんこなのは仕様です。
574 :
デフォルトの名無しさん :05/03/16 01:00:29
574
575 :
デフォルトの名無しさん :05/03/16 01:01:00
575
576 :
デフォルトの名無しさん :05/03/16 01:01:41
576
>>587 ソースコードが間違ってます。
冒頭で、
using namespace std;
とするか、std::coutとするのが今ん流儀です。
それ以外は処理系依存の動作。
って書こうと思っていたのにッ…orz
もうこのくらいでやめとこうや。 な?
|
582 :
デフォルトの名無しさん :05/03/16 11:16:00
age
583 :
デフォルトの名無しさん :05/03/17 16:47:56
gdb でデバッグするために gcc で -g をつけてデバッグ情報つきの オブジェクトファイルを作ってから リンクしました. ところができた実行ファイルを gdb しても デバッグできません. たとえば list しても No symbol table is loaded. Use the "file" command. とでます. -g をつけるとたしかに .o ファイルはサイズが増えていますが, 最終的にリンクすると,できた実行ファイルは -g を つけようとつけまいとなぜか変わらないんです. なぜでしょうか?
リンクするときに-gをつけてないとか。
585 :
583 :05/03/17 16:58:50
>>584 リンクするときに -g つけてもつけなくても結果は同じです
リンクするときに-sをつけているとか。
587 :
583 :05/03/17 17:21:53
>>586 たしかにリンクに -s がついていて
これをはずすとデバッグできました
他人が書いたソースなもんで
man 見たところ -s に対する説明がありませんね
-S はありますが.
これはなんでしょうか?
588 :
デフォルトの名無しさん :05/03/17 17:34:29
少しは上の方を見ろよ。
589 :
429 :05/03/17 20:46:23
>>587 > man 見たところ -s に対する説明がありませんね
% man ld
<snip>
-s
--strip-all
Omit all symbol information from the output file.
-S
--strip-debug
Omit debugger symbol information (but not all symbols) from the
output file.
<snip>
って, 書いてあるが...
わかりにくいなあ なあ!
Solaris のコンパイラ (Forte, Sun ONE Stuido) のマニュアルには ちゃんと書いてあるよ。 -s Removes all symbolic debugging information from the output object file. This option is passed to ld(1). This option cannot be specified with -g. gcc 場合、マニュアルには確かにないねえ。 しかし gcc の info を見ると実は書いてある。 GNU 系の場合、これはありがち… だから GNU は(ry
>>591 > gcc 場合、マニュアルには確かにないねえ。
> GNU 系の場合、これはありがち…
おれは, 一時期, gcc だと obsolete になったのかと思って,
-Wl で ld に渡してたぞ.
だから GNU は(ry
593 :
デフォルトの名無しさん :05/03/17 21:23:07
594 :
デフォルトの名無しさん :05/03/17 22:16:12
1から100までの自然数を素因数に分解して出力しなさい 誰かC言語でプログラム書いてもらえませんか?
596 :
デフォルトの名無しさん :05/03/17 22:19:29
たのみますm(__)m
>>594 最高速なアルゴリムを示そう。
int main()
{
fputs("2: 2\n"
"3: 3\n"
"4: 2, 2\n"
... 自分で埋めろ
, stdout);
return 0;
}
(1も素因数分解できるんだっけ?素因数ってもう忘れた)
うちの gcc の man page には書いてあるんだが… > -s Remove all symbol table and relocation information from the exe- > cutable. gcc-3.3.3 です。
>>597 それって stdio のせいで遅くね?
writeはエラー処理がめんどくさい。 全部書けなかった時とか、EINTRとか。
#include <stdlib.h> #include <stdio.h> #define BUF_SIZE 256 int main(void) { int i; char buf[BUF_SIZE]; for (i = 1; i <= 100; i++) { snprintf(buf, BUF_SIZE, "factor %d", i); system(buf); } return 0; }
>>598 うちはgcc-2.95.3ですた。
gcc-3 になって心を入れ換えた?
>>600 fputs() でも一緒だと思うが...。
うんにゃ。 少なくとも全部書けなかった場合については、 fputs() は、内部で再試行してくれます。 むか〜しの SVR4 が、これをやってくれなくて欝だった ような覚えがあるが。
>>604 初期のSVR4はsignalの振る舞いが、
defaultではBSD風じゃなくて、SVR3風だった。すぐに変ったけど。
だからsystem call中に、signalを受けると、エラーで失敗した。
ライブラリもsystem callに再入せず。(BSDセマンティクスだとする)
>>605 > defaultではBSD風じゃなくて、SVR3風だった。すぐに変ったけど。
これは、今でもそうじゃない?
signal(3) はデフォルトでは SA_RESTART しない筈。
で、ここで書いた write(2) の再試行ってのはシステムコール
リスタートの話じゃないの。それならまだ許せる。
初期の SVR4 では、write(2) が第3引数よりも少ない正の値を
返した場合 (つまり partial write の場合)、残りを単に捨て
ちゃってたような気が… つまり完全にバグ。
補足。 partial write の残りを捨ててたのは stdio ライブラリね。
>> 592 さん gcc の man には こう書いてありますが。 The information in this man page is an extract from the full documentation of the GNU C compiler, and is limited to the meaning of the options. This man page is not kept up to date except when volun teers want to maintain it. If you find a discrepancy between the man page and the software, please check the Info file, which is the authoritative documentation.
610 :
デフォルトの名無しさん :05/03/20 02:47:45
標準C言語スレで聞いたら怒られたのでこちらで質問させてください。 mmapの動作に関する質問です。 //#include *は省略 #define SIZE 536870912 int main() { void *map; int fd = open("tmp_file", O_RDWR); size_t size = (SIZE / getpagesize() + 1) * getpagesize(); map = mmap(0, size, PROT_READ | PROT_WRITE, MAP_FIXED, fd, 0); munmap(map, SIZE); return 0; } というプログラムを動かすとバスエラーになってしまいます。 また、変数sizeを使わずにSIZEを使うとセグメントエラーになります。 mmapはファイルをメモリに全部読み込まずに必要な分だけキャッシュする とmanに書いてあるように読めたのですが、間違いでしょうか。 環境はFreeBSD 5.3R, gcc 3.4.2です。メモリは512MBです。
商用UNIXだったら分かるんだけどなー。
>>610 mmapに渡してるsizeとmunmapに渡してるSIZEは同じなのか?
つーかちゃんとエラーチェックしろよ。
とりあえずstraceでもしてみれば?
>>610 > #define SIZE 536870912
これって二進で100000000000000000000000000000、30bitじゃん。
幾らなんでもでかいだろ。
そのカーネルはユーザ空間どれくらいとれるの?
詳しいところ調べるの無理だったら、UNIX板のFreeBSD質問スレが良いかも。
問題は
>>613 や
>>612 が指摘している点もあるが、それ以前に、
第一引数が 0 なのに MAP_FIXED を指定している点もある。
0番値から連続で512MBも置き換えたら、現在実行している
プログラムからなにから全部置き換えになるから、そりゃ
コアダンプもするだろ。
それから、flags には、必ず MAP_PRIVATE か MAP_SHARED
のどらかか片方は指定するようにしろ。
あと、
>>612 が言うように、システムコールがエラーで返って
ないか調べて、エラーだったら perror() なりerr() する習慣
をつけろ。基本中の基本。
これだけ短いプログラムに、なんでこんなにたくさんバグを
入れられるのかが謎だ。もっと人の書いたちゃんとしたプログラム
を読んで真似する習慣をつけるべき。
どっかのクズサンプルをつかまされたのだろうきっと
バグと言っていいかどうか微妙だなw
>>612 あ、SIZEはtypoです。実際は両方ともsizeを指定してます。
あと、エラーチェックもperrorを実際は入れてます。
長くなると迷惑かと思って省略してしまいました、ごめんなさい。
>>613 その辺をうまくよきに計らってくれるのがmmapだと認識してたのですが・・・
間違いでしたか。
>>614 flagsにMAP_PRIVATEを入れたら行けました。
何か勘違いしてるみたいなのでもちっとじっくりmanを読んでみます。
ありがとうございました。
618 :
デフォルトの名無しさん :05/03/20 12:35:43
仮想メモリ空間が足りないのに良きに計らうもクソも無いだろ
>>613 >>610 ではないだが
> 30bitじゃん。
> 幾らなんでもでかいだろ。
なんで?
ふつうに,
mmap(0, 1024L*1024L*1024L, ...)
って, 使えてるが.
FreeBSD でも Solaris でも IRIX でも...
CPU アーキテクチャにもよるだろうけど, 32bit あれば
2G のユーザ空間確保できるのが普通じゃねぇの.
>>619 > CPU アーキテクチャにもよるだろうけど, 32bit あれば
> 2G のユーザ空間確保できるのが普通じゃねぇの.
なことはない。
>>620 > なことはない。
だから, なぜだか教えてほしいって言ってるじゃん.
backing store に指定容量以上ののファイルとか,
十分な量の swap 持ってきてもだめなの?
よくあるケースは、 ・32bitアドレス空間を、半分カーネル空間 ・ユーザ空間の半分をテキスト領域 ・残りをスタック領域とデータ領域 ・sparseであることを仮定したmmap設計 などなど x86はセグメントありますから、32bit全部データ領域は可能。
623 :
デフォルトの名無しさん :05/03/20 14:02:45
UNIX userはやたらとalphabetで書きたがるね。
624 :
デフォルトの名無しさん :05/03/20 14:04:35
それが UNIXer quality
>>622 > よくあるケースは、
> ・32bitアドレス空間を、半分カーネル空間
mips あたりだと CPU が, そうゆう設計ですよね.
> ・ユーザ空間の半分をテキスト領域
こんなのって本当にある? バイナリの仕様次第か?
FreeBSD とか, 昔の SunOS-4 なんかだと
2^32/2 - text+maxdsiz+maxssiz が,
mmap で使用可能な空間ですよね?
> ・sparseであることを仮定したmmap設計
> などなど
64bit ならまだしも 32bit でやるかなぁ???
> x86はセグメントありますから、32bit全部データ領域は可能。
トロくなりませんか, OS が?
> mmap で使用可能な空間ですよね? ごめんなさい, mmap(NULL, ..., /*MAP_FIXED ではない*/) の話.
627 :
デフォルトの名無しさん :05/03/20 15:58:01
そもそもmmap自体がポータブルじゃないので 良きに計らえとか言ってると火傷します
Windows使うのが安全。
同意。 わざわざ面倒なことする必要もない。
FreeBSD/i386 を含め、386BSD から派生した OS は
i386 上だと、VM_MAXUSER_ADDRESS=3G くらいだから
512MB くらいなら mmap できることが多いよ。
KVM を広げるようにカーネルを config してたり、
他にいろいろ mmap してたりすると 別だし、
0番値から MAP_FIXED で mmap してたらまずいけど。
>>617 は MAP_PRIVATE を入れただけじゃなくて、
MAP_FIXED は取り除いたんじゃないかな。
m68k 用 NetBSD は、カーネルとユーザ空間に別の
仮想空間を使っているので、ユーザ空間だけで 4GB
使えたり。
ユーザー空間が 4GB/2=2GB って OS は多いけど、
text に 2GB/2=1GB も割り当てるなんてもったいない
ことしてる OS はないと思う。text は、実行ファイル
に含まれている分しか確保されない。むしろ、
ヒープと stack の中間に shared library 用の mmap
領域があったりすることが問題。
>>627 mmap は、いまや POSIX.1:2004 に含まれているので、
そこそこポータブルですが、なにか?
Linux や *BSD など、POSIX.1:2004 をフル実装して
ない OS でも、mmap に関しては、ほぼ POSIX.1:2004
の仕様を満たしているよ。もっとも、定義されている
のは、各 OS の最大公約数程度の機能だけど。
>>628 Windows のメモリマップドファイルって、ローカル
ファイルシステムはマップできるけど、リモートに
ある奴は駄目という不便な仕様だった記憶があるけど
今では直ったの?
UNIX の場合、当然そんな制限はありません。
633 :
デフォルトの名無しさん :05/03/20 17:28:28
>>631 POSIXに含まれている=ポータブルではない。
「そこそこポータブル」って何だよ。
> mmap に関しては、ほぼ POSIX.1:2004 の仕様を満たしているよ。
本当に?A LinuxとB LinuxとC LinuxとD LinuxとFreeBSDで使えても
ポータブルとは言わないよ?
わははは! ペイントハウスで思いのままだ!
>>633 > 本当に?A LinuxとB LinuxとC LinuxとD LinuxとFreeBSDで使えても
> ポータブルとは言わないよ?
で、君は使えない処理系の一つでも挙げればいいんだけど、自分は何も知らないけど煽ってるだけと言うことでいいの ?
>>633 POSIX.1:2004に書いてある仕様なら、Solaris, IRIX, Tru64, HP-UX,
AIX は使ってないので知らんが。これで現在でもメンテされている
商用UNIXはほぼ全部。ちなみにこの程度の範囲の仕様なら、いにしえ
の SunOS4 でも通用する。
mmap はシステムコールなので、別に A Linux, B Linux なんて
言わなくても全部の Linux で同じ動作だし、あの範囲の仕様な
ら、実際に Linux でも通用する。FreeBSD に限らず、全ての
4.4BSD 派生 OS でも通用する。
最初にまともな実装が登場した SunOS4 の時代ならともかく、
あれから 15年も経った今でもポータブルでないっていうのは
時代遅れだと思う。
編集してたら文章が欠けた… > POSIX.1:2004に書いてある仕様なら、Solaris, IRIX, Tru64, HP-UX, > AIX は使ってないので知らんが。 POSIX.1:2004に書いてある仕様なら、Solaris, IRIX, Tru64, HP-UX は 少なくとも満たしている。AIX は使ってないので知らんが。
611の言ったとおり、やっぱり商用UNIXじゃないとな。
>>638 だったらAIX以外ならOKよ。
AIXは、mmapは大丈夫かもしれんが、そもそもOSが変態だから
やめた方がいいかもしれん。
> A LinuxとB LinuxとC LinuxとD Linux ワロタ
ここで質問すると、かならず無駄に互換性の話まで拡大するのな。 大抵の質問者が環境書かないからだと思うけど、 今回は環境かいても無駄だった。
で、件のFreeBSDでは動くのかというと、正確な所は誰も知らないと言う・・
POSIX.1:2004 の範囲ならFreeBSDでも動くよ? 元々の610のプログラムはバグバグなので、どのOSでも動かん。
たぶんWindowsなら動くんだよ。
特定のUNIXモドキ、しかも商用UNIXじゃないんだから 正確なところが分からなくても仕方ないと思う
646 :
デフォルトの名無しさん :05/03/21 03:22:59
basename()が引数の指す先を変更することってあるんですか?
>>610 どこの本やサンプルを見たらあんなコードになるのか興味深い
駆逐したいのでどこを参考にしたのか教えて欲しい。
ちゃんと嫁
650 :
デフォルトの名無しさん :2005/03/21(月) 11:50:10
>>648 どちらかに決まってないんじゃ、呼び出した後free()すべきか
どうかどうやって決めればいいんでしょう?
free() ? 自分が確保したものは自分で free() するのが基本。 strdup() みたいに、ライブラリ内で確保するやつもいるけど、そういうやつはマニュアルに書いてある。
>>650 > dirname および basename は、静的に割り当てられたメモリへのポインタを
> 返すことがあり、これらの領域は後の関数呼び出しで上書きされるかもしれない。
…の部分に対する疑問?
それなら、
char * path = "foo/bar";
char * path_dup = strdup(path_dup);
char * path_dir = dirname(path_dup);
して、
free(path_dup);
すればいいだけだと思うが。
path_dup = dirname(path_dup);
みたいにすると、path_dup が strdup で確保したメモリじゃない可能性があるから、
free() するべきかどうか分からなくなるがね。
654 :
デフォルトの名無しさん :2005/03/21(月) 13:09:13
>>652 > char * path = "foo/bar";
> char * path_dup = strdup(path_dup);
>
> char * path_dir = dirname(path_dup);
ここでpath_dirの指す先がpath_dupの中かもしれないので
> free(path_dup);
ここでfree()してしまうとpath_dirが使えなくなりませんか?
何かすごくおかしいことを言っているのだろうか・・・
>>654 付け加えると、path_dirは必要ならすぐに自前の領域にコピーしておくこと。
∵basename()を再度呼び出すと上書きされるから。
>>652 > char * path_dup = strdup(path_dup);
< char * path_dup = strdup(dup);
通りすがりに、取り合えず訂正しておくわ
>>657 < char * path_dup = strdup(path);
間違えたわ…ハズ
>>652 「静的に割り当てられたメモリ」ってのはライブラリがstaticに持ってるバッファだと
言ってるように読めるんだが(バッファじゃないがerrnoみたいな)。
であるとすれば、free()するとおかしなことになるよな。
>>651 が言ってるのはそういうことじゃないの?
strdup1つでここまで引きずるとは、さすがUNIX
>>660 だから basename の返り値を free しなきゃいいわけで、
basename に与えたポインタを free するのは問題ないだろ?
ここは小学生の溜まり場かよ。
>>660 が正しい。POSIX仕様であっても、basename()は
引数で与えられた領域を上書きすることはない。だから、
上書きされることを気にしてstrdup()する必要もない。
どうもglibc-2.2.1までのPOSIXバージョンは、POSIXの
解釈を間違えていて上書きしてたことがあったようだが。
これはglibc特有のバグで、glibcを使ってなければ関係
ない。
>>648 の和訳のバグセクションは、そのあたりが
誤訳っぽいな。glibc-2.2.1より後でも問題があるように
読めてしまう。英語マニュアルを見れば明らかなんだが。
>>664 POSIXはどうかしらないけど、FreeBSD5.3だと
char * basename(const char *path);
って定義になってるから、引数のバッファは変更されることはなさそうね。
ついでに、返り値は「a pointer to internal static storage space」を返すとなってる。
>>652 にあてはめるならこんな感じか。
char * path = "foo/bar";
char * path_dir = strdup(dirname(path));
/* ここでpath_dirを利用 */
free(path_dir);
666 ∈(・◎・)∋ 666
要するに、basename(3)使うときに、strdupもfreeも要らないわけだ
(゚Д゚)ハァ?
>>667 うん。ただし、basename(3)を複数回呼んで、その返り値を
後でまとめて使うような場合はmalloc(3)が必要となる。
別に固定バッファでもいいわけだが。
671 :
デフォルトの名無しさん :2005/03/29(火) 17:59:02
一つのプログラムファイルからしか使わない構造体があったとして それをヘッダファイルではなく、foo.cの中で宣言定義するのってのは、 スタイル的に問題ないのでしょうか?
ここで質問する事が問題
>>672 BSDのソースではあまりみかけないのに、Linuxでは沢山あるので
漏れは、他のファイルに見せる必要の無いものは、 実際に見えないようにすべき、と考えます。 unixとは全然関係ないけどね。
させたいことと出来ることを一致させるのは大切ですね
677 :
デフォルトの名無しさん :2005/03/31(木) 15:18:49
suse9.1上でcを使って、ファイルサイズの取得方法を教えてください
hcreate()ってプログラムの中でひとつのハッシュ表しか使えないんですか? だとしてこれは役に立つことがあるんでしょうか?
そりゃあるでしょ。 複数使いたければ、hcreate_r()使いなよ。
hcreate() なんてシラナンダ。自作してた…。 hcreate_r() は GNU 拡張か。
>>681 プラットフォームによってはバグってたりするから使わない方がいいよ
追加できるエントリ数にこっそり上限があったり
683 :
デフォルトの名無しさん :2005/04/05(火) 10:51:56
program_a が program_b を呼び出すようにしています. gdb で program_b の動作をデバッグするには どうすればいいのでしょう?
684 :
デフォルトの名無しさん :2005/04/05(火) 11:15:04
>>683 program_b の最初の辺りに sleep なり, 入力待ちなりを入れといて,
ps | grep program_b して gdb <pid-of-program_b> する.
どっちかってゆうと, ウニ板のくだ質ネタだが...
>>683 "program_b arg1 arg2"
↓
"gdbserver localhost:20000 program_b arg1 arg2"
$ gdb
gdb> target remote localhost:20000
gdb> break xxx
gdb> continue
Windowsみたいにcch埋め込みして自動でデバッガ起動とかできないの?
core吐いたら、そこからデバッグを再開出来る気もする
>>686 こんな感じでいいのか?
以下を実行すると、自身を対象にgdbのウィンドウが立ち上がる。
char pidbuf[20];
snprintf(pidbuf, sizeof pidbuf, "%d", getpid());
if (fork() == 0)
execlp("xterm", "xterm", "-e", "gdb", argv[0], pidbuf, NULL);
sleep(5); /* wait for gdb */
かなーりいい加減な実装だけど。
689 :
デフォルトの名無しさん :2005/04/06(水) 10:45:22
Unixプログラミングを詳しく 網羅した質の高いサイトを この俺に教えてください
691 :
デフォルトの名無しさん :2005/04/06(水) 15:24:06
CSVをパースするライブラリくれ 書くのめんどい つーか、どう考えても世の中に大量にあるだろそんな汎用ライブラリ どうしてgoogleで引っかからないんだこれ だれかの陰謀か? 宇宙人?
Cでくれ
一発動かすだけみたいなやつなら perl で十分だろうし、 そうでないなら... > 691 名前:デフォルトの名無しさん[] 投稿日:2005/04/06(水) 15:24:06 > CSVをパースするライブラリくれ > 695 名前:デフォルトの名無しさん[sage] 投稿日:2005/04/06(水) 17:36:22 > Cでくれ この間になんぼでも書けるだろう。
C-- (C Decre)
>>691 何故みつからないかというと、みんなが納得する"CSV"という
名前のフォーマットは存在しないからです
標準化されていない悲しさよ
そんなことなかろう。 google で "comma separated value" parse library を検索すると見つかるぞ。 単に探し方が悪いだけだと見た。
700 :
デフォルトの名無しさん :2005/04/06(水) 23:00:19
CSVって、
・フィールド,で区切られている。
・#から改行までは無視。
・,#をデータに入れたい時は、"tell your #, please!"とクォート。
・レコードは改行で区切られている。
が典型的かな。
>>698 色々と問題が起きそうなのは、
・改行コード。
・ISO-2022-JPの様な左面の文字集合切り替えのある場合。
かな。
>>700 > ・,#をデータに入れたい時は、"tell your #, please!"とクォート。
マジかよ
そんなエスケープ初めて聞いた
CSV ・1行で1レコード。 ・コンマ「,」をデリミタとして値を区切る。 ・値にコンマが含まれているときにはダブルクォート「”」で括る。 ・値にダブルクォートが含まれているときは「””」と2重にする。 多少の方言はあるけど、だいたいこんなんが基本。 というのが漏れの理解。
値に「"」が含まれていたら「''」でクォートとか、「\」でエスケープとか、 文字列フィールドに数字しかないときは「'」が先行するとか、 微妙にいやらしい方言が多いんだよね。
だからライブラリが無いw
""の中に改行が含まれるケースもある 1,"abc","def",ghi,1111 2,"abc","This is a quoted string.",def,234 3,"abc def","hoghoge",aaa,234 みたいな
>>705 lex 辺りでアナライザーはかせりゃ, 悩むほどのもんじゃねぇだろ?
あとは, yylex 呼ぶループ書くだけ.
この程度、lex 使わずに手書きしても全然たいしたことない。 この程度が書けないような香具師は、Cを使うのはやめて、 Java とか Perl とか Python とか Ruby とか VB に転向すべき。
709 :
デフォルトの名無しさん :2005/04/07(木) 15:00:15
メールサーバでReceived:の項にJSTなどとタイムゾーンが文字で入りますが、あれは取得できる物なのでしょうか? それとも、メールサーバのプログラムの中にそのようなテーブルがあるのでしょうか?
>>707 > この程度、lex 使わずに手書きしても全然たいしたことない。
ゴリゴリ手書きして遅いルーチンを書くのはいとも簡単だけど、
(f)lexと同等かそれ以上に高速なものにしようとすると結構大変かも。
echo OTZ
>>710 トークンの種類が非常に多く、DFAのメリットが効いてくる
ような場合なら、確かに (f)lexの方が速くなるが、この例
だと共通プレフィックスになるような文字列は全くないので、
まともなプログラマが書けば、どう転んでも手書きの方が速い。
もちろん、まともじゃないプログラマなら話は全然別。
>>713 へっ?字句解析でDFAの表引きが効率向上に役立つ割合なんてほんの僅かです
が。字句解析器生成が手書きよりもうれしいのは、まず第一にバッファリング
(と先読み管理)をそれなりにきちんとやってくれるからですけど。もちろんき
ちんと最適化したマニュアルの解析器の方がバッファリングも速いけど、それ
はそれで「どう転んでも」速くなるほど自明じゃない。
うーん、ほとんどの言語は、そもそもそんな高度な バッファリングなんていらないでしょ? 一文字バッ ファリング、すなわち ungetc() で十分なことが 多いと思うけど。そりゃたまには、そうじゃない 変態文法もあるけどさあ。 今回の CSV も ungetc() で十分なので、バッファ リングで遅くなる要素は、まったくないと思うけど?
おまいらは読込速度が問題になる程 大量の CSV を読もうとしてるのか…ッ! こないだいたけどね。 「いやー Excel で開けないくらいでっかくなっちゃいましたよハッハッハ」 とかいうから、行数カウントしてみたら 1200万行。
そこまで多くなったらDB使えと小一時間(ry
CSVやめてS式にしようぜ
字句解析器がバッファリングをするって何の話だよ??
UNIXプログラミングに関係ないはなししはよそでおねがいします。
XMLに決まってんジャンww
LALRのLAじゃないの?>バッファリング
LALR使ってるのはlexじゃなくてyaccでそ。
Unix でプログラミングなら, あるもの使えば?
車輪の再発明の必要もないし...
ってな, つもりで
>>706 を書いたんだが, 妙なことになってるしorz
>>720 > UNIXプログラミングに関係ないはなししはよそでおねがいします。
おもいっきり, UNIXプログラミングの*はなしし*だと思うが...
つか, UNIXプログラミングの*はなしし*をすれば, この程度は普通
だと思うぞ.
>>720 はCSVがUNIXに関係ないと思ってる香具師
yacc/lexがなきゃCSV も読めないのか、ここの連中は(笑) 火炎放射器でタバコに火を付けるってのはこういうのを言うのかね。
730 :
691 :2005/04/08(金) 13:46:41
そういうのを自分で作るのが面倒だという話なんだ 誰かが作ったものがそこらに転がってるなら 火炎放射器でもなんでも使うよ。
cut(1) ですむところを awk や perl でやったりもするけど別にええやん
awkは兎も角、perlは…
まぁいいか。
>>730 火炎放射器使うくらいなら私は自分で火を熾すよ。
>>732 > 火炎放射器使うくらいなら私は自分で火を熾すよ。
野蛮だなw
火炎放射器を使う方がむしろ野蛮だと思いまつ。 つうか、これぐらい単純な処理だと、lex使う方 がむしろ面倒だと思う。
簡潔な方法が正解かと
simple is beauty が UNIX
なんだよお前らそんなに車輪作りたいのか? おれはやだぜ
任意個の整数の合計を求めるライブラリくれ 書くのめんどい つーか、どう考えても世の中に大量にあるだろそんな汎用ライブラリ どうしてgoogleで引っかからないんだこれ だれかの陰謀か? 宇宙人?
そんなのライブラるまでもないからだろ
こんなのは setjump / longjump のいい練習になるかな。遊びでつくてみよ。
Cでくれ
#define goukei(arr) { int i; extern int g_goukei; for(i=0, g_goukei; i<sizeof(arr)/sizeof(arr[0]); i++) g_goukei+=arr[i]; }
UNIXでまともな言語ってJavaぐらいしかない
はつみみです
>>737 自分の回りに車輪が見当たらなければ作るしかねーだろが。
>>740 #include <setjmp.h>
#include <stdio.h>
void acc1(int n, int x, jmp_buf env) {
if (n == 0) { longjmp(env, x); }
else { acc1(n - 1, n + x, env); }
}
int acc(int n) {
jmp_buf env; int x;
if (n == 0) { return 0;}
else if (x = setjmp(env)) { return x; }
else { acc1(n, 0, env); }
}
int main(int argc, char *argv[]) {
printf("%d\n", acc(atoi(argv[1])));
}
誰か、>748が何をしたいのか教えてくれ。
>>749 #include <stdio.h>
#include <stdlib.h>
int main(int argc, char ** argv) {
printf("%d\n", atoi(argv[1]) * (atoi(argv[1]) + 1) / 2);
return 0;
}
やあおまいら。C言語の勉強ははかどってるかね?
>>750 それのどこが「任意個の整数の合計」なんだか。
つーか、>740=>748が阿呆なだけか。
>>740 setjmp 使ってなくてすまん。
int
summers (int n, ...)
{
va_list ap;
int i = 0, sum = 0;
va_start (ap, n);
while (i++ < n)
sum += va_arg (ap, int);
va_end (ap);
return sum;
}
だめだよぉ setjmp使わなきゃ
755 :
デフォルトの名無しさん :2005/04/21(木) 15:45:47
Linux です. ある実行ファイルを実行している最中で, このファイルを open することはできますか?
>>755 このファイルとは、実行中の実行ファイルのことでしょうか。
それなら制限つきでopenできるはずです。
760 :
755 :2005/04/21(木) 16:13:06
説明が足りませんでした ある実行可能ファイルを open したところ 失敗して,strerror(errno) したところ Text file busy とでるんです(バイナリファイルなのに…) これはそのファイルが実行中と解釈していいのでしょうか?
>>760 LinuxさんはどんなUNIXを使ってらっしゃるんで?
書き込みモードで開こうとしてない? あと text はコードというような意味。 バイナリファイル/テキストファイルというような区別はUnixにはない。 使用中なのは確かだけど実行中かどうかは知らん。
Text file busy どこで拾ってきたLinuxなんだろ
少なくとも BSD 系では errno 26 は "Text file busy."
765 :
755 :2005/04/21(木) 17:18:53
いろいろどーもす 参考になりますた > errno 26 は "Text file busy." Linux でも同様です
766 :
758 :2005/04/21(木) 18:28:40
>>759 既に答えが出ているからいいよね。
fopen("実行モジュール", "w");
とすると楽しいことになる。
楽しかった! もっとやって!
769 :
デフォルトの名無しさん :2005/04/21(木) 23:40:28
Windowsのdllやexeは使用中に更新出来ないが UNIXの実行ファイルは更新可能
実行中に削除って…なんか指令を伝えた後に爆発するレコードみたいだな
プロセス終了時にコア吐くですよ。
772 :
__ :2005/04/22(金) 00:40:24
>>760 んー、こういうことかな?
#include <stdio.h>
int
main (int argc, char **argv)
{
FILE *fp;
if ((fp = fopen (argv[0], "w")) == NULL)
perror ("fopen"), exit (1);
fclose (fp);
return 0;
}
$ gcc -Wall -o Text Text.c
$ ./Text
fopen: Text file busy
$
>>772 良い例です(笑)。細かな事ですが、コマンド名には大文字を入れないのが慣習です
774 :
デフォルトの名無しさん :2005/04/22(金) 11:36:45
select でパイプからの入力待ちをしたのですが 待ち時間を 10 秒とかにしているのに すぐに 0 が返ってきます 時間切れ以外に 0 が返ってくる場合はありえるのでしょうか? man select には時間切れと書いていますが
タイムアウトの指定の仕方が間違っている!(w
>>774 待ち時間の設定から呼び出しまで辺りのソースを晒して味噌。
777 :
デフォルトの名無しさん :2005/04/22(金) 20:23:18
会社のソースなので外部に持ち出せません 契約違反になります
バイバイ
779 :
__ :2005/04/22(金) 20:54:02
それ以前にそんな奴が2chで質問するなと。
781 :
デフォルトの名無しさん :2005/04/25(月) 11:15:17
とあるプログラムをつくっていて (1) Redhat 7.1 (2) Redhat EL WS で動作が違いました. すでに実行中のファイルを書きこみ専用で open しようとしたときに (1)では成功,(2)では失敗します. このようなことはありえますでしょうか? これは OS 自体の設定の違いによって起こるものなのでしょうか? また,ファイルパスを指定して, それが実行中かどうかを知る方法(もちプログラムの中で)は ありますか?
その辺はLinux板だなあ。UNIX一般の問題じゃないから。 execve(2)した時の、O_EXEC, MAP_DENYWRITE関係の設定が変ったんだろ。 書けるとsecurity holeになるからね。十分あり得る。 $ cat /proc/プロセスID/maps してみてね。
>>782 本当にそうなら、これでまたひとつWindowsに近づいたな。
784 :
781 :2005/04/25(月) 12:48:45
失礼しますた Linux 板にいてきます
785 :
782 :2005/04/25(月) 12:55:58
786 :
デフォルトの名無しさん :2005/04/29(金) 16:02:44
サーバのプログラムはアイドル時どのように、待っているのでしょうか? sleepを入れながらポーリングするのでしょうか?
何するものかによって違うけど、普通は select とかだろうね。
>>786 ポーリングでしか分からないのなら、それもあり。
でも定期的に無駄にCPU使うので、可能なら
accept なり、read なりでイベント待ちするのが普通
789 :
デフォルトの名無しさん :2005/05/01(日) 10:11:26
Linuxでのプログラミング学習です。 こんな問題をいきなり授業で出題されました。 まだほとんど何もやってないので、さっぱり 意味が分かりません。分かる方がいらっしゃるなら、 回答の方教えてはいただけませんか? f(x)=xの2乗-xy-yの2乗 について x=-0.423 y=1 の時の値を(小数点第4位までの表示) で求めなさい。ただし、変数x,yの値はscanf文で 入力させてください。
アナタとワタシはスレ違い。
791 :
デフォルトの名無しさん :2005/05/01(日) 10:20:48
GTK プログラミング!! で聞けばいいんですかね?
>>789 perl -e '$x=scanf();$y=scanf();printf "%.4f\n",$x**2-$x*$y-$y**2;sub scanf {<>}'
794 :
デフォルトの名無しさん :2005/05/01(日) 12:11:43
ありがとうございました
そんな消え行く過去の遺産の本はもういらん 第1版で十分
”そんな消え行く過去の遺産の” と "はもういらん" は不必要
今住んでいるところで現物見れそうもないんで、 とりあえずレビューされてから考えようかな、と。 第1版は持ってるし。エラッタ修正待ちも兼ねて。
$ cat
>>799 | grep "で" | awk -F'版|十' '{ print $2"?" }'
ワロタ
>>800 >799は>797の指示に従ったんだろ。
もはやカタカナ表記はエラッタでいいんじゃないの? UNIXをユニックスと書くやつはいてもユーニクスとは誰も書かないのと同じで。 803は現代日本で生きるのは大変そうだな。 明治時代なら好きな読みを押し付けられたのに。
806 :
デフォルトの名無しさん :2005/05/02(月) 04:20:02
急速にスレの質が低下してまいりました
いや、最初からこんな感じだったよ
バケラッタ
809 :
デフォルトの名無しさん :2005/05/04(水) 16:07:05
c++(gcc)での実行ファイル名(つまり自分自身のファイル名)の取得方法を教えてください
argv[0]
このスレにあったような。
質問です。 fork/execして生まれた子が親の死を感知する方法で一般的な 方法はあるのでしょうか?(initに引き取られると困る) 調べると「システムによってはSIGHUPが...」とかという記述で 一般的な方法は見つかりませんでした。 もちろん、「そんな親プログラムを作るな」というのは承知しているのですが...
ないんじゃないでしょうか。 どうしても知りたければお爺さんプロセスから教えてもらうようにするとか。 ちなみにSIGHUPは親プロセスの死とは直接関係ないですよ。
ncursesを使ったソースでなるべくシンプルなものってないでしょうか お手本にしたいのですが
$ cd ncurses-5.4/test $ ls Makefile.in README aclocal.m4 background.c blue.c bs.6 bs.c cardfile.c cardfile.dat color_set.c configure* configure.in demo_defkey.c demo_forms.c demo_keyok.c demo_menus.c demo_panels.c ditto.c dots.c edit_field.c edit_field.h filter.c firework.c firstlast.c gdc.6 gdc.c hanoi.c hashtest.c ins_wide.c inserts.c keynames.c knight.c listused.sh* lrtest.c modules ncurses.c ncurses_tst.hin newdemo.c railroad.c rain.c tclock.c test.priv.h testaddch.c testcurs.c testscanw.c tracemunch* view.c worm.c xmas.c
>>812 親のみが書き手、子が読み手のpipeを用意する。
親が死んだら子によるread(2)の返り値が0になるはず。
とか。一般的かどうかは知らない。
817 :
812 :2005/05/06(金) 00:35:30
>>813 >>816 レスありがとうございます。やはり一般的な方法はないですか・・・
パイプとかPID監視とかの代替案を使うことにします。
>>812 > (initに引き取られると困る)
ここが引っ掛かっていてスルーしていたんだけど、
これどういう意味なの? 何が困るの?
pollingでいいなら、IPCのセマフォ使うとか。
819 :
デフォルトの名無しさん :2005/05/06(金) 01:17:25
>>812 kqueue/keventがあるOSなら任意のpidのexitしたのがわかる。
>>821 能動的にアクション起こしていいんなら getppid()!=1 で十分だろう
wchar_t wb[] = L"ほげ"; printf("%S",wb); や wchar_t wb[20]; initscr(); getn_wstr(wb, 20); printw("%S",wb); は問題なし wchar_t wb[] = L"ほげ"; initscr(); printw("%S",wb); は ^[$B$[$2^[(B こんな風に表示されてしまう setlocale(LC_ALL, "");してみても変化無し 何が足りないんでしょう
シェルで日本語出すように設定してないだけじゃねーの?
出力はISO-2022-JPに見える。 ターミナルのlocaleはそれでいいのか?
>>822 getppidなんてはじめて知った
おくがふかいなぁ
プロセス間でデータをやりとりするにはどうしたらよいのでしょうか? WindowsにおけるWM_COPYDATAのような方法を探しているのですが。
親子、あるいは親戚関係にあればpipe(2)、 そうでなければmmap(2)、IPC共有メモリなど。
Xwindowで動作するプログラムを作りたいのですが、どこから勉強していけばよいのでしょうか? C++でコマンドラインプログラムは書けます。
今さらXlibでもあるまいから、まずは使うGUIツールキットを決めなされ。 多分GTK+かQtのどちらかになると思うけど。決まったらそのスレへgo!
widestudio とかもあるよ
最近良く見かけるが、WideStudio の中の人は 2ch で宣伝する方針なのか?
Motifを忘れているよ。 UNIXなら標準だし、ついでにXlibにも詳しくなる。
いつのまに標準になってたのか
Motifはどさ回りの仕事量が増えるけどねぇ。 ツールキットとしては古くて資料も色々あるけど。 それにしても、関数名が長いし。 #XmToggleButtonGadgetGetState()とかw
>>833 >ついでにXlibにも詳しくなる。
詳しくないと使えないっつーか
だから避けられるんだっつーか
…折れ線グラフひとつ書くのも一苦労でしたよ、ええ。
おれならまずXでGUIアプリなんて作らないな
あるプロセスIDのプログラムが実行中かそれとももう終了したのかを確認するにはどうしたらよいのでしょうか?
詳解Unixプログラミングを読むのが一番早い。
それくらいならFAQにも出てたと思う。
842 :
839 :2005/05/14(土) 04:48:27
/procディレクトリの中のPIDと同じファイルが存在すれば、実行中であると判断しても問題ないでしょうか? 実行が終了すれば必ず消えるものなのでしょうか?
kill 839
間違えた。 kill(839, 0)
まあ、FAQによれば killよりも/procの方が確実に判定できるケースがあるとのことだから そのやり方について聞いているんだろう。 実装(環境)依存としか答えようがなさそうだけど。 関係ないけど、「実行中である」という確実な判定は不可能だな。 なんらかの呼び出しから制御が戻る前に終了する可能性がある。 PIDの唯一性(再割り当てされないこと)が保証されていれば 「終了した」ということは判定できるだろうけど。
847 :
デフォルトの名無しさん :2005/05/14(土) 06:39:19
fork() 関数で子プロセスを生成しました。 親プロセスは、一秒に一回ぐらいの間隔で、子プロセスが終了してるかどうかを確認したいのです。 その間、親では while(1){ 子プロセスの終了してるか監視 終了してれば、処理を抜ける メータ表示 } などのプログラムを動かしたいと思っています。 いろいろ調べたんですがwait()関数なるものが子プロセス終了まで待ちつづけるというものでしたので、子プロセスが動いている間 メータを動かすという処理が出来ませんでした。 子プロセスは、system関数で、別のプログラムを実行しています。 その間、親プロセスで、メータを増やす処理をしたいのですが、子プロセスが終了?してるか調べるwait関数に変わるものは何かあるのでしょうか? ps -aux で確認したところ、子プロセスの処理が終わったらゾンビプロセスになってました;
おまえはタイトルも
>>1 も読まないだけでなく
最近の10レスも読まないのな
849 :
デフォルトの名無しさん :2005/05/14(土) 07:41:43
>848
別のスレでもご迷惑をかけました
勝手に書き込んで荒らしてしまって、
すみませんでした自分で調べてみます。
申し訳ありませんでした。
>おまえはタイトルも
>>1 も読まないだけでなく
>最近の10レスも読まないのな
これからは、すべて読んでから書き込みます。
すいませんでした。
850 :
デフォルトの名無しさん :2005/05/14(土) 07:43:25
なんで伝統伝説のUNIX板に聞かないの?
UNIX板気持ち悪いので
>>847 wait3(2)かwait4(2)で、WNOHANG
busy loopなんかするな馬鹿
>>847 なんだそれは?その子プロセスは直接の子では無いではないか。
素直にAPUEを嫁
メータって。プログレスバーじゃねぇの?
sleepをミリ秒単位で実行する方法を教えてください
select
社のUNIX遣いの口癖が「だからぁ、子を先に殺すんだよw」なんです。いつも半笑いで。 通報したほうがいいですか?
つまらん。勝手にすれば。
あひゃひゃ
CPUの個数を取得する方法を教えてください
ケースの蓋を開けて目視で確認してください
最近は目視じゃ不十分だな
BSD系だと sysctl でわかったりする。 Linuxは知らないけど /proc の下あたりになんかあるんじゃ? いずれにしても移植性はないと思う。
/proc/cpuinfo
HTだとわからんな
HTでも/proc/cpuinfoに出るぞ
UNIXでWindowsのDLLの動的ロードのようなことはどのようにやるのでしょうか?
UNIXでWindowsのDLLのDllMainのようなことはどのようにやるのでしょうか?
どういう挙動を望んでいるのかをなぜ自分で説明しないのだろうか?
man dlopenすれば馬鹿でも分かるように書いてある。
dll自体はどのように書けばよいのでしょうか?
リンクをはるだけならバカでもできますが何か。
↑典型的なUNIX脳
CPU使用率の取得方法を教えてください
883 :
デフォルトの名無しさん :2005/05/18(水) 14:57:59
sshでリモートコンピュータにログインして、コマンドを実行するにはどのようにしたらよいのでしょう?
>>882 使っているCPUの数 ÷ 所有しているCPUの数 × 100
マニュアルを読む。 kmem, /proc関係 $ cat /proc/loadavg
getloadavgは一部のOSにしか実装されていないはず。 HP-UXだったら、pstat(2)(pstat_getdynamic(2)だったかな)。 Tru64 UNIXだったら、table(2)。
>>886 header を grep すれば大抵ポインタが見つかる
コマンド名もわからないのにヒットするわけねーじゃんヴォケ
何のコマンド名だよ
Excelの表を印刷するコマンドありますか?
Mac かな? 要件が良く分からんが、スレチガイかと
>>886 同じことを実現しているコマンドを探すor思い出す→wとかuptime→
wのソースを見る→該当部分を探す→getloadavg発見→manで確認
>>889 どうせこんなくだらない質問するやつは犬厨あたりだろうから
getloadavgが無いシステムのことは考えなかった。補足サンクスコ
使用環境によって発想が変わって来るようだね
897 :
? :2005/05/18(水) 23:59:55
ソースはイカリ
>>886 $ man -k 'load average'
getloadavg (3) - get system load averages # (゚Д゚)!
tload (1) - graphic representation of system load average
xload (1x) - system load average display for X
load averageってCPU使用率のことだったんだ ふーん
wcolor_set()で背景色と文字の色をセットしても再描画した部分しか適用されないみたいなんですが うまく背景色で塗りつぶす方法って何かないでしょうか?
man redrawwin
redrawwinしてからリフレッシュしても文字を表示してる部分しか背景色が変わらないです やり方がまずいんでしょうか
man touchwin
man clearok
touchwinもclearokも同じ結果になります 私の頭が悪いだけかもしれませんが・・・
# man -k 'load average' sh: /unsafe/: No such file or directory Error executing formatting or display command. System command /unsafe/ exited with status 32512. Segmentation fault (core dumped) ('・ω・`)
908 :
905 :2005/05/20(金) 08:04:37
見当違いのことをずっとやってたことに気付いた(´・ω・`)
sshでファイルをコピーするプログラムはどのように作ればよいのでしょうか? system()で作ってみたのですが、sshのパスワードの反応する部分がわかりません。
scp使え
X Window Systemでクリップボードをいじるにはどうしたらいいのでしょうか? XmClipboard何とかという関数を使ってるんだが、 どうも動きがいまいちなんだが。
Windowsにしとけばそんな苦労は無いのに・・