2012年09月プログラム114: UNIXプログラミング質問すれ Part10 (535) TOP カテ一覧 スレ一覧 2ch元 削除依頼
monazilla Part 6 (623)
自然言語処理スレッド その3 (617)
なぜポインタで引っかかる人が多いのか (796)
自然言語処理スレッド その3 (617)
Pythonのお勉強 Part47 (755)
だめです! HSP厨は絶対に犯罪です。 (946)

UNIXプログラミング質問すれ Part10


1 :2011/04/18 〜 最終レス :2012/11/01
UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド 
前スレ 
Part9 http://hibari.2ch.net/test/read.cgi/tech/1205795434/
Part8 http://pc11.2ch.net/test/read.cgi/tech/1147946176/ 
Part7 http://pc8.2ch.net/test/read.cgi/tech/1127373405/ 
Part6 http://pc8.2ch.net/test/read.cgi/tech/1116908090/ 
Part5 http://pc8.2ch.net/test/read.cgi/tech/1105723117/ 
Part4 http://pc5.2ch.net/test/read.cgi/tech/1095843584/ 
Part3 http://pc5.2ch.net/test/read.cgi/tech/1085930894/ 
Part2 http://pc5.2ch.net/test/read.cgi/tech/1055110889/ 
Part1 http://pc2.2ch.net/tech/kako/992/992057422.html 

Part3のミラー 
http://makimo.to/2ch/pc5_tech/1085/1085930894.html 
Part2のミラー 
http://makimo.to/2ch/pc5_tech/1055/1055110889.html 

2 :
2

3 :
CPU使用率を取得する方法を教えてください。

4 :
>>3
Solaris なら kstat を使う
http://alexeremin.blogspot.com/2009_02_01_archive.html

5 :
>>4
早速の回答ありがとうございます。
Linuxの場合はどうすればよいのでしょうか?

6 :
>>5
/proc/stat

7 :
cursesで文字列でないワイド文字を1文字出力する関数を教えてください

8 :
unix板にも、linux板にも、同じスレが有るんだな
これが

9 :
>>7
ncursesのmanpageのncurseswの項目を読んでください。

10 :
>>6
早速の返信ありがとうございます。
そのファイルを読み込むと言うことでしょうか?
ファイルを開く操作は重い操作なので、できれば何か関数で取得できるとよいのですが

11 :
お前が読め

12 :
XLibを使ったプログラムを作ってるんだけど、
RootWindowでルートの画面を取得して縦横のサイズを見ると、
0になるんですが、スクリーンのサイズを取得する方法を教えて下さい。

13 :
取得できました。

14 :
どうやって?

15 :
>>14
該当箇所を消してしまったので、覚えてませんが、XGetWindowAttributes
の引数にルートを渡すと、スクリーンのサイズが取得出来ました。
ところで、リモートのXにログインする方法を教えて下さい。
VNCモドキを作ってるのですが、そもそもXの認証を行う方法が分かりません。。

16 :
xauth関連のコード読んで。
ただ独自接続管理ならsshのX forwardingを参考にしたほうがいいかもしれないが。

17 :
>>16
XCBのソースを見ると書いてありますね。

18 :
コマンドラインプログラムでタイマーを使って割り込み処理をする方法はありませんか?

19 :
コマンドラインでプログラムできるシェルっていうと、N-BASICとかそっち方面ですかね。
UNIXには無いけど、インタラクティブなLL使えば出来るんじゃないかな。

20 :
>>18

タイマーの関数自体、guiとかcuiとか関係ないと思うんだが

21 :
alarm(3)

22 :
libeventはやってるみたいだけど
libevとかもあるよね?
結局
select,poll,epoll,libent,libevどれがいいの?
でやっぱりサーバとしては、マルチスレッド使うよりいいわけ?

23 :
今どきシングルコアしか使えないサーバプログラムなんて寂しいから、
シングルスレッドにするなら、クラスタリングの仕組みを用意して
負荷分散する等の余計な手間が必要になる様な・・・
一方、マルチスレッドで作っておけば、スレッド間のデータの受け渡しも
簡単だし、コンテクストスイッチも軽いし、プロセスの管理も簡単。
C の標準ライブラリにマルチスレッドの関数が入る時代だしね。
ただマルチプロセス前提なら、ノードを跨いだスケールアップを
狙えるのはメリットかも。

24 :
>>23
ちょ、ちょっとまって。マルチスレッドを気に入ってるみたいだけど
ちょっとおまえのスキルを確認させて。
C10K問題のテキスト(英文でも訳文でもいいから)読んでみた?
最近(でもないか。)mixiがおちたmemcashedのとらぶる知ってる?
あ、そもそもmemcashedのlibeventのトラブルはしってる?
libeventとかのベンチマークテストとかやってみてるの?
スティーブンスンは読んだことあるよね?
「オンラインゲームを支える技術」は読んだ?あそこにかいてある内容はどう思う?

25 :
>>24
何だか一行目から勘違いしてるみたいだけど、マジレスした方が良いの?

26 :
>>23
> 一方、マルチスレッドで作っておけば、(略)
> コンテクストスイッチも軽いし、
pgr

27 :
自分の意見も言えないのに突撃してくるのは鬱陶しいから勘弁してくれ
君は議論してるつもりかもしれないけど・・・

28 :
>>25
遅くなりました。マジレスお願いいたします。

29 :
>>28
結局マルチコアマシンに対応しないといけないから、
ロードバランシングする方法を考えておくか、
最初からマルチスレッドで作っておくしかないよ
という話なんだが・・・
>>22 が何のサーバを想定しているのか知らないけど、
例えばウェブサーバだとこんな感じかな?
nginx : load balancing + worker thread
lightty : multi process (http://redmine.lighttpd.net/wiki/1/Docs:MultiProcessor)
node.js : no feature => 普通はロードバランサーを手前に置くよね
至極普通の話をしているだけなのに >>24 みたいな人が
湧いてくるのが理解出来んわ。C10K って何十年前から
言われてると思ってるんだろうね。。。

30 :
>>29
c10問題は知ってる口調だけど原文は読んだのか?
そこではマルチスレッドはもはやこの問題に対応できるように設計されてないとかいてあるだろうに。
そこでシングルスレッド、ノンブロッキング、イベントドリブンが今の潮流なんでしょ?

31 :
そんな潮流はマルチコアプロセッサが登場する以前の話でしょ?

32 :
>>31
http://smpl.seesaa.net/article/72182431.html

33 :
>>32
それ、返事になってないし
結局、マルチコアとの相性については見なかった事にするか、マルチプロセスか
マルチスレッドかロードバランサーか、選ぶしか無いんですよ

それが今の潮流


34 :
>>31
OSのマルチスレッドが一般化してからの一頃は1クライアントに1スレッドを
割り当てるサーバも多く書かれたが、C10Kの状況ではこのモデルは破綻する。大抵のOSは少なくとも以前はそのような非常に多数のスレッドを扱う状況を
あまり想定していなかった

35 :
大抵の OS って Linux 2.2 とかだろ

36 :
>>33
すごい自信だけど、実績があっていっている?それともお勉強しましたレベル。
実績があるならどんなサーバの実績でどのくらいのクライアントをさばいたか教えてください。

37 :
>>36
you, go first.

38 :
>>29
何も知らない人なんだなw

39 :
かわいそうだからそっとしといてあげなよ

40 :
かわいそうだからそっとしといてあげなよ

41 :
過疎スレあげ

42 :
わんわん

43 :
かわいそうだからそっとしといてあげなよ

44 :
計算が終了したら、Twitterに自動的にtweetするようにしたいのですが、一番簡単な方法を教えてください。

45 :
何故ここに…?
TwitterだったらPHPとかPerlとかPythonとかRubyとかの
いわゆるWeb系言語のスレとか、それかWebProg辺りになるんじゃないのか…?

46 :
>>45
UNIX上で動作するアプリケーションが終了したときに、Webアプリケーションにポストしたいんでしょ。
適当にググったら、こんなのでてきたぞ。
http://bazaar.launchpad.net/~gabrielcain/twitter-cmdline/trunk/files

47 :
つうか、 command line twitter client でググったらぞろぞろでてきたぞ。
http://www.google.co.jp/search?q=command+line+twitter+client

48 :
>>46
ああ、そういうことか
すまぬ>>45

49 :
大容量のファイルに対して、read()システムコール:ssize_t read(int fdesc, void *buf, size_t nbytes)
をしてみた所、失敗してerrno=22(EINVAL)が返るのね。ちなみに、movファイルでサイズは7GBぐらい。
なんで失敗するのかご教授ください。

50 :
どこの馬の骨かわからない奴に教授する気はない。

51 :
そうだよな。どこのだれぐらい言わないとな

52 :
>>49
教えて欲しければ、もう少し詳細に書けよ。
あと、man readくらいは読んだか?

53 :
CPUの詳細情報は/proc/cpuで取得できますがGPUの詳細情報はどこで取得できるのでしょうか?

54 :
popen/pclose系とシェルコマンドの連動(やりたいことは例えばls . | grep "hoge")で分かりやすいサイト(英語可)を教えてください。
言語は何でもいいですが、できればC言語ではなく、RubyやPythonで簡略化されたものがいいです。
ていうか、こういうCS以外の学科で教えなさそうな話は、本とかで勉強したほうがいいのでしょうか?

55 :
>>49
引数渡し間違えてる。ファイルが大きすぎるとEFBIGになる。
>>53
/proc/cpuに相当する「詳細な」情報かどうかは分からないが、
/sys/devices/
の下でGPUの種類などは分かる。
lspci, lspci -nを参考にしてくれ。
>>54
http://docs.python.org/library/subprocess.html

56 :
X Window Systemのアプリ作りたい
gccで作れるの?

57 :
gcc 以前に、そんなこと聞いてる奴には難しいと思う。

58 :
>>56
作れるよ

59 :
>>57-58
レスありがとう
作れるけど難しいのか
やりがいがありそう

60 :
どこまでも能天気な奴だ

61 :
最初から簡単に作れる奴なんか居ない
誰でもHello Worldからステップアップするもんだ

62 :
gnome javascriptだとこんなかんじ
http://git.gnome.org/browse/gjs/tree/examples/gtk.js

63 :
誰も聞いてない

64 :
>>62
へー、Gtk+ に JavaScript バインディングなんてあったんだ
見た感じ簡単そうで良さげだね
知らんかった

65 :
>>62
gjs より、seed のほうが Gnome 標準っぽい。

66 :
大して変わらない。まあ言語と元のAPIが同じだから当たり前だが。
http://git.gnome.org/browse/seed-examples/tree/gtktextview.js

67 :
今日ブ○クオフいったら93年発行のXウィンドウプログラミング1って本が800円で売ってたから買うか迷ったけど買わなかった
ウィンドウマネージャの作り方とか載ってんのな
現状800円は高いお

68 :
なんだブックオフか
伏せる意味あんのか馬鹿

69 :
むしろこれは伏せてないw

70 :
ubuntuとかエンドユーザ向けのlinux流行ってるとか言ってるわりにはunix向けアプリの作り方の本とか書店で全然見かけないな

71 :
要するに、パソコンといえばBASIC、時代からMS-DOS時代に移行したような、
プログラミングなんかしない「エンドユーザ」に流行ってる、ということなんじゃ。

72 :
Linuxなどで開発する人は、自力で調べちゃうし。

73 :
xdmみたいなログインマネージャ作ってみたい

74 :
どうぞ。

75 :
ぶ[F7+Enter]まる[Space+Enter]おふ[Space+Enter]
マンドクセーw

76 :
もしかしてJava使えばX用アプリ簡単に作れたりする?

77 :
お前が簡単と感じるかどうかは別問題

78 :
GUIアプリは作れる
Xプロトコルのプログラミングをしたいならおすすめしない

79 :
>>76
最近一番簡単だと思うのは、GNOMEのJavascriptバインディング。
gjsってやつ。

80 :
cとgladeでおk。

81 :
まったくの初心者です
sygwinを使っているのですが
VC++で作った.slnファイルをsygwin上で実行するにはどうすればいいんでしょうか?
ちなみにプログラムにはMFCが使われています

82 :
build.exe にパスを通す

83 :
getopt() の、それ以上オプションが無いときの戻り値は何故 -1 なのでしょうか?
'\0' をオプションにすることって、たぶん無い…ですよね

84 :
特別なケースは-1にすることがUNIXのAPIでは多いから。

85 :
なるほど、他の関数と同じような仕様にしたんですね
ありがとうございました

86 :
getchar()のEOFと似たループになるよね。

87 :
>>83
>'\0' をオプションにすることって、たぶん無い…ですよね
多分無いと思うけど、制限は可能な限り少ない方がいいと思ったんじゃね。
利用者は、極まれに開発者が思いもよらない使い方することあるから。

88 :
cutみたいにオプションでデリミタとかセパレータを指定できるコマンドを考慮してるとか?
普通に"\0"を渡せばヌル文字で解釈してくれそうだけど。

89 :
確かに、そういったことも考慮すると使えるに越したことは無いかも知れないですね。参考になりました。

90 :
SSHとかではなく、自分の作ったプログラムで認証したいんですが、
UNIXの認証の仕組み(何らかのシステムコールを呼ぶとか?)を教えて下さい

91 :
authenticationとauthorizationのどっち?

92 :
>>90
pamとnss

93 :
キーボードってJISとUSどっちがいい?

94 :
このみ

95 :
>>92
ありがとう。

96 :
>>93
自分にしっくり来るほう

97 :
おいしいチャーシューの作り方を教えてください

98 :
1. 髪を伸ばしてオールバックにする
2. 裸になり黒パンを履く
3. 相手に喧嘩を売って自分からキレる

99 :
http://www.youtube.com/watch?v=BNmQdvq58BA

100 :
Makefileで
a.h : b.h
みたいなのが書いてあるんですが、
これって何なんでしょう?

101 :
どっかで見た質問だったと思ったらここか

102 :
>>100
a.h は b.h に依存している
という意味です

103 :
起動してから一定時間実行したら終了するプログラムは
どのように作るのが普通なんでしょうか?
実行する内容としては例えば1時間というパラメータを与えられて起動されたら
その間ファイルを開いて読み取って閉じて次のファイルを読み取って
という事を繰り返して1時間経ったら自ら終了する感じで。

104 :
alarmしてSIGALRMのシグナルハンドリング。

105 :
お手軽にループの中でtimeで現在時刻もらって指定時間時間経過したらそのループ抜けるとか

106 :
unix初心者です。
リモートホストからローカルホストに戻るコマンドを教えてください。
ググってもわからなかったです。
プログラミング以前の問題で申し訳ないですが、
よろしくお願い致します。

107 :
exit

108 :
>>107
ありがとうございます。
助かりました。

109 :
>>104-105
ありがとうございます。
結局その2つになってしまいますよね。
シグナルは確実に止まるけど1個しか使えないし、時刻を取得してというのはその間に実行する処理の量によっては時刻取得のオーバーヘッドがシャレにならんかったり指定した時刻からかなり遅れて終了したりとかありますよね?

110 :
>>109
だから、(何にでも言えるが)汎用的な方法はない
対象に合わせて適切な方法を選ぶしかない

111 :
>>109
外部からジョブを終了させるってことが、
システム、言語、環境に関わらず、
「本質的に」難しい仕事ってのは理解している?
スレッドを外から終了させるようなAPIが
全く推奨されてないのと同じ理由なんだけど。

112 :
>>109
オーバヘッドを気にするならタイマ用のスレッドを作りなされ。
1時間寝てから通知すればよいでしょ。FD でも cond でも。

113 :
つまらんことを気にする場合、大体はどうでもいい事にこだわっていると思う
RTOSじゃないしファイル読んでる時点で1sくらい普通にずれるべ

114 :
1時間経ったらがなんで1時間キッチリにせんといかんのだ?

115 :
109で
>時刻を取得してというのはその間に実行する処理の量によっては
>時刻取得のオーバーヘッドがシャレにならんかったり指定した時刻から
>かなり遅れて終了したり
とかゆってるからシビアな条件があるのだろう

116 :
後始末のないworkerなら強制的に止めてしまえばいいし、
後始末が煩雑ならworker側でyeildするのがいい。

117 :
SIG_DFLの時の動作がプロセス停止になっているシグナル(SIGTSTPとか)が
時々止まらないことがあるのはなんでだべ?

118 :
>時刻取得のオーバーヘッドがシャレにならんかったり
ループの根元でやりゃ、負荷はバカにならんわな
お手軽にやったけど、何か解決方法はないかという
これ以上何も考えません的なところが素敵

119 :
>>117
ブロックしている瞬間があるんじゃないの?

120 :
>>110-118
ありがとうございます。
はい、現状は1時間を1本計れれば良いけど、それを1つのプロセスのままで複数の1時間を
スタートの時刻が異なっても計れるようにするには初めからどのような作り方をするべきかとか
1時間をまたいで読み取り中だったデータは捨てるのか全部入れるのか1時間ちょうどの部分で
切るのかとか、ちょっと基本的な点でアレ?とか思っちゃったのでちょっと質問してみた感じでした。

121 :
最後の2行は新しい質問か?初耳だが、そんなのプログラムに要求されていることによるだろ。
どの挙動をすべきかなんて作ってる奴にしか分からん。

122 :
最初の2行はお礼では。

123 :
真ん中の二行は…てやかましいわ!

124 :
wchar_tって使ってる人いる?

125 :
canna以外で見たこと無いけど

126 :
wchar_t をワッッチャァァァって発音したら、
職場の人間全員が ( ゚д゚) −> Σ( ゚д゚ ) になった
どうも _t を発音しなかったのがまずかったみたい

127 :
あー・・・ なるほど・・・ 大事なところだもんな・・・

128 :
だぶちゃーてー(!ティー)だよな。

129 :
だっちゃ

130 :
たしかLinuxとかは一文字4byteなんだよねwchar_t。いやだなあ

131 :
なにいってんのこの人。ダサい。

132 :
>>124
C++ では std::wstring を使ってプログラムを書けば無問題、
そんなふうに考えていた時期が、俺にもありました。

133 :
VC++だと問題ないけどね。Unix系だと罠がいろいろとありそうな・・

134 :
>>133
いまどきUnix系でプログラムしてる人は少数派だろ

135 :
それをこのスレで言うかwww

136 :
飛んで火に入る夏の虫
もう秋だぞ>>134

137 :
AndroidやiOSはUNIX系かね?
古典的なAT&T由来のC APIではないけれど。

138 :
全ての作業をWindows上でおこなうのは少数派かな

139 :
iOSはしらんけどAndroidはnix系だな

140 :
今日行ったら200円になってたから思い切って買った

141 :
ちなみに書籍タイトル正確なのは Xアプリケーションプログラミング1 xlib編 92年発行の東工大の教授の本だ
19年も前の本だけど19年前から顔文字ってすでにあったのな
19年前って俺まだ小学校低学年だったからパソコンとかよく知らんかったけど
X11R5が出たばっかのころのらしい、今のに使えんのかな

142 :
>>141
これ? http://www.amazon.co.jp/dp/4883170225/ なつかしい。
自分は当時大学生で、大学で何百万もするUNIXワークステーションを使って
サンプルとか打ち込んでたなあ。今なら安PC+Linuxでより快適にできる。
LAN経由で近くで作業している奴のディスプレイにイタズラの画面を出したり...
一般家庭はともかく大学にはインターネットの電子メールとかネットニュースとかが
既にあったし、顔文字とかAAも使われていた。www(草じゃないよ)が出てきた前後だな。
大学のマシンにサーバー立ち上げたっけ。エロのw 今ならマスコミ沙汰になって
退学処分か?
Xのプログラミングから離れて久しいのでアレだが、Xlibはあんまり変わってないんじゃ?
すなわち今でも使えるのでは。あえて今から低レベルなものを使ってプログラムを
書きたいのであれば...

143 :
dwm, xmonadといったタイル型ウインドウマネージャや
dmenu, dzenなどのシンプルなランチャの流行もあって
今でもXLibプログラミングは熱いですお

144 :
>>143
そうなんだー。
今dwmのソースをダウンロードしてみたらソースファイルが一つだけ...
こんなんでいいんだ。
サーバはXを使うとして、ウインドマネージャを自作するなんてのも面白そうだね。
ウィジェットとか言い始めると敷居が高いと思われるので...

145 :
age

146 :
この質問ここでいいのか分からないんだけど
↓のサイトのやりかたで、つまりcatコマンドからMakefileを作ろうとしたんだけど
gccの前のTABが入力できなくってcshでやってたんだけどTABが入力できないのってシェルの問題?
TAB入力できなくって変わりにスペース入れたらmakeがエラー出てググったらスペースじゃダメとか知らなかったよ
flags for compiling Xlib.h in gcc
http://www.linuxquestions.org/questions/programming-9/flags-for-compiling-xlib-h-in-gcc-333230/

147 :
シェルスクリプト総合 その18
http://hibari.2ch.net/test/read.cgi/unix/1308195527/

148 :
そのスレにcsh使いを誘導しないで欲しい
cshのmanのヒアドキュメントを読む。echoで書く。cshを捨てる(推奨)

149 :
インタラクティブに使ってるなら
$ cat >Makefile
中身入力、改行
Ctrl+D

150 :
Rob Pike曰く、Dennis Ritchieが亡くなったと。
https://plus.google.com/u/0/101960720994009339267/posts/ENuEDDYfvKP?hl=en
南無

151 :
お悔やみ申し上げます

152 :
          _____
  .ni 7    /        \  ご冥福をお祈りします
l^l | | l ,/) / /・\  /・\ \    .n
', U ! レ' / |    ̄ ̄    ̄ ̄  |  l^l.| | /)
/    〈  |    (_人_)    |  | U レ'//)
     ヽっ     \   |    /   ノ    /
 /´ ̄ ̄ ノ     \_|    \rニ    |
                      `ヽ   l

153 :


154 :
まちごた
まいいや

155 :
>>70
ライセンスの問題とか絡むからじゃね?
無料で公開すべきものを本を買うとか金銭発生するし

156 :
>>70
「unix向けアプリ」というのはたとえばGTK+とかでアプリを作るという事でいい?
いくつか本が出てたと思うけど。実際に本屋にないという意味?

157 :
隣のおっさんうるさい

158 :
じゃあ転職しろ

159 :
>>156
普通はコマンドライン版を指すよ

160 :
そんなこたーない。

161 :
「コマンドラインアプリ」ってあんまり聞かないな

162 :
cursesを使ったようなやつ?

163 :
単にコマンドって言うもんね。

164 :
Xアプリケーションプログラミング1 xlib編で書かれていたアプリケーションとは
不特定多数のユーザに使われることを前提として作られた,"汎用的で便利なプログラムのことをアプリケーションと呼ぶ" (引用 p.27 l.17~18)
だそうで
X用のプログラムは必然的にアプリケーションと呼ばれるだけの性質を持つそうです


165 :
Ach, so.

166 :
http://www.amazon.co.jp/dp/4883170225
これか? 20年も前の歴史的価値品ない骨董本引用して何が言いたいんだ? ジジイ。

167 :
>>166
流れからすると>>67の発言みたいで、ジジイじゃないっぽいけどw
自分はたぶんジジイだがw X11のプログラミングの本で、これみたいに比較的
気楽なノリで始められる本はあまりなかったように記憶しているのだが。
何かいい本をご存知ですか?
そもそもXlibを使うこと自体が骨董に属するんだったりしてw
何か違うもの、たとえばOpenGLとかでやった方がいいのかな?

168 :
大昔でもアプリ向けにはathenaとかmotifとか使ってたんでは。
あとOpenGLと比べるのもなにかおかしい気が。

169 :
>>166の2巻目はAthenaウィジェット編だからな
当時もXlibでアプリ作るとか無いだろ

170 :
>>168
今はXlibの話をしてるつもりなんで逆にAthenaとか言い出す方がちょっと違う。
あ、イベント処理とかもいるからGLUTもか。
>>169
Xlibだけで自分でボタンやメニューを作ったりしたのはいい思い出w

171 :
ああそうなの、アプリの話かと思ったわ。すまんね。

172 :
67は今やオールドテクノロジー化したXlib本を買って何がしたいのやら

173 :
オールドテクノロジーってわけじゃないけども。
今時のGTKアプリだって下位層で使ってるんだから。
「低レベル」ってのが適切な形容詞だと思う。

174 :
時代はXlibからXCBだと聞いた

175 :
>>67
X11
http://xjman.dsl.gr.jp/X11R6/X11/

176 :
>>67
Xlib Programming Lectures
http://homepage3.nifty.com/rio_i/lab/xlib/

177 :
EmacsやらNetbeansやらをいじっていて気付いたのですが,
大昔(EclipseもNetbeansもなかった頃)のGNUとかオープンソース界隈のエロい人たちが使っていた
IDE(統合開発環境)ってどうなってたんでしょうか?
IDEなんか使ってなくて,CUIに仮想デスクトップ+vi/Emacs+gcc/gdbとか普通にありそうですが…

178 :
いまはemacsにもIDEが乗っかってる時代だからな

179 :
フルカスタマイズしたEmacsがIDE相当だな
結構色んなこと出来るよあれ、環境作るのは面倒いけど

180 :
仮想デスクトップがscreenか

181 :
・エディタの無い時代
ソースは紙に下書き、パンチカードに清書して入力するよ!
出来上がったソースは印刷してチェックだ!
ジジイ達が処理の切れ目に書く馬鹿デカいコメントはこの時代の名残りだよ!
だって印刷物は関数のところへジャンプも、そもそも検索も出来ないからな!
・ラインエディタ時代(edなど)
環境によっては標準出力はプリンタかも知れないよ!
でも入力してるその場でソース見たり、エディタによっては検索も出来るよ!便利!
・スクリーンエディタ登場(viなど)
なんと行の途中の文字だけ編集したり出来るよ!
これで長い行もサクサク編集出来るね!
ディスプレイもみんなの分あるから、超便利になったよ!

182 :
>>181
プログラム書いた紙(コーディングシート)はパンチャーのおばちゃんにパンチしてもらうんだぜ。
その後の修正は自分でパンチするけどね。

183 :
前の職場にリアルでリアルでパンチャーやってた頃があるって言ってたパートのおばちゃんが居たな…

184 :
emacsが無かった時はvi使ってたよ
いまでも普通にvi使う
echo>>
だけで済ませることもしばしば

185 :
このスレのエロい人thx!
複数の言語で何か処理してファイルで読み書きするというレベルに達したので,次のレベルに進みたくて調べたけど
大体予想通りということがわかりました.
昔と違って分野が複数ある(並列化一つとってもマルチスレッド,マルチコア,マルチプロセッサにGPU)ので
進む方向性を選ぶのが難しい.

186 :
>>185
ハードとソフトが混ざってんぞ
マルチスレッド、分散処理、GPGPUな
あ、あとSIMDかSSE命令などのデータ並列命令な

187 :
>>185
>昔と違って
本質的にはそんなに違わんw
>進む方向性を選ぶのが難しい.
何かをどうしても高速に計算したいとかあるわけじゃなく、お勉強でやってるだけなら
かたっぱしからやっとけばw

188 :
馬鹿には無理

189 :
情報系の院生として研究に従事していますが,自分の立ち位置は「他学問から対象問題を収集,複数の手法を組み合わせて解く」こと.
問題に対する解法の有効性を検証するのが仕事なので,シンプルに組んでそこそこ新しい計算端末で4日ほど計算させる.
有効性が検証されたら,複数の小問題として分割して学部生の卒論として展開されます.
なのでGPGPUやMap-Reduceなどの先進的な手法を自分で扱いたいのですが,そこまで時間を確保できない.
>>186
すみません,利用する選択肢で書いてしまいました.
ただGPGPUなどもそうですが,自然科学分野の対象問題を性能を引き出すように構築するのって
すごく難しい(この変数が何バイトで…と考えなければならないので)
>>187
昔といってもベーマガ全盛期のあたりを指しています.
教科書を元に脇目もふらず,ロジックを検討できるのはいいなぁと思います.
今ではWebアプリ(phpからJSP,RoRなど)やクラウドも登場して選択肢と夢ばかりがひろがりんぐです.
>>188
そのとーりだと思います


190 :
コンパイルが通らなくて困っています。
OS BSD/OS 4.3
コンパイルしたいもの libfetch
コンパイラgcc 2.95.3
cc -O2 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wno-uninitialized
-Wreturn-type -Wcast-qual -Wpointer-arith -Wwrite-strings
-Wswitch -Wshadow -Werror -D_LARGEFILE_SOURCE
-D_LARGE_FILES -D_FILE_OFFSET_BITS=64
-DDEF_UMASK=0022 -I/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libarchive/libarchive
-I/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libfetch
-DHAVE_NBCOMPAT_H=1
-I/usr/pkgsrc/bootstrap/work/wrk/pkgtools/pkg_install/work/libnbcompat
-I. -D_LARGEFILE_SOURCE -D_LARGE_FILES -DFTP_COMBINE_CWDS -c common.c
cc1: warnings being treated as errors
common.c: In function `fetch_write':
common.c:639: warning: function declaration isn't a prototype
というエラーでコンパイルが通りません
common.cのソースは
#ifndef MSG_NOSIGNAL
#include <signal.h>
#endif


191 :
ssize_t
fetch_write(conn_t *conn, const void *buf, size_t len)
{
struct timeval now, timeout, waittv;
fd_set writefds;
ssize_t wlen, total;
int r;
#ifndef MSG_NOSIGNAL
static int killed_sigpipe;
#endif
#ifndef MSG_NOSIGNAL
if (!killed_sigpipe) {
signal(SIGPIPE, SIG_IGN);
killed_sigpipe = 1;
}
#endif
639行目はsignal(SIGPIPE, SIG_IGN);になります。
man signalをした所
void *signal(sig,func());
void (*func)(sig)
と書いてありました。
<sys/signal.l>ヘッダファイルは
__BEGIN_DECLS
void (*signal __P((int, void (*) __P((int))))) __P((int));
__END_DECLS
#endif /* !_SYS_SIGNAL_H_ */
と書いてありました。
もちろんヘッダファイルにSIGPIPEとSIG_IGNは定義してあります。
これはOS側のsignalが古すぎてコンパイルできないのでしょうか?
なんとか良い方法は無いでしょうか?

192 :
>>191
>OS BSD/OS 4.3
えらく懐かしいものをお使いで。特に自分で解決できる技量がない場合には、
より新しくて沢山の人が使っている環境を使った方が楽だよw で、
安直な方法: -Werror なしでコンパイルする
もう少しちゃんとした方法:
1) 本当に signal(SIGPIPE, SIG_IGN); の箇所か確認(試しにここをコメントアウトしてみる等)
2) 関数やその引数に最終的にどういう宣言が使われているか確認。プリプロセッサ処理
後のファイルをチェックしてみるとか。
(3) (2)の原因を理解して修正。インクルードやマクロ定義を修正したりとか。
>void *signal(sig,func());
manにこう書いてあるのはググってもそうひっかからないんだけど
http://mail-index.netbsd.org/netbsd-bugs/1996/03/24/0001.html
というのがあるので、あるリリースのBSDにはそういうmanが付いてきたのかもね。

193 :
>>192
すいません。
ありがとうございます。
1)はコメントした所、コンパイルとおりました。
2)はすいません。gccとpkgsrcに不慣れなため、まだ試していません
3)はビンゴだと思います。
たぶんBSD/OS 4.0のmanをインターネットで見つけたのですが、
http://www.eecs.harvard.edu/syrah/vino/release-0.40/man/programref/libc/signals/signal.3.txt
void(*signal(int sig, void (*func)());)()
と正しいようです。
ヘッダファイルを修正してやってみます。

194 :
リチャードスティーブンスの本でわからない点があるので質問します
unixネットワークプログラミングでifreq構造体ifr_dstaddrの説明でp-to-pリンクの反対側とありますが
どういうことでどういう値が入るのでしょうか

195 :
ifconfigでPPPなどのpoint-to-pointなインターフェースを作ると、
対向側のIPアドレスが入る。

196 :
Xclockとか一見シンプルそうなアプリでさえ
ソースコード見るとすんげえ量で萎える
人のコード見て勉強とかちょっと疲れてきた

197 :
Win32API ほどじゃない

198 :
>>196
http://www.pygtk.org
http://live.gnome.org/Seed
GUIアプリならこういうので書けば? あるいはせめて、
http://www.gtk.org

199 :
wxPython オヌヌメ

200 :
xmessageって便利やな 

201 :
今ubuntuのGCCコンパイラが4.5.2 が入っているんですが、
そのGCCコンパイラを4.4.5にダウングレードしたいのですが、どうすればいいですか?


202 :
パッケージのダウングレードなら犬板のUbuntuスレ、ソースからコンパイルならGCCスレで聞く方が良さ気

203 :
>>202
ヒントサンクス
そこで聞いてみるノシ

204 :
【プログラミング部】 PHPが100倍速で動くようになったぞー
http://awabi.2ch.net/test/read.cgi/poverty/1327050821/

205 :
LinuxとかBSD系ってUNIXじゃなかったのな
昨日初めて知った
ってことはLinux系の質問はここじゃスレチになるのか

206 :
1によるとUNIX cloneも含んでいるからおkよ

207 :
つうか清く正しいAT&Tの血統はまだ残っとるのか?

208 :
LinuxはUNIXじゃないがBSDはUNIXで良いと思ってた

209 :
BSDはUNIXの血を浄化しました。

210 :
BSDはトレードマークである「UNIX」は名乗れないです。
opengroupの認証通ってないので。

211 :
敢えてソースから何から全部書き直して
ライセンス汚染してないことにしてる?

212 :
短いからとりあえずこれでも読めば
http://ja.wikipedia.org/wiki/BSD

213 :
Single UNIX Specification - Wikipedia
http://ja.wikipedia.org/wiki/Single_UNIX_Specification
これにLinuxもBSD系もどうたらこうたらって読んだ

214 :
まだ初心者で申し訳ないのですが、
Ubuntu上でC++言語(g++)でマウス操作をやりたいと思い、
XAutomationのxteのソースを見て真似てみました。元はC言語でかかれています。
#include <X11/Xlib.h>
#include <X11/extentions/XTest.h>
としていて、そのヘッダではifdefでC++の場合は extern "C" が付きます。
なので自分の.cppでは特別なことをせずにXTestFakeMotionEvent(..)が呼べるはずなのですが、
リンカが"undefined reference to XTestFakeMotionEvent"とエラーを出します。
どうすればよいでしょうか?

215 :
-iXtst してる? gccのコマンドライン晒したほうがいいよ
できれば最小限のソースも

216 :
あれ、l って打ったつもりが i になってる。ごめん
-lXtst の誤り。詳しくは man xtestqueryextension で

217 :
Macの質問もここでおkなの?

218 :
Mac固有にならなければ

219 :
マックってユニックスだったんか
知らなかったわ

220 :
ということはiPhoneの質問もここでおkかな?

221 :
iOSはUnix系だとあるけど
iPhoneでUnix的な使い方ってできたんだっけ?

222 :
mmapとか動くよ

223 :
>>221
「使い方」によるが、
カーネルとAPIの一部がBSDとコードベース同じだから。

224 :
おねがいします

プロセス間通信で使う、名前付きFIFOをPスレッド間で使うことは可能でしょうか?
それともなにか問題が発生するでしょうか?
また、名前付きFIFOの名前を既存ファイルとかぶらないように自動生成する方法はありますか?

225 :
vimrcとかbashrcとかscreenrcのrcって何の略なんですか?

226 :
run commandの略だという説が有力

227 :
UNIXの部屋 コマンド検索:rc (*BSD/Linux)
http://x68000.q-e-d.net/~68user/unix/pickup?rc

228 :
>>224
プロセス間で使えてスレッド間で使えなくなる理由が分からない
その内容だとpipeで十分に思える。というより、そういうライブラリ使ったほうがオーバーヘッドがないような
一時ファイルはmktempで作ると他と衝突しない

229 :
× mktemp
○ mkstemp
じゃなかったかな。
>>224
SIGPIPEのハンドリングが難しいのかな。
よくわかってないけどw

230 :
mkstempって普通ファイル以外作れたか?

231 :
>>226,227
ありがとうございました

232 :
>>228
>>229
>>230
用語を間違えていました。
名前付きFIFOではなく、名前付きパイプ(=FIFO)でしたね。失礼しました。

スレッド間だともしかして排他処理がうまくできないのではと思ったもので。
スレッド間で使うなら確かに匿名パイプのほうが適切ですね。
mktemp()のセキュア版であるmkstemp()は、ファイル自体を作ってしまうのですが、
普通のファイルをパイプ化できるのであれば問題ないのですが、
どうもそのようなことをしてくれるシステムコールは存在しないようで・・・
tmpnam()で名前だけ作ってmkfifo()でFIFOを生成してもいいのですが、
tmpnam()のせいでコンパイル時に恐ろしげな警告が出るのが気持ち悪くて・・・

・・・困りました

233 :
スレッド間ならファイルディスクリプタは共有しているので、名前付きである必要な理由は無いな。
あえてnamed pipeを選択する理由は?

234 :
名前付きを使いたいのはスレッド間ではないです

235 :
forkすればファイルディスクリプタは複製されるし、全く別のプロセスに
ソケットを使ってファイルディスクリプタを送信することもできたはず
というかその用途ならソケットで通信すればいいのでは?

236 :
> プロセス間通信で使う、名前付きFIFOをPスレッド間で使うことは可能でしょうか?
> 名前付きを使いたいのはスレッド間ではないです
どっちが本当?

237 :
下が本当です

上はうっかりミスで、
「プロセス間通信で使う、パイプをPスレッド間で使うことは可能でしょうか?」
が意図したQでした。
よって、想定しているシチュエーションは2つあったわけです。
1. スレッド間でパイプ使用
2. (プロセス間の)FIFOのユニークな名前の自動生成

238 :
できればプロセス間でも親子関係とか持たせてパイプにする方がいいような。
どうせユニークな名前をどうにかして相手に伝えないといけないんでしょ。

239 :
パイプでつなぎたい先のプロセスは、独立した実行ファイルによるものですので

240 :
forkしてパイプ準備してからexecすればいいのでは

241 :
寝ぼけてました・・・
全く、そのような方法でやろうと自分でも考えていました。

242 :
書き込む前に一度読み直して人に伝わるかどうか位確認しろw
結局>>240の提示した方法で実現できそうな話だったんだな?

243 :
パイプの名前は?

244 :
>>243
ズシオ

245 :
SIGPIPEウゼエって時は、
int result = send( fd , buffer ,size , MSG_NOSIGNAL);
ってやり方もある。OSとfiletypeを選ぶけども。

246 :
SIGPIPEなんて速攻でIGNOREしてたわ

247 :
解決した後で聞かれもしてない事(しかも大した情報量がない)を
ドヤ顔で言い出す奴ってかなり恥ずかしい。

248 :
ためになるからイナフだ

249 :
>>247は可哀想。

250 :
system()がダメでexec*()じゃなければならない場合って具体的にどういう使いどころですかね?

251 :
・forkした後にあれしたりこれしたり
・login shellに左右されたくないコマンドライン

252 :
すいません・・・
そこをもう一声具体的に・・・悲

253 :
自分とパイプで繋がった子プロセス内で外部のプログラムを実行できたりとか

254 :
コマンドラインとして渡す文字列(の一部)が文字列としてプログラム外からやってくる時。

255 :
>>253
これは、なるほど!
実際試してみます
>>254
      ___   ━┓  ___    ━┓
     / ―  \  ┏┛/ ―\   ┏┛
    /  (●)  \ヽ ・. /ノ  (●)\  ・
  /   (⌒  (●) /. | (●)   ⌒)\
  /      ̄ヽ__) /   |   (__ノ ̄  |
/´     ___/     \        /
|        \          \     _ノ
|        |          /´     `\

256 :
fork+execとsystemの違いってなんですか、ならわかるけど
forkとsystemの違いってなんですか、だと根本的に勘違いしてるだろうからman読んだほうがいいよ

257 :
こんな>>255態度で返す奴ってなんなの?

258 :
「シェルを通すか通さないか」という言葉ぐらいは知ってるんですが、
じゃあ、使い分けが必要なのは具体的にどういう箇所で?となると
わかっている人に教わったほうが間違いがないかと思ったものですから・・・謝

259 :
言い訳だけしてまともに謝る事すらできないのか
人間のクズだな

260 :
ごめんなない

261 :
誠意を見せたかったらどうするのかわからないのか?
教えてやろう。画像を貼るんだよ。

262 :
http://www.youtube.com/watch?v=xISG4nGTQYE
いかがでしょうか?

263 :
systemとexecじゃできることが違いすぎて何を聞きたいのかが不明過ぎる

264 :
はったりはやめなよ

265 :
UNIX勉強しろよ

266 :
薀蓄自慢したい人ですかね?

267 :
>>263
別プロセスを生成させる以外になにか大きな使い方の差があるのでしょうか?

268 :
>>267
シェルがあるかないか も超重要じゃね?

269 :
>>267
・systemは1)プロセスを生成して、2)別バイナリを実行する。
1と2の間にいろいろできる。(パイプでつなぐ、資格情報の制御、リソースの制限などなど)
・systemはshに実行させる。shの機能(リダイレクトとか)が使える反面、セキュリティ上の問題を起こしやすい。

270 :
>>264,266,267
やるきねーだろ

271 :
やる気はあります!
レスが付くまで全裸で待機していましたし

272 :
全裸待機する暇があったらman 3 system; man 3 exec

273 :
らめえぇぇぇぇぇぇぇ
システムのページサイズを超えてかきこまないでぇぇぇぇ
あたしまだバージョン 2.6.11 より前なのにぃぃぃぃぃ

みたいな

274 :
Linux板でもR

275 :
あそこは管理系の薀蓄でブヒってるのが多いからなんとなくイヤ
「お前が管理しているそのツールのこの機能はどうやって作るのか」
という質問には答えてくれなそう

276 :
>>275
> 「お前が管理しているそのツールのこの機能はどうやって作るのか」
何言っているかよくわかりませんw

277 :
詳解UNIXプログラミング
UNIXカーネルの設計
を読み終わったらまたいらっしゃい

278 :
そしてだれもいなくなった(未完)

279 :
嵐の番組ってCMが生理用品ばっかでワロス

280 :
>>278
まだまだ

281 :
>>277
>詳解UNIXプログラミング
棚から引っ張り出して眺めているが、内容が古くて実用に注意を要する
もっと新しいの同等品を教えろ

282 :
2/eが出てるよ

283 :
違いを意識したことないが、その手の本でPOSIX 2008に対応してるのってあるの?

284 :
思いあたるのはこれ
http://www.man7.org/tlpi/tlpi_in_detail.html

285 :
>>284
表紙キモ!!!!!!
陰嚢の皺を無数の虱に這い回られているような気持ち悪さだ

286 :
旨そうなゼンマイだと思ったのにw
>>284
へーLinuxか。2008の機能も実装してたのか。この辺りの各OSごとの実装状況はまるで分からんが、
実装されているならマニュアルもあるだろうからそっちから調べるのもありだな。ありがとう

287 :
>実装されているならマニュアルもあるだろう
(;゚ Д゚) …!?
(つд⊂)ゴシゴシ

288 :
http://man7.org/tlpi/translations/index.html
> Japanese O'Reilly Japan Announced (Q2 2011).
> Publication likely in second half of 2012.
絶対出ないと思ってたのに
今の日オラにこんな根性があるとは思わなかった

289 :
また半端な翻訳かまして、後が出ないよ糞詰まり状態に1000ペリカ

290 :
>>288
ポチってしまった俺は、訳本が出る前に完読してやろうと心に誓うのであった

291 :
出版元のサイトからPDFつきが70$で買えるけど(ディスカウントクーポン使用)
もしAmazonでポチってたら強く生きてくれ

292 :
なんじゃこの箱枕は!!!!!
('A`)

293 :
UNIXのインダイレクションについてレポートにまとめろとかいわれたんだけどUNIXとインダイレクションって
なんか関係あったっけ?

294 :
リダイレクションの聞き間違いだろ。

295 :
>>293
せっかくだからそのままインダイレクションでレポート書いちゃえ

296 :
fork + execlpしたプログラムに引数でstruct構造体を渡すことってできますか?

297 :
馬鹿には無理

298 :
勉強しなおします

299 :
構造体の中身を全部文字列に直して、引数で渡して、その文字列から構造体を作り直せばいいよ

300 :
mmapした領域にコピーしとく、ファイルディスクリプタはそのまま
継承されるから、子プロセスでmmapすりゃいい。

301 :
テキストファイルを実行ファイルの一部としてくっつけておいて
実行時にそれを普通のファイルみたいにopen/read/writeすることは可能でしょうか?

302 :
実行するユーザがread, write権限もってりゃできる。
そういうユーザーは実行ファイルを壊すことも、悪質なプログラムに
中身をすり替える事も可能になる。

303 :
で、どうやって?

304 :
自分が入ってたファイルを書き込みモードでオープンできるかどうかは、
ファイルシステムに拠るんじゃないかな。
パーミッション的にOKだったとしても。

305 :
ファイルシステムじゃなくてOSに拠るのかも。
とりあえずbsd系では平気そうだけどlinuxでは無理だよね。

306 :
Solarisなんかも書き込みはアウト。
Text file is busyになる。
BSDもダメなはずだが…
一つの実行ファイルを配布して、それを実行しながら書き換えようってのは無理。
Mac OS Xならリソースフォークを書き換えればいいが。

307 :
>>306
BSDは手元にないからわからないけど、OS Xは書き込めるよ。

308 :
forkしたあとなら出来る?

309 :
textをbusyにしているプロセスが2つに増えるだけ。

310 :
BSDとかMachの仮想記憶だと、同じページをマップしてても書き換えたらコピーが作られるんじゃないの?
だからOS Xは書き込める。


311 :
それはどのUNIXでも同じ。
ただし書き換えられるのはデータ領域。
実行ファイルが書き換えられるわけじゃない。
Mac OS X(Darwin)は同一ファイル内のリソースフォークを書き換える必要があるから、
HFS+のファイルはそう扱ってる。UFS(今はもうないが)上だと違う。

312 :
ああそうなんだ。OS Xでもファイルシステム依存なのね。

313 :
最終的に変更されたバイナリが残ればいいのなら、プログラム起動時にどこかにコピーを作ってそれで上書きすれば
その上書きした方に対して自由に読み書きできると思うんだが、いろいろ怖い

314 :
おまえらautoconfわかる?
これでx86プロセッサーのコア数を確認するマクロあったら教えてくれ。
http://www.gnu.org/software/autoconf-archive/The-Macros.html#The-Macros
ここに有志が書いたマクロについてのマニュアルがあるから、探してくれ。
誰か英語が得意な奴よろ。
もし無いなら誰かm4マクロでx86プロセッサーのコア数確認のマクロ書いてくれ。
これCPUの資料な。
たぶんアセンブラの命令とかで調べられるはずだから、
ここ読めばどっかに載ってるから。よろ。
http://download.intel.com/jp/developer/jpdoc/Processor_Identification_071405_i.pdf
http://download.intel.com/jp/developer/jpdoc/248966-024JA.pdf
http://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol1_Online_i.pdf
http://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol2A_i.pdf
http://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol2B_i.pdf
http://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol3_i.pdf

315 :
やっぱいいわ、
見つかったわ
http://www.gnu.org/software/autoconf-archive/ax_count_cpus.html#ax_count_cpus
じゃあの

316 :
同じ問題で、画像データやアイコンデータなんかはどうやって管理しているの?

317 :
なにが?

318 :
>>316
パッケージ化して配布。
Macだってリモートファイルシステムではリソースフォークをうまく管理できないので、
buldleにして配布することが推奨されてる。

319 :
リードオンリーなら別の問題だ。実行ファイルに埋め込む場合もある。

320 :
実行ファイルに埋め込んだ場合、「どこにあるか」を知らないと読み出しできないではないか・・・
すんません、そういう関数や手順があるなら教えてください
一般的なLinuxでgcc|g++を想定しての話です

321 :
読むだけならデータ化すればいいだけだろ。xpmみたいに。

322 :
>>320
GNU ldなら
ld -r -b binary -o foo.o foo.jpg
でfoo.jpgをオブジェクトファイルにすることができる。
nm foo.oすりゃわかるが、_binary_foo_start、_binary_end_start
というシンボルが定義される。
このオブジェクトファイルを普通にリンクすれば直にアクセスできる。
リードする必要すらない。

323 :
おっと
× _binary_foo_start、_binary_end_start
○ _binary_foo_start、_binary_foo_end

324 :
それをどうやって、(その画像データを読むプログラムの)実行ファイルにくっつけるの?
まさか、異様に長い配列を?・・・・て、静的データを置く領域が足りなくて無理だし

325 :
>>324は、>>321へのQ

326 :
別のファイルにしろ

327 :
いやだ!

328 :
>>322
>>323
どうもありがとうございます
仕事場のマシンで実験してみます

329 :
>>324,328
データサイズ的には>>321と同じだぞ。
> 静的データを置く領域が足りなくて無理だし
なら、>>322も置けないという事にかわりはない。

330 :
>>322
そういえばMac OS Xのバイナリにはアイコン用のセグメントってのが定義されてる。
今は有効かどうかわからないが、大昔のNeXTの頃はそこにアプリのアイコン画像を
保存していた。

331 :
unixでdllのような動的ライブラリーはありますか?
どうやって作ればいいですか

332 :
>>331
なんで「unix 動的ライブラリ」でググらないの?

333 :
組み込みとかだとサポートしてないアーキテクチャとかあるんかね。8bitMMUなしとか動くUnixが無いか

334 :
acfがあれば大体うごくよ

335 :
>>331
あるけど、OSによって作り方も使い方も違う。
LinuxとFreeBSDとSolarisの間でも微妙に違うし、MacOS Xとなるとかなり違う。
その辺の違いを埋めようってことでGNU libtoolというのが作られているけど、
こいつがまた色々とアレで、無意味で余計で有害なことをしてくれることがある。
FreeBSDでバージョン番号の付け方が致命的に間違っているとか。
結局、libtoolを使いこなすためにもOSごとの違いを一通り知っておく必要がある。

336 :
バージョン管理する気ないなら、軽微な差しかないと思っていい。

337 :
>>335
バージョン番号の付け方って?
libaaa.so.0.0.0
のような、最後に付加される0.0.0のことか?
これfirefox9.0.1などの数字とは根本的に意味が違うものなのだが、その辺はおわかり?

338 :
最近のFirefoxもバージョンの振り方間違ってると思うw

339 :
>>331
gcc -fPIC -c a.c
gcc -shared -Wl,-soname,liba.so -o liba.so a.o

340 :
>>339
嘘教えんなwww

341 :
Mac OS Xではこんなような感じで作った記憶がある。
cc -fno-common -c a.o
cc -dynamiclib -flat_namespace -undefined suppress -o liba.1.0.0.dylib a.o

342 :
>338
あれはひどいな

343 :
ファイル hello.c
#include <stdio.h>
void hello(void) {printf("hello world\n");}
ファイル hello.h
#ifndef __HELLO_H__
#define __HELLO_H__
extern void hello(void);
#endif //__HELLO_H__
ファイル main.c
#include <stdio.h>
#include <hello.h>
main(){hello();}

ソースコードが何をしてるかは一目瞭然なので説明はしない。
わからない人はさようなら。
これを通常のリンクでビルドする場合
gcc -o a main.c hello.c -I./

344 :
#include <hello.h> のいみがわかりません

345 :
これの hello.c モジュールを動的ライブラリにする場合、
最も基本的な方法だと以下のようになる。
gcc -fPIC -c hello.c
gcc -fPIC -shared -Wl,-soname,libhello.so -o libhello.so hello.o
#インストール作業
install libhello.so /usr/lib/
install hello.h /usr/include/
結果、/usr/lib/、/usr/include/にライブラリーとしてコピーされる。
しかしこれではまだライブラリーは有効にならない。ldへの登録の必要がある。
ldconfig
これで libhello.so を使えるようになった。
あとは通常のライブラリをリンクする場合のやり方でビルドできる。
gcc -o a main.c -lhello

346 :
libtoolを使って同様のことをする場合
libtool --mode=compile gcc -c hello.c
libtool --mode=link gcc -o libhello.la hello.o -rpath /usr/lib
#インストール作業
libtool --mode=install install libhello.la /usr/lib/libhello.la
libtool --mode=install install hello.h /usr/include/hello.h
ldconfig
あとは普通にリンクできる。
gcc -o a main.c -lhello

しかし、libtoolの有用な点は、この gcc -o a main.c -lhello も共通書式で書ける点にもある。
同じが、このようにも書ける。
libtoo --mode=compile gcc -o a main.c /usr/lib/libhello.la

347 :
libtoo --mode=compile gcc -o a main.c /usr/lib/libhello.la
これは何を意味するかというと、動的ライブラリーが使用できないOSの場合は、libtoolは静的ライブラリを生成する。libhello.a
もしも libhello.aの場合は、gcc の書式は動的ライブラリの場合とは異なり、以下のようになるが、
静的ライブラリの場合: gcc -o a main.c /usr/lib/libhello.a
動的ライブラリの場合: gcc -o a main.c -lhello
この書式の違いを、共通の書式で統一できるのが libtoolの利点である。
libtool --mode=compile gcc -o a main.c /usr/lib/libhello.la
と書くことで、OSの対応状況に状況に応じて、都合良い方でビルドされる。(基本的には動的ライブラリの使用が優先される。優先度の変更はオプションで行える)

348 :
libtoolとかautotoolとか移植を簡単にするためのツールなのに、
そのツール自体の移植が非常に困難という矛盾。
考えた奴Rばいいのに。

349 :
>>348

なにを言ってるんだ?
よく考えてみろ

移植という作業の、面倒な部分のみを『抽出』して、そこを隠蔽するツールがlibtoolやautoconf。
つまり、アプリの多プラットフォーム対応の際の、面倒な部分のみを抽出した問題。この問題を解く作業こそが、libtoolやautomakeの移植作業というもの。
面倒な問題だけを一ヶ所にあつめて、問題を解こうとしてるのだから、困難なのは当然だろ。
逆に、抽出した困難さが、もしも簡単に解ける程度であれば(簡単にlibtoolを移植できたのであれば)、
それはもともと、切り分けるに値しないほど簡単な問題だったということになる。

350 :
なんで、システムライブラリ、ヘッダーをconfigureの度にスキャンするんだ?
バカ丸出しのシステムだろ。
dllのリンクのために何行のツール作ってるんだ?
リンクのために5行以上の記述が必要なシステムなんか見たことないぞ。

351 :
まあ色々なプラットフォームでのビルドをサポートするためのツールだし。
あとキャッシュを消さなければ毎回スキャンはしないかも。

352 :
>>350
autoconfはdllのリンクのためだけにあるツールじゃない。
まずツールが何するものなのか、結構簡単なんでそこを理解することから始めよう。

353 :
libtool は実質的に *.so (ウインドウズで言う所の *.dll のようなもの)をビルドする書式を共通化するためのものだけど、
./configure を生成する autoconf, automake は、システムのタイプを判断する作業から、プログラマーを開放してくれるから、使った方が便利。
面倒くさいのでもう343のように詳しくは書かないが、(どうせ誰かが書いてくれるだろう。)
例えば、引数で受け取った画像を拡大縮小して、ファイル出力するツール|ライブラリを書く場合。
画像処理は(たとえば単純にバイリニアだとして)、
画像をブロック毎に分割して処理を行えば、完全に並列処理できる類の問題だよな?(アムダールの法則の1/(F-(1-F))のFが非常に小さい状態)
だからスレッドに分割して、多コアに割り当てて、一気に高速計算するべき。
この際に、無駄なスレッドを作ると、逆に速度が遅くなる。
例えば、プロセッサのコア数が4だとしたら、スレッドも4個にするのが最も効率が良い。(コア数が4なのにスレッドを8個とか作っても、無駄だし、スイッOロスで逆に遅くなる)
このプロセッサー数を、実行時に判断することもできるのだが、それだとビルド時の決め打ちによる強力な最適化を書くことができない。
そこで、定数としてビルド時にコア数を知っとくことは、性能を追求する場合において、とても有用。
そこで、ビルド時にコア数を知りたいという要求が出てくるのだが、この「コア数を知る」という方法が、OSやCPUなどによって、それぞれ全然変わってくる。
これに全パターン対応するMakefileを書くのは、非常に負担となるので、ここを共通の書式で自動化してくれるのが autoconf の役割。
たとえばプロセッサー数ならば configure.in に AX_COUNT_CPUS と一行書いておけば、(もし指定してあれば)config.hに #define CPU_COUNT 4 等のようにマクロ定義される。これを利用してコードをを最適化できる。
(AX_COUNT_CPUSのm4マクロによって(autoconf archive要インストール))
CPU数に限らず、ベクトル演算のサポートの有無など、事前に調べて最適化に有用な情報を、容易に得る手段として、autoconfは非常に便利なので使った方がいい。
autoconfで実行環境情報を積極的に得るようにすれば、プログラム最適化の幅が広がるはず。

354 :
thx!!

355 :
ちなみにCMakeはもっとスゴイぞ!

356 :
>>353
要するに、コア2のプロセッサをコア4のプロセッサへ換装しても、
それをautoconfが自動認識してくれるから便利ってこと?

357 :
バカなautotools
checking ...
これが世界中でどれだけ行われてるんだ? その電力で何人のアフリカの子供が…
システムライブラリなんか一回スキャンしてデータベース作ればOK。
考えた奴R。

358 :
>>353
> たとえばプロセッサー数ならば configure.in に AX_COUNT_CPUS と一行書いておけば、(もし指定してあれば)config.hに #define CPU_COUNT 4 等のようにマクロ定義される。これを利用してコードをを最適化できる。
autoconfが対応しているOS場合の事。対応していないときに変更箇所を探して、m4のマニュアル読みながらm4マクロ書いて…
Makefileに
NUM_CORE=4
5秒で終わるわ。

359 :
もうちょっとましな指摘は書けないのかよw

360 :
>>357
おまい頭良いな

361 :
アフリカの子供が不幸なのはアフリカの大人がDQNだからだよ
日本で言えば、赤ん坊を車に放置してパR台の前に陣取る親みたいなものだ

362 :
>>357
話はそんな簡単じゃないみたいだぞ。
例えばソフトをビルドするときにある関数が期待した振る舞い(フレーバー)で利用可能
かどうか、はシステムライブラリにそれがあるかだけでは決まらない(例えばコンパイラ
のオプション等)ので。

363 :
>>362
configureが検出したものをオプションと一緒に記録しておけばいいんじゃない?
コンパイルオプションで挙動が変わる関数くらい数えられる程度では?
若しくは、そういった特殊な挙動を要求するものだけはDBを使わないようにすればいい
configureごとに全く同じ処理をキャッシュできればそれだけで随分速くなる

364 :
オプションに利用可能性が依存するって、どの規格(c90, c99, ...)を使うかくらい。
その以外で振る舞いや有無が変わる関数なんて使ってられんわ。使う価値ないね。
もしあるなら、そんなクズな関数を捨てれば何人の餓えているアフリカの子供が…

365 :
過度の汎用性を求めて(といっても所詮Unix限定だけど)汚い設定ファイル地獄
便利さも体感できないって、なんだか一昔前のJava + J2SE + メタフレームワーク地獄
みたい
m4とXMLの違いがあるけどね
今更m4なんて弄りたがるのRぐらいでしょ
それはそうと、.laや.pcにフルパス埋め込まれるのは何で?
あれrelocateしにくいから嫌なんだけど
.aや.soにはそんなもん埋め込まれないのに

366 :
>>364
きみがパソコンすてればアフリカの・・・

367 :
さすがに古臭い感じはする。
こんだけ広まっちゃうと今さらどうこうするのは難しいだろうけど。

368 :
>>363 >>364
いや、コンパイラのオプションでかなり変わるっしょ。
そういうので苦労したことない?
簡単に思いつくのでも、マクロ定義でいろんな挙動が変わりうるし、
ヘッダーやライブラリをどういう順序/場所で検索するかが変わったり、
生成するコードやハードウェア依存の機能を使うかが違ったり。
で、コンパイラのオプションはソフト毎に違うし、オプション同士は独立でもないし、
グローバルなconfigのキャッシュをうまく管理するのは自明じゃないと思うのだが。

369 :
>>361
サムエル・ワンジルさんの事件の真相なんか見ると
まったく仰る通りとしか思えない
http://bl og.liv edo or.jp/dom esaka/archives/1337215.html

370 :
>>368
何を心配しているか分からないが、それを調べるためのツールがautoconfだろ?
例えそっちが言うように得られる結果が複雑になっても、それは調べた結果だ
難しく考え過ぎているようだけど、ようは>>353みたいに「CPUの数はいくつ?」という問いとその答えを
キャッシュしておけば速くなるって話で、全く同じオプションで挙動が変わることがないなら、そうした心配はないはずだ

371 :
>>368
規格に関するオプション以外であるなら実例だせば議論が進むぞ。
「ある」だけ連呼すんなよ。
それが人間が管理できる以上の組み合わせならautoconfは意味があるわけだし、
数個なら意味なしという事だ。

372 :
>>370 >>371
話が通じてないならいいよ。

373 :
> いや、コンパイラのオプションでかなり変わるっしょ。
つまり、これの実例は挙げられないという事だね。
> 話が通じてないならいいよ。
捨て台詞がみっとも茄子。

374 :
いい加減にして

375 :
雲丹板って人減ってます?

376 :
>>337
-version-info CURRENT:REVISION:AGE
と指示したら、標準的なUNIX系環境では、
libfoo.so.CURRENT-AGE.AGE.REVISION
となるべきだよね。ところがlibtoolは、FreeBSD,NetBSD,HP-UXなどでは、
libfoo.so.CURRENT.AGE.REVISION
というバージョン番号を振ってしまう。

377 :
>>375
2ch全体が絶滅危惧種

378 :
非同期シグナルセーフなprintf誰か作ってー

379 :
そういえば、memcpyは非同期シグナルセーフじゃ無いんだな

380 :
どなたか教えて頂けたらなと思います。
多分Linuxだけっぽいのですが、TCPでローカルホストにあるポートにconnect()するとして、
自分自身のソケットに接続できることに気づきました。
以下、pythonでですが、
from socket import *
s = socket()
s.bind(('', 5656))
s.connect(('localhost', 5656))
↑connect出来てしまう。netstatでみるとESTABLISHEDが
1つだけあるような状況になります。
明示的にbindしてなくても、たまたま自分自身が開いた
エフェメラルポートにも接続できちゃうみたいです。
感覚的には間違った動作に思えますが、そういう仕様なのでしょうか。

381 :
TCPの接続は<src IP, src port, dst IP, dst port>の四つ組で識別できる。
たまたま1と3、2と4が一緒でも特に支障はない。
プロトコル状態遷移の表の作り方によっては禁止もできるが。

382 :
お前ウソついてない? listenしてないのにconnectできちゃうの?
pythonのsocketは知らんけど、勝手にlistenする?
> from socket import *
> s = socket()
> s.bind(('', 5656))
> s.connect(('localhost', 5656))

383 :
>>382
>>380がどういうことかはよくわかってないけれど、一般論として、
pythonのlisten()はBSD socketモデルのlisten()だから、backlog長の設定です。
TCPプロトコルの状態遷移のLISTEN状態への遷移を行う関数ではありません。
それからTCPの接続を確立するには、accept()しなくてもよくて、
両側からconnect()してもOKです。
どっちもよく間違う人がいるんだけれども。

384 :
>>383
> pythonのlisten()はBSD socketモデルのlisten()だから、backlog長の設定です。
> TCPプロトコルの状態遷移のLISTEN状態への遷移を行う関数ではありません。
意味が分からないなあ。pythonでもCでもlisten()しなくてもconnect受け入れられると言っている?
それともpythonだけ? ↓を実行するとLinuxではリストにされず、FreeBSDではClosedなので、
とてもconnectできるとは思えないんだけど。
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
int s;
struct sockaddr_in sin =
{.sin_port = htons(5599)};
if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0)
perror("socket"), exit(1);
if (bind(s, (struct sockaddr)&sin, sizeof(sin)) < 0)
perror("bind"), exit(1);
system("netstat -an");
}

385 :
カマー本とかスティーブンス本とか、
ソケットプログラミングFAQに詳しく書いてあるから読んでみてねん。

386 :
>>381
>>383
>>385
ありがとうございます、勉強になります。
仕様上はありってところは驚きです。
スティーブンスの詳解TCP/IPとUNIXネットワークプログラミングならありますので、読み直してみます。
試しにバーチャルで2つLinuxマシン用意して、
お互いにconnectしあうようにしたら繋がってしまいました。
SYN_SENTを維持しなきゃダメみたいなんで、
RSTが届かないようにフィルタする必要がありましたけど。
ちなみにpythonじゃなくても同じですよ。
Cで書くとわかりづらいかな?と思ったのでpythonで書きました。
ってことは、LinuxでTCPを使うような時って、
エフェメラルポートを受信ポートに使うのって危険?
予期せず自分自身のソケットに接続してしまうかもしれない。
まあ、どっちかと言うと先にポートが使われてて開けられなかった、とかの方がありそうですけどね。

387 :
確かネットワークプログラミングスレってのがあったと思うけど、それはまあいいとして、
ソケットプログラミングのFAQは必読。すごくいいFAQ。
プログラミング系FAQのベストの一つなのは間違いない。
以下は日本語訳。
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/

388 :
>>383
>それからTCPの接続を確立するには、accept()しなくてもよくて、
>両側からconnect()してもOKです。
だんだん分ってきました。こんな感じですか?
 ・connectすると、SYNを送信して状態"SYN_SENT"
 ・相手から(あるいは自分の)SYNを受信して、状態"SYN_RECV"でACK送信
 ・ACKを受信して、状態"ESTABLISHED"
SYN_RECVなんて完全に忘れてました・・。
でもWindowsやSolaris10(x86)で同じ事は試しても、この通りにいきませんでした。
かならずしもRFCに従う必要がない?
>pythonのlisten()はBSD socketモデルのlisten()だから、backlog長の設定です。
>TCPプロトコルの状態遷移のLISTEN状態への遷移を行う関数ではありません。
こっちはまだよく分りません。
LISTENになるのに別の手段が存在するということでしょうか?

389 :
一応ネットワークプログラミングスレで聞いた方がよさそうだと言っとく
http://toro.2ch.net/test/read.cgi/tech/1293284816/

390 :
>>387
>>389
そうですね。ちょっと調べた後、そっちのスレで質問してみます。
皆さんありがとうございました。

391 :
単純なネタで恐縮ですが、errnoは並列化プログラミングに対して安全なのでしょうか?
主要な並列化手法の実装だけでもかまわないので、ご存知の方はコメントください。
また、チェック対象となるシステムコールやライブラリ関数の直前にいちいちerrno=0を
置くのはいまいちいけていない気がするのですが、もっとかっこいい方法はないですか?

392 :
1 スレッドライブラリが用意されている環境ならば、
 #define errno (* __error())
 のようにスレッド毎の変数になっているので安全。
2 システムコールやライブラリでエラーが発生したときに
 errnoが 更新させる仕様なので、コールする前にerrnoを
 クリアする必要はない。しかしerrnoを比較するとこでエ
 ラー判定をしてはいけない。システムコールならば戻り値
 が負、ライブラリならばその仕様に従いエラー判定を行う。

393 :
>>391
> errno is thread-local; setting it in one thread does not affect its value in any other thread.
うちのLinuxのman errnoから引用。どこかで定められているはずだけど、どの規格か知らない

394 :
>>391
posix threadならTLSになってる
gccなら -pthreadとか

395 :
>>392
>>393
>>394
どうもです
特に、>>392の2は、ああそういうことかとストンと腑に落ちました

396 :
どもです(´・ω・`)

397 :
>>392
>  スレッド毎の変数
スレッドローカルストレージという言い方が正確だと思います。

398 :
>>397
日本語でおk

399 :
>>397
例示したマクロだといわゆるTLSなのか、全く別な方法なのか
わからないので、あのような表記にした。

400 :
おねがいします。
親子関係にないプロセス(PID既知)の生存を確認するための通常の手法はなんですか?

401 :
kill(pid, 0);

402 :
ありがとうございます!

・・・というか、一度はmanに目を通しているから、間違いなく読んでいるはずなのだが・・・
恥をかかないと覚えないということか・・・

403 :
>>402
全部暗記できちゃうほうが異常者ですよ。

404 :
/procという手もある。(OSによっては)

405 :
>>403
全部暗記できるなら、その労力を他に向けるべきだな。
そして簡単に全部暗記する能力があるならば、manなど不要てことで。(ry

406 :
>>405
頭が弱いのか?
そのぐらい覚えられなくてどうする。余裕だろwwww

407 :
>>405
中身はいいけど、目次の暗記は必須だろ

408 :
>>405
「どっかで見たなー」 っていう記憶がもっとも大事なんだよ。

409 :
「もっとも大事」はどうなんだろう?

410 :
教えてください
ftp://ftp.irisa.fr/pub/OpenBSD/src/sbin/init/init.c
のプログラムなんですが、
どうやって/etc/rcを実行するのかがいまいちわかりません。
runcom関数内の
execv(_PATH_BSHELL, argv);
で実行しているのではないかなと思うんですが、
main関数内の、
while ((c = getopt(argc, argv, "sf")) != -1)
switch (c) {
case 's':
requested_transition = single_user;
break;
....
}
でrequested_transitionにsingle_userが代入される。
transition関数を経由して、single_user関数に入る。
までは、何となくわかるんですが、
single_user関数内でforkして、子プロセスで
argv[0] = name;
argv[1] = NULL;
setenv("PATH", _PATH_STDPATH, 1);
execv(shell, argv);
シェルを起動する。
そこからどうやって、runcom関数に入るのかわかりませんでした。
教えて頂けないでしょうか?


411 :
状態名の関数は全部最後に関数を返してるじゃん?
それがカーネルが次に移る状態なのよ。
その状態で、実行すべき処理を記述してある関数を、
状態そのものの代わりにしている。
void
transition(state_t s)
{
for (;;)
s = (state_t) (*s)();
}
だからこれが状態遷移マシンになるわけ。
requested_transitionは引数とか、シグナルとか、
上の関数を使った状態遷移からは逸脱するものを扱うためにある。

412 :
すいません、もう少し質問させてください。
single_user関数内でforkして子プロセスで
argv[0] = name;
argv[1] = NULL;
setenv("PATH", _PATH_STDPATH, 1);
execv(shell, argv);
特に引数なしでシェルを起動していますよね。
んで、親プロセスの
requested_transition = 0;
do {
if ((wpid = waitpid(-1, &status, WUNTRACED)) != -1)
collect_child(wpid);
if (wpid == -1) {
if (errno == EINTR)
continue;
warning("wait for single-user shell failed: %m; restarting");
return (state_func_t) single_user;
}
if (wpid == pid && WIFSTOPPED(status)) {
warning("init: shell stopped, restarting¥n");
kill(pid, SIGCONT);
wpid = -1;
}
} while (wpid != pid && !requested_transition);
で、子プロセスの面倒を見る処理を行っていると思うんですが、この処理抜けないとruncom関数に入れないですよね?
ただ起動させただけの子プロセスのシェルが、
if ((wpid = waitpid(-1, &status, WUNTRACED)) != -1)
    collect_child(wpid);
どうやってこの処理を抜けるんでしょうか?子プロセスのシェルはどこからSIGSTOP受け取るんでしょうか?
それとも、起動させた子プロセスのシェルが/etc/rcを実行するんでしょうか?
その場合、/etc/rcの場所が分からないと思うんですけれど...

413 :
シングルユーザーシェルのプロセスIDがpidで、
do {
} while (wpid != pid && !requested_transition);
で、親プロセス(init)はシングルユーザーシェルの終了を待っている。
(シングルユーザーシェルはインタラクティブシェル)
> 子プロセスのシェルはどこからSIGSTOP受け取るんでしょうか?
親がシェルならsuspendして親シェルに戻るけど、親がシェルじゃないから、
シングルユーザーシェルからkill -STOP $$とかやったら固まるでしょ。
それを避けるためにリスタートする。

414 :
>>412
シングルユーザモードがなにか理解できてる?

415 :
>>413
シングルユーザモードの典型的なセッションは、
1. シングルユーザモード指定して起動
2. シングルユーザモードのシェルが動く。動いているサービスはほぼ皆無。
3. fsckしたり、パスワード変更したり、criticalなファイル直したり。
4. Ctrl-Dでシングルユーザモードのシェル終了。(exitコマンドでも)
5. マルチユーザーモードへ。(最近のUNIXは起動シーケンスが複雑で、再起動したいケースもままある)

416 :
貴重なお時間頂いて、申し訳ないです。
/etc/rcって、マルチユーザーモードで起動するときに読まれますよね。
init.c内では、runcom関数でその処理を行っていますよね。
で、main関数内の
while ((c = getopt(argc, argv, "sf")) != -1)
switch (c) {
を見て、
「initの引数は、sとfでf(FASTBOOT)は機能的に実装されていないようだし、
single_user関数内で、runcom関数に飛ぶのかなぁ」と思ったんですよね。
main->single_user->runcomの流れが勝手に(自動的に)行われるんじゃないかなと推測したんです。
でも、single_user関数を見ても子プロセスでシェルを起動させて、親プロセスは待つだけで、
人間が操作をしないと、次の処理に進むようには思えない。
do {
} while (wpid != pid && !requested_transition);
の処理ですね。
main->single_user(オペレーション終了待ち)->runcomになっているんですよね。
で、runcom関数はどうやって呼ばれるのかなと思ったんです。
質問が悪かったんです。すいません。質問すべきだったのは、
カーネル(bootローダー)からinitが呼ばれるときって、シングルユーザーモードでないときの
オプションは'f'なんですか?
です。

417 :
すいません。
init_main.cを読んでちょっと理解できました。
flagsp = flags;
*flagsp++ = '-';
options = 0;
if (boothowto & RB_SINGLE) {
*flagsp++ = 's';
options = 1;
}
#ifdef notyet
if (boothowto & RB_FASTBOOT) {
*flagsp++ = 'f';
options = 1;
}
#endif
/*
* Move out the flags (arg 1), if necessary.
*/
if (options != 0) {
*flagsp++ = '¥0';
i = flagsp - flags;
#ifdef DEBUG
printf("init: copying out flags `%s' %d¥n", flags, i);
#endif
(void)copyout((caddr_t)flags, (caddr_t)(ucp -= i), i);
arg1 = ucp;
}
つまり、何も指定しない場合は'-'が答えなんですね。

418 :
>つまり、何も指定しない場合は'-'が答えなんですね。
すいません。何も指定しない場合は何もないが正解でした。
suwordなんて関数、初めて見ました。

419 :
たしかに「どっかで見たなー」は大事だけど
そのうち「こんなのがあるはずだ」になって
無いものを探して時間を無駄にすることになる

420 :
man 9 store
man 9 fetch
man 9 copy

421 :
m9(^Д^)プギャー

422 :
>>419
30分探して見つからなかったら、「無い」よ

423 :
あったはずのものが見つからないと気持ち悪くて他の事が出来ない。
多分精神疾患なんだろう。

424 :
あったはずのものが見つからない・・・・
    夢・・・とか

425 :
>>424
呪いが解けてよかったな

426 :
>>424
あるはずの現実を見ようとしていない状態より遥かにマシだ

427 :
存在しないものをプログラミングするとか、
ゴーストを実装するようなもの。

428 :
まさにWizard

429 :
どどど同邸ちゃうわ・・・!

430 :
切迫していなければ
別に回り道したっていいと思うけど
最終的に正しい答えを導き出しているんだし
そのぶん、ソースも読んだだろうし

431 :
>>427
つまり応答しないデーモンプログラムとか、
起動しているはずなのにプロセス一覧にでないとか?
無数にプロセスだけを起動しつづけるアプリとか?

432 :
ゴーストもいればゾンビもいる
UNIX界はほんまホラーやで

433 :
>>431
伺かしか思い浮かばんかった
実装する気ないけど、フレームバッファが使えるOSなら仮想コンソールの背景に立たせることもできるのかな

434 :
仮想コンソールの窓越しにしか見えないスタンドのような存在か

435 :
みなし児もいる悲しい街なのですよ。

436 :
お前ら、非技術的な話題だと食いつき良いな。

437 :
技術的な話題も好物ですよ

438 :
物欲を満足しつつ、ちょっとしたUNIXプログラミングの実験&iPad用アプリの開発を
こなせるマシンを購入検討したいのですが、現行機種で何かオススメはありますか?

439 :
Mac板で相談しなよ。

440 :
いや、UNIXプログラミングができるからこそのMac選択で、
似たようなことを考えた先達がいると思うからこそここでのQです
ぶっちゃけ、Mac板でまともな回答が帰ってくるとは思えないし

441 :
>>440
MacBook Airの一番安いのでスタバでドヤ顔しなさい

442 :
昨年、台湾の雑誌『遠見』が20歳以上の1000人にアンケートしたところ
「一番尊敬する国」「一番移住したい国」などの筆頭に日本が挙げられた
そうだ。
そういえば以前、台湾に旅行をした際に、現地で知り合った人に好意的に受け
入れられ、台湾は「親日」なんだと実感したことがある。
でも、どうして台湾は親日なのだろう。
産能短期大学講師で『日本に恋した台湾人』などの著書で知られる謝 雅梅さん
にお話を伺った。
「やはり歴史背景は大きいですね。日本統治時代(1895〜1945年)、
その目的はどうであれ、日本が台湾のインフラを整備したことは今でも高く
評価されてます。72歳になる私の父は、小学校4年生まで日本の教育を受け
ましたが、不思議と日本人に立ち居振る舞いも似てくるんですね。いわゆる
日本の頑固親父と一緒(笑)」
では、65年生まれの謝さんや若い世代にも親日派が多いのはなぜ?
「私の世代の場合、反日教育も受けましたが、父の世代からいい印象も聞いて
います。日本のテレビ番組や雑誌なども昔からあって、よく見てました。今、
20代くらいの若者には、日本の音楽やファッション、マンガやゲームなどの
サブカルチャーが人気です。彼らの世代になると、もう日本との歴史をよく
知らないんですよ。台湾も、日本のようにアメリカの影響は大きいんですが、
やはり同じアジアの日本文化の方が肌に合う。これは一過性の流行ではなく、
親日感情は昔から繋がっているんです」(同)
http://headlines.yahoo.co.jp/hl?a=20070802-00000002-rec_r-int

443 :
ライブラリーを利用せずにカーネルを直接呼び出すアプリを作りたいんですが
参考にするにはどんな検索ワードで探せばいいでしょうか?

444 :
linux システムコール アセンブラ

445 :
>>443
glibcだとこの辺。
sysdeps/mach/i386/syscall.S
http://sourceware.org/git/?p=glibc.git;a=tree;f=sysdeps/mach/i386;h=8a5e953b538c139ffa7fcd4d848dd0eb356e631b;hb=c0da14cdda1fa552262ce3624156194eef43e973
後はsyscallをキーワードにsysdepsの下を彷徨えば、
返り値やsignal絡みのカーネルインターフェースがどうなってるかとかも分かる。

446 :
この頃から基本的に変わってないので読んでみるのも楽しいかも。
http://www.amazon.co.jp/Lions%E2%80%99-Commentary-UNIX-Ascii-books/dp/4756118445/

447 :
>>445
カーネルによって違うんだからこの情報では不親切では。
それにあえてマイナーなのを紹介しなくても。
>>446
PDP-11とx86が基本的に変わらないというのですね、わかりま... せん。

448 :
strftimeのフォーマットに則ってるかどうかを
格好よく調べる方法ない?

449 :
>>443
システムコールの実装
in Linuxカーネルインターナル

450 :
XLIBに出てくるATOMって何ですか?

451 :
COMのアウトプロセスサーバーみたいに
プロセス間で一つのオブジェクトを共有し、
一方のプロセスからもう一方のプロセスを制御する方法はありますか?
単に値を共有するだけならpipeやmmapを
使えばいいんでしょうが面倒です。

452 :
socketとかsignalで通信するのは駄目なの?

453 :
mmapすら面倒ならマルチスレッドで作るとか

454 :
CPU、GPUを利用(プログラム)するには?
http://togetter.com/li/293863

455 :
>>451
dbus使えば?

456 :
sigactionについての質問です。
古いソースではsigvecを使っていて、ちゃんとそれが動いているんだけど
私が使っているsignal.hヘッダの中にはsigvecが定義されていません。
どうして動くんでしょうか

457 :
obsoleteだから、特に指定しないとcompileは出来ないけど、linkは出来るようになっているんでしょう。

458 :
>>452
>>453
>>455
アウトプロセスサーバーみたいに、直接(擬似的)他プロセスの
メンバー関数呼んで、ポインターやら値を渡すってのは無理そうですね。

459 :
シェアードメモリ?

460 :
分散オブジェクト?

461 :
単にExcelの制御みたいな感じで、プロセスとか接続気にせず操作したいだけです

462 :
こういうのかなぁ
ttp://ja.wikipedia.org/wiki/Open_Network_Computing_Remote_Procedure_Call

463 :
>>462
ローカルプロシージャコールができて、引数からオブジェクトを渡せればいいので
そこまでは求めてないです。

464 :
こんばんは。
DJBのqmailとかdaemontoolsのソースを見てて疑問に思いました。
DJBの str_*** のような文字列に対する関数って
for(;;)の中で1文字ごとの処理を連続4回書いてあるのですが、
これって何かメリットがあるのでしょうか?
この人の書くことだから、何か意味はありそうに思えるのだけども。
/* 例えばDJBのstr_len.c */
unsigned int str_len(const char *s) {
 const char *t;
 t = s;
 for (;;) {
  if (!*t) return t - s; ++t;
  if (!*t) return t - s; ++t;
  if (!*t) return t - s; ++t;
  if (!*t) return t - s; ++t;
 }
}
↓↓↓これでいいように思える↓↓↓
unsigned int str_len(const char *s) {
 const char *t;
 t = s;
 for (;;) {
  if (!*t) return t - s; ++t;
 }
}

465 :
つ loop unrolling

466 :
>>465
loop unrollingっての知らなかったです。
ひとつ賢くなりました!
Wikipedia: “毎回の繰り返しごとに発生する「ループの終了」条件のテストを
減少させる(もしくはなくす)事によって、実行速度を向上させる”
・・ですね。
でも、「ループの終了」条件のテストをforにいれず、
結局1行ごとに4行毎回判定してるので、なんとなく関係ないような気が・・
あと一応、測定してみましたが、4行に分けるより、
1行にまとめたほうがわずかばかり速そうです。
※VMware上 Linux x86_64 gcc4.4.6 -O3 で、100000000回ループを30回測定
(なんでそういう結果が出たかは調べていません)
それとも、やっぱり状況によっては 4行書いたほうが最適化とかかかって
速くなったりするものなのでしょうか。

467 :
ていうか、djbのスタイルを参考にするのはやめれ。
根性で標準ライブラリを使わん、とか、癖があり過ぎる。

468 :
>>466
速度に関する最適化は、普通にコーディングした後に、どうしても速度的な要件を満たせてないときに
限って、ボトルネックがどこか「実際に測定して場所を特定」してから行うもの。
数nsレベルの調整なんかしなくていい。

469 :
もちろんスタイルをまねする気も、速度を気にしてるわけではないですよ。
普通の人から見たら、ただの縛りプレイにしかみえないですし。
ただ、偏執狂なんていわれるほどの人だから、
この意味無いように見えるコードも何かあるのかな、と。
daemontoolsはよく使いますので、
コードも見てみようと思ったのが発端です。

470 :
本当に意味わかんないなこれ。
4bytes コピーして最適化したつもりが気が変わって無理矢理戻したとか、いや違うな。
素直に strlen() 使った方が最適化してくれていいのになあ。

471 :
どうせ最適化がかかるだろうし無駄な書き方ならライセンスで面倒なことが起きないとか?

472 :
>>466
>でも、「ループの終了」条件のテストをforにいれず、
>結局1行ごとに4行毎回判定してるので、なんとなく関係ないような気が・・
そう思う。さらにループ内でtの値が変化するから並列化も期待できないし。
ちなみに>>445の人を真似して(syscallでとんでもないものを紹介してたのはアレだが)
glibcのstrlenを見ると、
http://sourceware.org/git/?p=glibc.git;a=blob_plain;f=string/strlen.c;hb=c0da14cdda1fa552262ce3624156194eef43e973
まずlong intのサイズ毎にビット演算して0バイトがないか調べて(ちょっとトリッキー)、
もしあったら詳細に調べるみたいな感じのことをしてる。
インテルならXMMレジスタ(16バイト)を使うとさらに効果的。https://gist.github.com/77178

473 :
いずれにしろ、その部分が、全体の90%の時間を食ってる、10%のコードだ、
ということがわかってからでいいことだな。

474 :
結局なにがしたいんだか分からないなー。
>>472
>まずlong intのサイズ毎にビット演算して0バイトがないか調べて(ちょっとトリッキー)、
>もしあったら詳細に調べるみたいな感じのことをしてる。
>インテルならXMMレジスタ(16バイト)を使うとさらに効果的。https://gist.github.com/77178
glibcのstrlen、すごいことしてるんですね。
特にビット演算のマジックナンバーが全然意味分かりませんでしたが、
説明をググったら解説があって、なんとなく分かったような気にはなりました。
なんすか、よく思いつくなと。
もう一個のアセンブラのほうは、
ニーモニックが全然分かってないので辛くて読んでませんが、
とにかく、案外、工夫のしがいがあるものなんですね。

475 :
非分岐時のみ投機実行のあるRISC系のCPUなら4行展開して意味ありそう。
けどCPUのアーキテクチャにベタベタに依存するコードだし、
遅延スロット埋める投機実行はもっと高度になってるから活躍の場は殆ど無いだろうね。

476 :
シェルスクリプトの質問なんですが、
いちいち別のサーバにログインしたりするのがめんどいので、
一つのシェルスクリプトで、
ローカルマシンとリモートマシンの実行結果を
マージしたりする仕組みって無いんですかね?
#!/bin/sh
num1=$HOME
num2=@$HOME<-例えば@の後ろに何か処理を書くとその処理は設定されたリモートで実行される
echo $num1<-ローカルの$HOME
echo $num2<-リモートの$HOME

477 :
man rsh
man ssh

478 :
Linuxで、ライブラリとかにデバッグ用のシンボルが付いてるかどうかって
どうやったら調べられましたっけ。

479 :
fileコマンドでstrippedと出るか出ないか、かな?

480 :
nm -a

481 :
ncursesのC++実装について分かる方教えてください

482 :
自己解決しました

483 :
マルチバイト文字を出力する方法がわかったのですが、
複雑なので他の方の参考になるように
ここに書いておきます
/* cc -o test test.c -lcursesw */
#define _XOPEN_SOURCE_EXTENDED
#include <curses.h>
#include <wchar.h>
#include <locale.h>
int main() {
cchar_t ch;
wchar_t wc[2] = L"あ";
setlocale(LC_ALL, "");
initscr();
setcchar(&ch, wc, 0, 0, NULL);
add_wch(&ch);
getch();
endwin();
return 0;
}

484 :
>>466
アセンブラに直せばわかるのに

485 :
>>483
これじゃ駄目なの?
$ cat test.c
#include <stdio.h>
int main() {
puts("あ");
return 0;
}
$ gcc -o test test.c
$ ./test


486 :
>>485
cursesでマルチバイト文字をどう扱うかって話だよ

487 :
素直にncurcesw使えばいいんでないかと思う

488 :
>>484
UNIX界隈にもアセンブリをアセンブラ呼ばわりする人が居るんだな

489 :
アセンブリ言語

490 :
教えてください
静的ライブラリと、LD_PRELOADで指定された共有ライブラリでは、
静的ライブラリのほうが必ず先にロードされる、で正しいでしょうか?

491 :
静的ライブラリは、実行形式ファイルの生成時にロードされ、リンクされる。
共有ライブラリは、実行形式ファイルの実行時にロードされ、リンクされる。
ということで、タイミングとしては静的ライブラリの方が時間的に早いので
その意味では正しいと思われます。

492 :
LD_PRELOADで指定されてる方がタイミング的には先だな

493 :
>>492
間違いです。

494 :
くだらないこと気にしてないで重複しない命名規則をだな、

495 :
デバッグ時に使いたいって話だよ

496 :
>>494
経験浅い人は黙ってて

497 :
pidの分からない複数の子プロセスにシグナルを送る方法はありますか?

498 :
>>497
kill()関数でpidにゼロや負数を入れるといいらしい

499 :
>>498
ありがとう,解決できました

500 :
http://www.cs.miyazaki-u.ac.jp/~date/lectures/image_process2012/labeling201209gp40_uc.c

画像処理ラベリングのプログラミングなんですがこの穴あきをおしえてください
ここで間はなにをするとこなのかおしえてくださいorz

501 :
このプログラムを書いた人に訊きなさい

502 :
馬鹿には聞いてません

503 :
>>501
すみません、現在その人と連絡がとれなくて、困っています

504 :
>>500 文字化けしてますかね??
for (y=0; y<h; y++){
for (x=0; x<w; x++){
i = y*w +x;

k = init[i];
while ( identical[k] != 0 ){

ここの間
identical[k] = 0; // ダミー
}
final[i] = k;
printf("%3d", final[i]);
}
printf("\n");
}
のとこです

505 :
豚切りすいません。
超初心者です....
touchでファイル作ろうとしたらpermission denied ってなるんで
chmodでパーミッション変更しようとしてもどうやら元々の奴の権利を変えるだけのモノ?
みたいで、作成できるように権限を変えたいのですが、
どなたか教えてもらえるとありがだいです。

506 :
ディレクトリにchmod
あと.hogercの確認

507 :
馬鹿には無理

508 :
505です。
レスありがとうございます。
あれから chmod 777を打ったんですが
Unable to change file mode on
と出てきてしまいました。

509 :
何度もすいません。
ごめんなさいm(_ _)m
ディレクトリの権限がrootだったのでユーザーから作るのはやめて、
rootでファイルを作りました。
そのファイルというのは~.phpでして、それでhttp://localhost/~.phpをクリックしても
白紙でした。
どうすればPHPの情報が表示されるようになるのでしょうか⁇

510 :
プログラミング以前に、操作がままならないんだから、
UNIX板orLinux板の初心者スレに行け。

511 :
オープンソースなLinuxって何でもかんでも無料で大丈夫なんだろうか

512 :
だからGNUやFSFが共産主義的思想に基いているという噂が広まるんだよ

513 :
板違いってことさえわからない頭で考えても無駄。

514 :
>512
それは噂じゃなくて事実www

515 :
ディレクトリストリームに関する質問です。
open関数にディレクトリのパスを入れると、ディレクトリストリームという
ものがオープンされると参考書に書かれています。
これは、open関数が"ハードディスク上"のディレクトリの中身の
ディレクトリやファイルの情報を"メモリ上"のstruct dirent構造体に
マップしていっていると考えていいのでしょうか?
あとreaddir関数に関する質問なのですが、この関数の引数のstruct dirent
型のポインタはreaddir関数で+1してから、このポインタに上書き(?)されて
ますか?それとも初めに引き渡されたポインタを保持してますか?
まだ勉強中なので的確な言葉選びができてなくて回りくどい言い回しに
なってそうですが教えてください。

516 :
>>515
openシステムコールなら
http://kazmax.zpp.jp/cmd/o/open.2.html

517 :
>>516
すみません間違えました。
open関数じゃなくてopendir関数でした。。。
この辺の認識が正しいかどうかはヘッダファイル見ていけば
わかるんですかね?
ヘッダファイルなんて現時点のスキルで読み始めたら時間かかって
しょうがねえだろうなあと思ってるんですが。

518 :
>>515
"opendir source code"でググって、ソース読め

519 :
>>517
システムコールの本を調べたら

520 :
>>518,519
キーワードあざっーす!
この辺に入っていかないとダメなんですね。
ずぶずぶやないかぁ・・・

521 :
勉強中なら、ストリームという概念がわかったところで次に行った方が良いんじゃないかと思うけど
まぁ人それぞれだよね。

522 :
scp 転送元ディレクトリ/*.* ./test
を実行したときカレントにtestというディレクトリが無いと
testというファイル名でファイルができてしまいます。
testディレクトリがなかったらエラーになるようにしたいのですが
どうしたらいいでしょうか?

523 :
>>522
そういうプログラムをつくればおk

524 :
scp 転送元ディレクトリ/*.* ./test/

525 :
>>524
おお、できました。そういうのがしたかったです。
ありがとうございました。

526 :
openした際にメモリ上にマップされるFILE構造体のメンバに
ファイルディスクリプタがあると思うのですが、
同じファイルをopenするプロセスが複数あるとき、
それぞれのプロセス内のFILE構造体のメンバである
ファイルディスクリプタは異なる値で、実データへのポインタ
(inodeと対になっているメタデータ)は共有という理解で合ってますか?

527 :
ファイルディスクリプタは、プロセスごとに定義されているので、
偶然同じ値であることがあります。
stdin, stdout, stderr以外にファイルはオープンしてない場合、
次にfopenしたファイルのファイルディスクリプタは3です。
要するにファイルディスクリプタは全プロセスにまたがった固有のIDと見做せません。

528 :
>>527
ありがとうございます。
ようやくマルチタスクなる物が何なのかわかってきました。

529 :
>>528
君のレベルが分かりました

530 :
プログラムを走らせると、topで見るとsystem CPUの値が異常に高いのですが、
systemってどんなことをした場合に消費されるのでしょうか?

531 :
ソウルからヨボセヨ 「ハングル輸出」は虚報 2012.10.20 03:01 [韓国]

 韓国独自の文字であるハングルは民族的自慢のタネで、10月9日が「ハングルの日」として以前は祭日だった。
 しかし祭日が多すぎると休日からははずされたため、復活を望む声が強い。
 来年には復活の可能性があるとかで、カレンダー業者が気をもんでいる。
 そのハングルをめぐってまずい話が起き問題になっている。
 先年、インドネシアの小さな島の部族がハングルを自分たちの「公式文字」に採択したというニュースがあり
「ハングルの優秀性を世界に示した」として官民挙げて大喜びした。
 教科書でも紹介されるまでになったのだが、最近、この話はマスコミが誇張したもので「公式文字採択」は虚報と分かった。
 政府も教科書や各種展示を手直しすることになったという。
 この少数部族というのはスラウェシ島に近いブトン島のチアチア族といい人口は6、7万人とか。
 固有の部族語を話しているが、韓国の団体が援助を餌にその部族語の表記にハングルを使うことを勧めた。
 その結果「公式文字に採択」となったというのだがインドネシアはローマ字が公用文字。地方の部族が別の文字を
公式文字に採択するのはありえない。
 実際は単にハングルを学んでいるといった程度だったのだ。ハングル愛国主義の勇み足である。(黒田勝弘)
http://sankei.jp.msn.com/world/news/121020/kor12102003020000-n1.htm

532 :
>>530
システムモードのCPU使用率が高いということは、つまりカーネルで動作していた時間が
多かったことを意味する。
例えば、ファイルのopen, closeを繰り返してファイルシステムやデバイスドライバばかり
動しているとか

533 :
>>532
>例えば、ファイルのopen, closeを繰り返してファイルシステムやデバイスドライバばかり
>動しているとか
この理由付けはどうなんだ

534 :
>>530
メモリ足んなくて、メモリスワップしてるような状況でもsystemが上がりがちですかね。

535 :2012/11/01
>>530
状況も説明せんと分かるわけがない
TOP カテ一覧 スレ一覧 2ch元 削除依頼
【Intel】OpenCV総合スレ 4画素目【画像処理】 (323)
データ構造とアルゴリズム総合 (550)
【QBASIC互換!?】FreeBasic【GPL】 (512)
C#終了のお知らせ (942)
Ruby 初心者スレッド Part 50 (489)
サウンドプログラミング5 (666)
--log9.info------------------
Suicaのペンギン 7羽目 (342)
ICOCAスレッド 37枚目 (790)
満員電車でのお楽しみ♪女子高生一人目 (401)
女性車掌スレpart40(Kについて語るスレ) (372)
【蝿は】顕正会鉄ヲタ勧誘祭10人目【迷惑者】 (829)
ナンパ鉄オタを語るスレ 千葉県 (907)
わずかしかない行き先を語れ (566)
アスペルガー症候群と鉄道オタク趣味 2 (287)
今まさにどこで乗り鉄してますか?211日目 (691)
【速報】キセル初級者スレ24【単細胞】 (783)
鉄道ファンを馬鹿にする木村裕子に渇! (712)
駅弁 うまい駅弁 (゚д゚)ウマーい駅弁【38食め】 (245)
【現地へGo!】復活蒸気機関車の情報交換しよう 66 (243)
IDでオーバーランするスレ 50m (556)
【レポ】関西のフリー切符【沿線の店】 (917)
何で撮り鉄は他人に迷惑をかけるの? (390)
--log55.com------------------
【埼玉】川口蕨戸田-埼玉県南part45
【東三河】豊橋周辺のラーメン屋15軒目
厚木周辺パート40
東都 葛飾区のラーメン Part17
【社会的に】麺屋鳳part7【抹Rる】
ラーメン二郎西台駅前店35ベッカム
【松戸】中華蕎麦 とみ田3
ラーメン二郎 松戸駅前店 23