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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2デフォルトの名無しさん:2001/06/09(土) 12:44
readlineについて教えてください。>1
3名無しさん:2001/06/09(土) 12:47
>>2
GNU libreadlineはLGPLじゃなくてGPLなんで注意してね
4デフォルトの名無しさん:2001/06/09(土) 13:06
がーん。
5デフォルトの名無しさん:2001/06/10(日) 05:19
UNIX板があるけどいいよね?
6デフォルトの名無しさん:2001/06/10(日) 05:24
あっちは最近荒れてきてるんでOKだと思いますけど・・・
7デフォルトの名無しさん:2001/06/10(日) 12:58
プロセス間でデータ(数Kbyte)を共有するのに、
mmap()使うのと共有メモリ使うのと、どちらが
オーバーヘッドが少ないでしょうか?
ちなみに、アクション系のゲームに使おうと
してます。
8ウニしろうと:2001/06/10(日) 14:51
おいらも知りたい〜。

sync()しなけりゃ変わんないんじゃないの?
更新作業の排他制御はどっちが面倒くさいんでしょうか?

>>7
ゲームって知らんのだけど、UNIXでアクションゲームで、
しかもマルチプロセスなの?
9デフォルトの名無しさん:2001/06/10(日) 14:58
test
10デフォルトの名無しさん:2001/06/10(日) 15:17
>>7
アクションゲームにそんなもの使わない
11デフォルトの名無しさん:2001/06/10(日) 15:59
>>10
SDLはマルチスレッドだね。
マルチスレッドはよくてマルチプロセスはいけないの?
おせーて。
12デフォルトの名無しさん:2001/06/10(日) 16:06
>>11
いけないことはない。好きなようにやればいい。
ただスレッドよりプロセスのほうが生成に時間がかかるからってだけの話だろ。
13デフォルトの名無しさん:2001/06/10(日) 16:16
>>12
なるほど。でも生成だけなら最初だけだよね。
教えてくれてありがとーー
14デフォルトの名無しさん:2001/06/10(日) 16:41
オペレーティングシステムスレッドってなんですか?
15デフォルトの名無しさん:2001/06/10(日) 17:16
>>7
オーバーヘッドという意味じゃ最速はやっぱり共有メモリじゃなくて?
そうでなきゃあんな面倒なもの存在価値ない。

CGIの問題じゃないが古典unix的マルチプロセス連携技術は
古臭い技術だと思う。たいして楽でもないくせに融通もきかんから。
処理でいえばマルチスレッド、データ(Object)でいえばKParts(笑)やGNOME、
って感じか?これからは。

>>13
>最初だけ
でもお喋りするのにも手間またはオーバーヘッドがかかるぞ?
マルチスレッドに比べて嬉しくない事柄は多いと思われ。
マルチプロセスのメリットはOS提供のメモリ保護機能を直接
使えることであって、逆にいえばそれ以外なんか旨味あるか?って感じ。

悪意ある使われカタ(ネット関係のバッファオーバーランとか)の問題を除けば
Cみてーな糞言語を使う比率とマルチプロセス必要率とは比例すると思う。
今時の良い言語ならメモリの誤った使い方を回避しやすいからな。

>>14
スレッド…プログラマ(プログラミング言語)から見てスレッドだと思えるもの…を
実現する手段には、色々あろう。
rubyみたいにインタプリタの中に持つ奴も「スレッド」であるには違いない。
それらの手段のうち、OSが直接APIとして提供するのが、きみの言うソレだ。
16名無し関数のλさん:2001/06/10(日) 18:59
>>15
微妙に嘘が混じってるな……。

System V IPC の共有メモリの扱いが面倒で mmap() が簡単なのは、
mmap() は仮想記憶システムと密接に連携してるから。性能に関しては
mmap() の方が良い。移植性が重要な場合を除けば、今なら共有メモリ
は過去の遺物と捨てて構わないと思う。

プロセス分割のメリットは少なくとももう一つ、ユーザ権限の分割という
のがある。UNIX ではユーザを証明する credential (BSD 系だと ucred,
SVR4 だと cred 構造体) は、あくまでプロセス単位で割り当てるので、
スレッドだと OS の提供するセキュリティ保護システムが使えない。

とはいえ、ゲーム程度ならメイン部分はいわゆる擬似タスク、非同期に
実行させたい部分だけスレッドで十分でしょ。

mmap() でデータを共有すると、プロセス間での排他制御とか(これは
スレッド間の同期に比べるとコスト高い)、プロセス切り替えとか(これも
かなりコストが高い、特に x86 系の CPU だと TLB をフラッシュするし)、
デバッグが難しくなるとか、プロセスを分けるデメリットの方が大きい。

>>14
カーネルスレッドのことかな? それだとカーネル内部での実行の単位、
言い換えるとカーネルが実行をスケジューリングする entity。

UNIX では全てのユーザプロセスは、ユーザモードとカーネルモードとい
う二つの顔を持っている。カーネルモードで実行されるとき(システムコー
ル実行中とか)には、ユーザモードとは異なるコンテクストを持つのだけ
ど、この実行単位をカーネルスレッドと呼称する。

ユーザプロセスとカーネルスレッドの関係は、古典的には

 ユーザプロセス1に対し、カーネルスレッド1

最近のマルチスレッドプログラミング環境だと話が違ってくるが、その
あたりは話が長くなるから自分で調べてくれ。

ちなみに、カーネルモードでしか実行されないプロセス(システムプロ
セス)もあるから

 カーネルスレッド1に対し、ユーザプロセス1

ではないので注意な。代表的なところだとスケジューラ (sched) がシス
テムプロセス。最近だと、割り込み処理も、スレッドで処理するシステム
も増えてるね。
17デフォルトの名無しさん:2001/06/10(日) 19:07
無駄なプロセスの生成というと、
http://www.bio100.co.jp/cgi-bin2/net/flashviw.cgi?mode=set&no=643
こんな奴もいる。
187:2001/06/10(日) 23:11
>>15-16
勉強になるです。
マルチスレッドの方がスマートなのは判ってるんですが、
手もとにてきとーなサンプルと参考書がないんで...
ちょっと本気で勉強することを考えます。

あと、Linuxで実装するんで、それほどスレッド/プロセスの
コストの差はないのかな、と。

いまのところ、コントロール部、描画部(入力も?)、サウンド部に
わけよーかと思ってます。

で、
> デバッグが難しくなるとか、
そーゆーものですか?プロセスを分けた方が、単体でデバッグ
できて楽そーだなーというのが目的の一つなんですが...

>>17
うーん、なにを言わんとしてるのかよく判らない...
「車輪を再利用するのはかまわんが、戦車のキャタピラを
バイクにつけるのはヤメトケ」ということ?
読み違いしてそうだな<俺
19名無し関数のλさん :2001/06/10(日) 23:24
>>18
> いまのところ、コントロール部、描画部(入力も?)、サウンド部に
> わけよーかと思ってます。

それ、スレッドやプロセスを分割する利点が全くないと思う……。
20デフォルトの名無しさん:2001/06/11(月) 00:19
擬似タスク
21デフォルトの名無しさん:2001/06/11(月) 00:39
X上のアクションゲームなら、プロセス切替えも共有メモリのオーバーヘッドも誤差の範囲な気がします。
もっと違うところが、パフォーマンスに効いてきます。
今ならハードウェアの進歩で、X上のアクションゲームもそれなりに作ってもそれなりの速度で動きます(もちろん、モノによりますが)。
22デフォルトの名無しさん:2001/06/11(月) 01:10
>>19
そかな?音をMIXするのに、分けた方が楽そうだと
思ったんだけど...ま、いいや
23デフォルトの名無しさん:2001/06/11(月) 01:22
>>21
そういうモンなのですか。
先ずは作ってみて、ダメだったら考えるとします。
ありがトーサンでした
24デフォルトの名無しさん:2001/06/11(月) 07:13
軌道修正感謝>>16

>>18
>あと、Linuxで実装するんで、それほどスレッド/プロセスの
>コストの差はないのかな、と。

んなこたぁあるまいよ?unix系(当然Linux含む)には一般的に言える話だべ。

>>22
おーい。機能単位の分割と、プロセスとかスレッドとかの実行単位の分割とは
全然別の視点で考えるべきものだぞー
機能分割をしたいなら動的ライブラリでも使うべきだろうよ。
プロセスじゃなくてソースやバイナリを分割すべきもの。

なんのために音声「ライブラリ」とかが存在すると思ってるんだ?
(望むならば)メインプログラムにだってリンク出来るようにするため、だろ?
そうでないなら誰もが音声「プログラム」しか作らないはずだ。
25デフォルトの名無しさん:2001/06/11(月) 08:08
>>22
悪いコト言わないから、いわゆる「擬似タスク」について調べてみなよ。
大抵のゲームで、複数のキャラクタや音声などを並行して動かすため
に使っているテクニックだから。

UNIX 流のマルチスレッド(非同期、プリエンプティブ、実行順序を制御
できない)は、ゲームでは思考ルーチンなどの例外的な処理でしか使
わない。
26デフォルトの名無しさん:2001/06/11(月) 09:04
>>25
http://giggle.cside6.com/hotate/shoot/menu.htmasas
ここっすね。さんきう。

>>24
うーん、わかるんですが、「機能の分割」と「プロセス分割」が
一緒のほうがタコな私にはわかりやすいので...
(いや、だからこそ意識したほうがいいのかな?)
でも、なんとなく書けそうなんで、始めてみるっす。
27デフォルトの名無しさん:2001/06/11(月) 09:30
まだ懲りずに使ってるよ、「擬似タスク」って言葉。
散々突っ込まれただろうに、何が調べてみなよなんだか。

>ここっすね。さんきう。
というか、そこしか出てこないので注意ね。
28デフォルトの名無しさん:2001/06/11(月) 09:53
>おーい。機能単位の分割と、プロセスとかスレッドとかの実行単位の分割とは
>全然別の視点で考えるべきものだぞー
>機能分割をしたいなら動的ライブラリでも使うべきだろうよ。
>プロセスじゃなくてソースやバイナリを分割すべきもの。

ゲームのことはよく知らないけど 動的ライブラリこそ機能分割にあんまし関係ないと思う。
アプ組み上げる段階での話。

機能ごとにスレッドで分割するのは実際よくあることじゃん?JavaはUI専用にスレ立てるよね(AWTEventスレね)。
でもゲームじゃないけどグラフィックス系のアプ書いたときはスレ避けてたな。最初は楽なんだけどsched上手くやらないと動き鈍くなった。
関数系言語やJavaのGCと同じ問題。
29デフォルトの名無しさん:2001/06/11(月) 11:41
少なくともマルチスレッドにする意味はあるが、
マルチプロセスにする意味はない。
30デフォルトの名無しさん:2001/06/11(月) 12:48
>>27
もちろん、そこのページが引っかかるように単語を選択した
んだよ。

ところで、私は突っ込まれた覚えがないんだが、どこかで擬
似タスクって単語を使って叩かれてたヤツいたの?
31デフォルトの名無しさん:2001/06/11(月) 13:06
特にLinuxの場合、プロセス隔てると同期を取る手段がIPCの
セマフォしかなくなるから、リアルタイム性を重視する用途
には向いていないと思う。遅いし、死ぬと漏れるし・・・(T_T
32デフォルトの名無しさん:2001/06/11(月) 15:38
コンソールでどのキーが押されたかを拾いたいのですが、方法がわかりません。
こう書いてもわかりにくいと思うのですが、NEC PC98のキーボードBIOS操作のように、
純粋にどのキーが押されたかをビットで拾いたいのですが、良い方法はありますか?
33デフォルトの名無しさん:2001/06/11(月) 15:44
>>32
PCのキーボードはどのキーでも複数押しが出来るって訳じゃないのよ
使い道によっては、そもそも諦めるしかないと思われ
34デフォルトの名無しさん:2001/06/11(月) 15:50
以前、「擬似タスク」って俺用語をしつこく使いつづける人間が居たんだよ。
みんなにいくら叩かれても俺用語だと認めなかったという。

ちなみに俺用語ってのはそいつしか使ってない用語って意味ね。
これも俺用語だったらスマソ(藁
35デフォルトの名無しさん:2001/06/11(月) 15:58
で、擬似タスクってなによ?
擬似マルチタスクかな? これも正式な用語かどうか知らないけど。
36デフォルトの名無しさん:2001/06/11(月) 15:59
「擬似タスク」って使うと、34みたいな粘着が出てしつこいから注意しましょうということです。
37デフォルトの名無しさん:2001/06/11(月) 16:04
 ┌─────────┐
 │                  |
 │ スーパーキチガイ警報 ! |
 │                  |
 └―――──――――┘
   ヽ(´ー`)ノ ヽ(´ー`)ノ
     へ  )   へ  )
      >      >
3832:2001/06/11(月) 17:17
ゲームユースではないです。
特定の処理の中断キーとして決められたキーひとつが押されたかを
拾いたいんです。
ワンキーでも難しいですか?
3932:2001/06/11(月) 17:19

>>33へのレスです。また、ビットでなくてもいいです。
処理ループが止まらなければOKっす。
40デフォルトの名無しさん:2001/06/11(月) 23:08
>>34
叩かれたというか、キミが叩いてたのでは? 確かに「擬似タスク」というのは
だいぶ胡散臭い単語なんで、これに代わる適当な単語があれば提示を希望
したい。

>>35
要はスレッド(もしくはタスク)なんだけど、UNIX や Win32 が OS の助けを
借りて提供するようなスレッドとは違って

- 同期的
- ノンプリエンプティブ
- スケジューリングをユーザが指定

という特徴をもつもの。協調的マルチタスクとでも呼ぶといいのかな?

タスクマネージャから、各タスクを定期的に呼び出し、各タスクは、制御を受け
取ったら短時間だけ処理をして、すぐに呼び出し側に制御を返すように書いて
おくことで、処理を進める。

詳しくは >>26 のリンク先にあるコードを読んでくれ。大して難しい話じゃない
ので、読めば分かる。

UNIX と関係ないんで sage ね。
41デフォルトの名無しさん:2001/06/11(月) 23:18
>>32
cursesつかってcbreak()すれば、きっと幸せを手にいれられるよ
(getch()みたいなモンが使える)
もっと生なのがほしけりゃ、raw()すればいいけど、
お腹壊してcoreゲロはくと大変なことになるから、
shell scriptでwrapしてnoraw()するプログラムを後ろで
うごかしてやるといいかもね。
42デフォルトの名無しさん:2001/06/11(月) 23:22
stdinをrawモードにしてselectで待つとか>>32
43デフォルトの名無しさん:2001/06/11(月) 23:28
>>40
たぶん似たもの(もっと高機能だけど)を、Rubyじゃすなおに
「スレッド」っていってるね
44デフォルトの名無しさん:2001/06/12(火) 01:31
>>43
確かに「スレッド」なんだが、そう書くと UNIX や Win32 の OS が提供する
ようなプリエンプティブなスレッドと区別できないんだよね。ゲームプログラ
ム書こうという人間に「スレッド使え」と書いたら誤解を招くだけなんで、別
の用語が欲しいトコロ。
45デフォルトの名無しさん:2001/06/12(火) 02:07
ユーザレベルスレッド
46デフォルトの名無しさん:2001/06/12(火) 09:48
>>46
ええとええと。
それの対義語は「カーネルレベルスレッド」で良いんでしたっけ?

…なんか違うな。カーネル内部処理の話になってしまいそうだ
47デフォルトの名無しさん:2001/06/12(火) 10:36
グリーンスレッド <=> ネイティブスレッド (W
48デフォルトの名無しさん:2001/07/04(水) 10:57
putenv()の使い方で質問させて下さい

#include <stdlib.h>
int main(){
putenv("AAA=BBB");
return 0;
}

上記のコードをビルド、実行してもenvで環境変数AAAが設定されません。
putenvの後にgetenv("AAA")を入れて動作を確かめると文字列"BBB"が
返ってくるのは確認したので書式は間違ってないと思うのですが…
どうやればenvコマンドで確認出来るようになるのでしょうか。
御存知の方は教えて下さい。宜しくお願い致します。

環境はSolaris7+gcc2.8.1
実行環境(shell)は/bin/shです。
49デフォルトの名無しさん:2001/07/04(水) 11:19
>>48
そこで追加してるのはプログラムが実行されてる間
だけのローカルな環境です。プログラムが終わると
環境は元のに戻ります。
50デフォルトの名無しさん:2001/07/04(水) 11:31
親のShellの環境を変えるのって出来ないんでしたっけ?
5148:2001/07/04(水) 11:51
48です。
そうでしたか…getenvはshellの環境変数を取得出来たので逆にputenv()
で設定出来るのかと思ったのですが考え方が甘かったようです。

shellスクリプトを書くときに併用して使用し、特定の環境変数を
動的に変えていくツールを作りたかったのですが…諦めるしかないですね。
回答有難うございました。
52名無しさん:2001/07/04(水) 11:58
$ (export VALUE=hoge;application)
$ (export VALUE=hage;application)
53デフォルトの名無しさん:2001/07/04(水) 13:33
>>51
getenvはshellの環境変数を取得しているわけではなく、
execve時にコピーされた環境変数を取得してるだけです。
54デフォルトの名無しさん:2001/07/04(水) 13:36
>>51
そうそう。UNIXの困った点がそこ。
なんでもかんでも親子関係がちがち。
親から子へ一方的に命じることしかできない。
双方向対話しようと思ったらとたんに煩雑になる。
55デフォルトの名無しさん:2001/07/04(水) 13:39
UNIXってMFCとか使えるんでしょうか?
56デフォルトの名無しさん:2001/07/04(水) 13:49
>>54
親が子の面倒を全部見る仕組みにすればいいじゃん
57デフォルトの名無しさん:2001/07/04(水) 14:26
>>55 *BSD とかはしょっちゅうやってるぞ、MFC。
58デフォルトの名無しさん:2001/07/04(水) 15:09
>>56
面倒見てるからこそ駄目なんだよ現状は。
親から自立することもできなければ
親に意見することもできない。

あるプロセスを別のあるプロセスの子に「(後から)する」
ということって、出来ねーよなあunix?
59デフォルトの名無しさん:2001/07/04(水) 15:21
少なくともinitの子供にすることは出来る。
それ以外はしりません。
60名無し讃:2001/07/04(水) 15:40
56に便乗。
suのソース読んだ人いない?
あれどうやってんだろう。
61デフォルトの名無しさん:2001/07/04(水) 16:11
>>60
setuidされてるだけじゃないの?違う?
今手元にUNIXマシンないから調べられない(^^;
62デフォルトの名無しさん:2001/07/04(水) 16:19
>>58
する意味がない。
63????]:2001/07/04(水) 16:37
>>61
setuid/seteuidはパスワードを引数に持たないよ。
6461:2001/07/04(水) 17:28
>>63
システムコールじゃなくて、chmod u+sしてあるって意味
実効uidがrootになるから、setuid(2)とかで自由に変えられる
65ありがとう:2001/07/04(水) 18:14
すると認証はsuが別口でやってるんですね。
66デフォルトの名無しさん:2001/07/04(水) 23:31
>>62
というか、プロセスを親子関係で管理しようっていう発想が
そもそも意味が無い。
67デフォルトの名無しさん:2001/07/05(木) 00:01
UNIXのプロセス管理が親子関係になってる理由は多分fork()にあると思う。
68デフォルトの名無しさん:2001/07/05(木) 02:16
>>67
そそ。
親子関係の「理由」がforkなのな。
本末転倒してるんだよ。
何事もforkに縛られている。しょせん1つのAPIに過ぎないforkに。
69デフォルトの名無しさん:2001/07/05(木) 05:16
そんなに無意味ならWin2kでJob Objectが追加されたのはどうしてですか
70デフォルトの名無しさん:2001/07/05(木) 09:17
>>69
unixの軍門に下ったんだろ。

方法論としてunix流儀しか有り得ないってことは
絶対にないはずだが、他の方法論で安定に動かせるものを
今のところ作れてない(少なくともゲイツには)んで、
とりあえずレトロで枯れた手法に合わせたわけよ。

ところでw2kって、管理手法としてJobObject「しか無い」
ってわけじゃないよな?
親子構造しかないunixよりは、マシ。
71デフォルトの名無しさん:2001/07/09(月) 08:37
age
72デフォルトの名無しさん:2001/07/16(月) 17:37
fork()はガンだよね。
73デフォルトの名無しさん:2001/07/17(火) 13:13
CreateProcess()しかないWin32よりはマシな気がする
fork()->setpgrp()->execve()でほとんど同じ事できるし

単純にプロセスを分岐出来た方が楽な事も多いと思う
74デフォルトの名無しさん:2001/07/17(火) 15:00
fork()しかないUnixよりましな気がする。
CreateThreadでほとんど同じ事できるし。

単純にスレッドを作れたほうが楽なことも多いと思う。
75デフォルトの名無しさん:2001/07/17(火) 15:06
あるポートをbindしたプロセスを再起動したら Address already in use となってしまう。
プロセス終了時に close するだけじゃ駄目なのでしょうか?

TCP( AF_INET, SOCK_STREAM) です。
76デフォルトの名無しさん:2001/07/17(火) 16:20
>>75
よくなるよね。解決策ってあるのかな?
今のところ聞いたことないんだけど…
77デフォルトの名無しさん:2001/07/17(火) 16:39
>単純にプロセスを分岐出来た方が楽な事も多いと思う

そもそもプロセスに「分岐」っていう考えがあること自体が
不気味なんだけどな。

走行中のThread「を」複写しようなどと思う奴が居るか?(反語)
そんな、Contextがどうなってるか際どいものを
わざわざコピーなんてしたくない。

でもunixのプロセスは、走行中(というか停止中という概念が
意味をなさないのだが)にforkで複写される。不気味。

というかアレだな、Threadのアナロジーで考えるなら、forkは
以下のようなものであって欲しかった(今更言っても無駄だが)。

1:自分じゃなくて第三者(のプロセス:どうせUnixにはプロセスしかないので)
の依頼によってfork「させられる」ことが出来る。

2:今そのプロセスをforkしても大丈夫かどうか?という情報を
その第三者が、該当プロセスを「動かさず(=非破壊)」に
知る手段がないと困る。
勿論直接そんなことが出来るとは限らないので、
OOPのプロパティみたいな非破壊状態読み書き機構があり、
それを第三者がアクセスする、という形が良かろう。

でも、現実はそうじゃないのな。あれは不気味だ。

プロセスは、状態を持っているのでその状態を第三者が知りたいと思うことが多い
というものであるにも関わらず、プロセス(だけ)が実行主体の単位であるために
受身になる(それによって第三者が「調べる」ことが出来るようになる)ことが出来ない。
78デフォルトの名無しさん:2001/07/17(火) 18:58
forkってまだスレッドの概念すらなかったころにできたんだよね?
79デフォルトの名無しさん:2001/07/17(火) 23:09
>>75
setsockopt()っぽい関数でLINGERっぽいヤシを指定するとかそんなカンジでなんとかならないかな?
名前はうろ覚えです。
80デフォルトの名無しさん:2001/07/17(火) 23:16
>>79
tcpnodelayじゃない?
81デフォルトの名無しさん:2001/07/17(火) 23:29
>>75
数分待つ。
82デフォルトの名無しさん:2001/07/17(火) 23:31
>>75
素直にあいてるポート探したら?
83デフォルトの名無しさん:2001/07/18(水) 14:22
>>82
サーバなんじゃねぇの?
84デフォルトの名無しさん:2001/07/19(木) 01:09
>>75
ちゃんと shutdown(2) してる? close(2) だけじゃ駄目だよ。
85デフォルトの名無しさん:2001/07/19(木) 01:49
>>77
プロセスという存在が非常に抽象化されていて、実際のメモリ上での
挙動とかけ離れたイメージの存在になっている事が原因だろうね。
fork()自身の仕様は、Unixのプロセス管理機構の側からすれば、
何の事はないことでしょ。
86デフォルトの名無しさん:2001/07/19(木) 01:56
>>85
ハラワタの底の挙動まで考えれば、
理解は可能だが、賛同は不可能だな。
モデルがひねくれすぎ。
ThreadとObjectという最近流行(わら)の考え方のほうが
はるかに素直なモデリング。

少なくとも、データ単位と実行単位を別々に管理できるほうが
幸せだよ。ThreadがObjectを触って回るVisitorPattern
みたいなものだと思えばいい。
87デフォルトの名無しさん:2001/07/19(木) 02:05
>>86
是非新OS書いてください。
88デフォルトの名無しさん:2001/07/19(木) 10:03
>>86
forkの意味理解したとき、「これ考えた奴天才かも」って思ったよ
天才=キティという話もあるが・・・(藁
89デフォルトの名無しさん:2001/07/19(木) 12:04
>>75
setsockopt(2) で SO_REUSEADDR つける。

>>79
SO_LINGER をその目的でつかうのはだめ。

>>80
全然違う。
90デフォルトの名無しさん:2001/07/19(木) 12:09
EOF超えて後ろにseekすると、穴あきファイルになるのは
しってるんですけど、
あるファイルのどの部分が穴なのか、検査する方法って
ありますか?
91デフォルトの名無しさん:2001/07/20(金) 20:57
>>90
dumpみたいにraw deviceを直接見に行かない限り
無理だと思われ
92デフォルトの名無しさん:2001/07/21(土) 11:29
age
93デフォルトの名無しさん:2001/07/21(土) 18:21
プロセスの制御端末と標準入出力の違いがよくわかりません。
どんな本とかWEBを見ればよいでしょうか。
94デフォルトの名無しさん:2001/07/21(土) 18:22
エスケープシーケンス開設してるサイトない?
95デフォルトの名無しさん:2001/07/22(日) 01:10
>>93
標準入出力はデータの流れ。制御端末はシグナルの送出元。
96デフォルトの名無しさん:2001/07/22(日) 02:14
>>87
漏れはやっと簡単な言語を作れるようになったばかりなんで
OSなんてのは遠い(=5年くらいか(わら))夢です。
それに、モデルとかの上位層は強い興味持っているが、
下位層のCPUやPC(など)の仕様の把握ってのは
ちょっと鬱な作業だなと。
OSをKit化して好きな部分だけ自作すれば済む
というもの(OSKitという名だとか)を
公開してる大学もあったはずなんで
そっち使ってラクしちゃろかなという発想が先行する。

というか、既に星の数ほどある研究レベルのOSの中には
こーゆーモデルの奴も結構多いと思われ。
「OSの」研究をするならば少なくとも、
既存物に過ぎぬPOSIXにする意味は全く無いんで。

>>88
個人的にはキティ説まんせー

まぁ当時は今みたいなOOP時代じゃなかったから、
データつーものを重んじる発想が無かったんだとは思う。

たとえばPipeじゃデータ「の一意性」は永遠に表現できない。
データを流さざるを得ないせいだ。おかげさまで、
なんぼPipeでソフトウェア部品だと言い張ってみたところで、
その部品をどう活用してもviエディタひとつ作れやしない(わら)
97デフォルトの名無しさん:2001/07/22(日) 12:31
forkはわかりますが、threadがなんなのか理解できません。
どう違うのか、どう実現しているのかおしえてくださ〜い。
98デフォルトの名無しさん:2001/07/22(日) 13:19
>>97
スレッドが理解できていないのなら、forkも分かっていない
99デフォルトの名無しさん:2001/07/22(日) 22:34
あら、そうですか?>>98
unixのプロセス制御を解説している本は多くありますが、
スレッド制御をosレベルできちんと解説している
文献がありません。
プロセス・スレッドの違いで簡単に解説してほしー。
100デフォルトの名無しさん:2001/07/22(日) 23:10
unixのプロセス制御をosレベルできちんと解説している本とは?
101デフォルトの名無しさん:2001/07/22(日) 23:13
>>99

docs.sun.comに行けばsolarisのドキュメントがお腹いっぱい読めるよ。
solarisは一応POSIXスレッド使えるし。
102デフォルトの名無しさん:2001/07/24(火) 03:03
 私は98さんでも99さんでもありませんが。
 マルチプロセスかつマルチスレッドなプログラミングを
するハメになってしまいました。チームで、ですがこれに関しては
全員素人という。。。

 現在、
・SUN マルチスレッドのプログラミング docs.sun.com
・UNIXネットワークプログラミング第2版Vol.1
・同Vol.2
を用いて勉強中ですが、理解にはまだまだ道は険しいです。。。

 マルチスレッドプログラミングに関しては、以下の本がありますが、
上記3つに加えて「読むべきお勧め本」がありましたら教えてください。

・マルチスレッドプログラミング入門 アスキー
・実践マルチスレッドプログラミング アスキー
・Pthreadsプログラミング オライリージャパン
・Pスレッドプログラミング ピアソン
・POSIXスレッド プログラミング アスキー

>>100さんと同じく、プロセス制御解説のお勧め本も
教えて頂けると幸いです。。。

OSはSolaris8を、コンパイラはgccを、デバッグにはGDBを用いています。

教えて君で申し訳ありませんが、回答して頂けるとうれしいです。
103デフォルトの名無しさん:2001/07/24(火) 07:30
>> 102

全員素人でマルチプロセス・マルチスレッド?

...可哀想だが、95%こけるよ(^^;


ひとまずpthread関連の書籍を読めば基本はわかるはず。

あとライブラリ関数はマルチスレッド対応かどうかを必ず確認するべし。
プロジェクトのライブラリ内で非マルチスレッド関数とか使われると
原因不明のバグで悩まされます。要注意。

あとはがんばって競合問題を勉強してけれ。結局はそれが一番問題。
104デフォルトの名無しさん :2001/07/24(火) 08:38
>>103
>マルチスレッド対応

スレッドセーフかどうかってことね。
でもスレッドセーフな関数しかつかわんのなら、
スレッドプログラミングなんてなんら勉強する必要ねーじゃん(藁

競合問題も勉強する必要なし。

タイミングを勝手に仮定したロジック組まないことが一番問題かな。
105デフォルトの名無しさん:2001/07/24(火) 08:49
>>104 グローバル変数...
106デフォルトの名無しさん :2001/07/24(火) 08:55
>>105 仕様禁止...
107shige:2001/07/24(火) 08:57
しえーーーーーーーーーーーーーーーーーーーーーーーーーーー
108デフォルトの名無しさん:2001/07/24(火) 09:00
static 変数...
109デフォルトの名無しさん:2001/07/24(火) 09:02
>>108 仕様禁止... ただし定数は可(w
110chinge:2001/07/24(火) 09:08
しえーーーーーーーーーーーーーーーーーーーーーーーーーーー
111デフォルトの名無しさん:2001/07/24(火) 09:44
>>104
スレッド間で通信しないわけ?
112デフォルトの名無しさん:2001/07/24(火) 10:04
>>111 仕様禁止...
113shine:2001/07/24(火) 10:06
しえーーーーーーーーーーーーーーーーーーーーーーーーーーー
114103:2001/07/24(火) 10:19
>>104

pthreadライブラリは全て「スレッドセーフな関数」なんだが、
その使い方・常套手段・マルチスレッドの流儀も一切勉強しなくて良いと?

さらに標準ライブラリは全てスレッドセーフだとでも?

そしてスレッドセーフな標準ライブラリだけでプログラミングできるとでも?
自作モジュールなんてつかうなと?


というわけでどう考えても104の認識不足。


> タイミングを勝手に仮定したロジック組まないことが一番問題かな。

これが競合問題だっつーに。
マルチスレッドもマルチプロセスもこの問題が一番でかくてやっかい。
115104:2001/07/24(火) 10:30
>>114 同意するよ
116デフォルトの名無しさん:2001/08/02(木) 19:39
age
117デフォルトの名無しさん:2001/08/02(木) 20:48
>>114
禿同

102のような状況で、こないだプロジェクトいっこ潰した。
俺が入っていったときには既に末期ガンで処置不能。
118デフォルトの名無しさん:2001/08/22(水) 14:08
pthreadを最近勉強始めた者です。
signalでその都度変化する時間間隔で発生するSIGALRM
がきたら関数を呼び出す、という関数を含む
処理を複数スレッド化したいのですが、そのまま
pthread_createしちゃっていいんでしょうか?
厨房な質問で申し訳ないのですが。
119デフォルトの名無しさん:2001/08/23(木) 19:08
>>85-88
超カメレスだが、JavaOSマンセー!
Processなんて無いぞ。それどころかProcessメモリ空間すら無いぞ。
それでも複数の「アプリケーション」が問題(変な干渉)無く動くぞ。
JavaOSマンセー!
JavaOSマンセー!
盲信
121デフォルトの名無しさん:01/10/08 20:01
bashの様な文字列補完とか自分のプログラムで使いたいんですが、
どうやるんですか?
>>121 readline というライブラリがあるよ。man readline
むかしそれで英和辞典作ったことがある
>>77
fork(2)のご利益が理解出来ないなら「UNIX原典」を読め。
dup(2), pipe(2), shellのredirect, pipeとの関係について書いてある。

> OSなんてのは遠い(=5年くらいか(わら))夢です。
なんて野望があるなら、過去のprocess model全てをよく勉強しておくことを進める。
>>123
ヴァカはほうっておけよ。相手にするだけ時間の無駄だ。
125デフォルトの名無しさん:01/10/10 00:23
readlineはGPLに犯されてる
Linuxから入る人はUNIXっていうものを軽視しがちだね。
LinuxとかBSDとかじゃなくて、UNIXがなんなのか
それを理解することの方がよっぽど大切だと思うよ
linuxでPnPなドライバを作る方法を教えてください。
128デフォルトの名無しさん:01/10/10 02:47
>>120
たしかに>>119は盲信気味だけど、JavaOSは面白いよ。
VM/class verifier流儀のprotectionとかさ。

別に言語はJavaじゃなくていいんだけどさ。
Spinマンセー!! Modula3マンセー!!
JavaOSとLispマシンはどう違うんですか?
131デフォルトの名無しさん:01/10/10 10:27
>>34
おもしろい
132デフォルトの名無しさん:01/10/10 10:31
ウニックスとライナックスの違いがわからない
133デフォルトの名無しさん:01/10/10 10:55
ライナクスはニセブランド品、ピーコ品、パチモンです。
つーかリーヌクスだろ?
135デフォルトの名無しさん:01/10/10 12:21
ライナックスは、ウニックスのエミュレータです。
あんなパチモンの呼び名などどうでもいいです。ライナックスで十分です。
137ライナス:01/10/12 22:30
作者ですがなにか?
138デフォルトの名無しさん:01/10/24 13:02
stat.st_modeの挙動がおかしい。
138の挙動がおかしい
140デフォルトの名無しさん:01/10/24 16:34
プロセス:割り当てられた空間つぅか領域
スレッド:プロセスん中で動き回ってるヤツ

などと放言すると殺される?
141お胸おっぱい:01/10/24 17:37
>>140
そりゃあんまりだ。メモリ空間に関して
  プロセス: 独立して割り当てられる。
  スレッド: 元のプロセスのメモリを共有。
ってところ押さえないと。
142デフォルトの名無しさん :01/10/24 19:30
ソケットプログラムについての質問です。
自身のIPアドレスを知るための関数はありますか?
ちなみに自身の名前(ホスト名)も分かっていない状態での場合です。
system関数でhostnameを使用して、それをgethostbynameでIP取得・・・
とするくらいしか思いつきません。
何か良い方法はないでしょうか?
スレッド:プロセッサ割り当ての単位
プロセス:(プロセッサ以外の)リソース割り当ての単位
144デフォルトの名無しさん:01/10/24 20:20
>>142
基本的にそれでいいと思うよ。

あと、自分のホストネームは gethostname() システムコールを
使えば良いと思われ。
145デフォルトの名無しさん:01/10/24 20:42
getsocknameを使う方がいいんじゃない?
マシンにhostnameやIPアドレスが複数ある時は、
そのsocketでどのIPアドレス使われてるかは
gethostname+gethostbynameじゃわかんないでしょ?
146142:01/10/24 22:05
>>144 >>145
ありがとうございます。
それでやってみます。
147sage:01/10/26 06:17
ソフトバンクの目隠しモナリザ本、買おうかどうか迷ってるんだけど……
148デフォルトの名無しさん:01/10/30 08:39
opendirしたらclosedirしないとだめなの?
149デフォルトの名無しさん:01/10/30 11:10
>>142
POSIXで標準化されてるかは知らないけど、
SIOCGIFCONFをioctl()すると調べられる

#include <net/if.h>あたりを調べてごらん
150デフォルトの名無しさん:01/11/02 12:35
*.so

*.a
ってなにもん?
151デフォルトの名無しさん:01/11/02 12:58
>>150
.soはShared Objectで、実行時リンクライブラリ
.aはArchiveで、静的リンクライブラリ

自分で調べろよなぁ・・・
152デフォルトの名無しさん:01/11/02 13:11
拡張子辞典(Windows,DOS,Mac,CP/M,OS2,unix 共通)
http://www.qbfc.com/tech/Article01/std/exdic.html
153デフォルトの名無しさん:01/11/02 23:52
>>152
Unixでは拡張子は基本的にはファイルの種類と関係ないよ。
>>153
カーネルは関知しないが、
コマンドは拡張子を気にするだろ。

makeとかCコンパイラとか。
>>154
.cだったらCのソースで、.hだったらヘッダファイルだとでも?
UNIX使いなら拡張子じゃなくてsuffixと呼べやゴルァ
157デフォルトの名無しさん:01/11/04 17:14
質問です。
UNIXでWin32で言うところのDLLみたいことをやりたいんですが、
LoadLibrary()とGetProcAddress()みたいな関数(とかシステムコール)は
あるのでしょうか?
solaris/linuxなら man dlsym か
他は知らね
and man dlopen
160157:01/11/05 00:50
>>158-159
ありがとうございます。それでできそうです。
161デフォルトの名無しさん:01/11/11 13:23
Emacsでgdbを使うにあたって、
なにかお勧めの書籍やWebページありますか?
162デフォルトの名無しさん:01/11/20 14:17
あげ
>>153
関係ないっつったら、他の OS でも関係ないじゃん。
165デフォルトの名無しさん:02/01/14 21:12
あげ
166超初心者:02/01/14 22:23
fd = open("hogehoge", O_RDONLY);
で開いたファイルに何か入力があるまでブロックされ、入力があったら
それをシグナル等で知る事ができるような方法はありますか?
select()ではできませんよね?
Solaris7 or 8 なのですが。
普通にreadすれば?
168デフォルトの名無しさん:02/01/14 22:39
シェルはbashです
cをつくったんですけど
ccでコンパイルできません。
どうすればコンパイルできますか?
169ひよこ名無しさん:02/01/14 22:40
>>168
エラーメッセージは?

>cをつくったんですけど
ほう、yaccとか使って?
>>169
>エラーメッセージは?
「そのようなコマンドはありません」でした

linux初心者でcを勉強しようといれてみたんですが・・
cc test.c な感じです。。
171ひよこ名無しさん:02/01/14 22:50
>>140
gccは?
学校ではSolarisさんか?
172デフォルトの名無しさん:02/01/14 22:51
会話の意味が解らんw
>>171
いえ、借りてるサーバーがSolarisです。telnetでよく遊んでいます
自宅の環境はredhat7.2です
gccもコンパイルのソフトでしょうか
のちほど試してみます
174デフォルトの名無しさん:02/01/14 23:11
gccでもダメでした・・
いったいLinuxで何してんだか。
176超初心者:02/01/14 23:18
>>167
すみません、ちょっと書き方が悪かったのですが、
やりたいこういうことです。

hogehogeというファイルにあるプログラムからログが書かれる。
それをほぼリアルタイムに表示したい。
tail -f のようなポーリング式にはしたくない。

という事をしたいのですが、良い方法ありますか?
>>174
find -n gccとかで探してみて(スイッチ-fかも)。
>>174
locate gccで探してみた?
gccにパスが通っていないってのはちょっと珍しいかも。
それともコンパイルエラー?
179178:02/01/15 10:15
レスさんくすです
>>177>>178
後ほど試してみます。

余談ですが、インストールするときにワークステーションの設定で
インストしたんですが、デフォルトではいってますでしょうか?(コンパイラ
もしかしたらインストールされてないのかなっておもったり
180デフォルトの名無しさん:02/01/15 10:16
http://saki.2ch.net/____vip/
入れない2chVIP板。
>>176
SIGIOって通常ファイルに対して使えたっけ?
182超初心者:02/01/15 13:09
>>181

それはどうやって使えば良いのでしょうか?
すみません、ほんとに初心者なのです。
183デフォルトの名無しさん:02/01/15 23:14
UNIXのプログラミングは
まずは『詳解UNIXプログラミング』を覚えてからでないと
ダメですか?
>>179
>ワークステーションの設定でインスト
うん、おれんとこもそう。だけどコンパイラはデフォで
入ってるし、パスも通ってる。というより、あえて外そう
としないかぎりインストールされるでしょ。gccって。
185デフォルトの名無しさん:02/01/15 23:16
183。
ちなみにこの本でUNIXが何なのかを頭に叩き込むのがいい、
とかどっかに書いてありました。
この本とっても他界よ!
187デフォルトの名無しさん:02/01/15 23:36
>>186
でも他にまともな本がない・・・
188デフォルトの名無しさん:02/01/15 23:37
>>183
ttp://www.jks.is.tsukuba.ac.jp/~daiki/func/man7/signal.7.html
あまり参考にはならないかもしれないけど、資料として。
どう使えばいいかまでは書いてないから、適切な書籍を買うなり
して、SIGNALについて勉強すればいいんでない。
189デフォルトの名無しさん:02/01/15 23:38
ごめん、間違えた。>>183ではなくて>>182だ。
190132:02/01/16 00:20
>>189
どうもです。
勉強する糸口が見えてきました。
が、しかし、Linux には fcntl(2) のコマンドとして F_SETSIG という
のがあってこれを使えば指定したファイルディスクリプタから入力が可能
になった時点でシグナルハンドラが呼ばれるようなのですが、Solarisには
F_SETSIGやそれに相当するものがありません。他に方法はあるのでしょうか?
だいたい表示とか、プログラムから書き込まれるタイミングとかによるけど。
たとえば1msに1バイトずつ書き込まれるものを一個一個読み込みたいってわけ
じゃないだろ?
だったらポーリングで充分じゃなかろうか。
192デフォルトの名無しさん:02/01/16 01:06
>>190
$ man streamio
そしたらば、I_SETSIGやSIGPOLLをサーチすれ

>>166
select(2)じゃあ、EOFにも反応しちゃうね。しなきゃしないで困るし。>EOF
193132:02/01/16 01:17
>>192
ウォー!!サンクスです。
ioctl(2)で出来るんですね。docs.sun.comのマニュアル見たらなんか行けそうな
気がしてきました。今手元にはCygwin(藁しかないので明日試してみます。
194デフォルトの名無しさん:02/01/16 01:20
>select(2)
(2)って何ですか?
manしないの?
196デフォルトの名無しさん:02/01/16 01:36
$man 2 select

ところでみなさん、Solaris、*BSD*、Linuxと
いろいろな環境をどのようにマスターされました?
やっぱり自分で実際に使ってみたのでしょうか?
197196:02/01/16 01:49
上のは当然、オペレーションの話じゃなくてAPIのことです。
198デフォルトの名無しさん:02/01/16 01:51
aioread(3AIO)なんかも美奈代。7 or 8ってことだから。
使わなくて平気だろうけど、面白いよ。
>>196
よくいわれるけど、システムコール他は、他人が使ってるの見るのが一番いいよ。
少なくとも「完全に動作する実例」だし。

fileutils の中の部分とか、小さいアプリのソース読みまくる。
ハックしまくる。壊しまくる。
うっかり、make install してしまって、ls,cp できなくなってハマる。
他所のサーバに connect しまっくてあせる。
200デフォルトの名無しさん:02/01/16 02:22

for (i = 0; i < 10; i++)
used[i] = NO;
for (E = 0; E < 10; E++) {
if (used[E])
continue;
used[E] = YES;
for (L = 0; L < 10; L++) {
if (used[L])
continue;
used[L] = YES;
for (S = 0; S < 10; S++) {
if (used[S])
continue;
add( 0, E, L, S, c1);
add(c1, S, L, E, c2);
used[S] = YES;
for (A = 0; A < 10; A++) {
if (used[A])
continue;
used[A] = YES;
for (M = 0; M < 10; M++) {
if (used[M])
continue;
add(c2, A, A, M, c3);
used[M] = YES;
for (B = 1; B < 10; B++) {
if (used[B])
continue;
add(c3, B, B, A, c4);
used[B] = YES;
for (G = 1; G < 10; G++) {
if (used[G])
continue;
add(c4, 0, 0, G, c5);
used[G] = YES;
>200
宿題スレの誤爆だろ。
202デフォルトの名無しさん:02/01/16 05:07
>>196
1. 少なくとも一つUNIXでは実際に使ってみる。
2. 使うどのUNIXでもmanualは徹底的に読む。
3. さもなくば、氏ぬ
203132:02/01/16 13:29
Solaris7 で試して見たのですが、

fd = open("logfile", O_RDONLY);
if (fd < 0) {
perror(TARGET_FILE);
exit(1);
}
if (ioctl(fd, I_SETSIG, S_INPUT) < 0) {
perror("ioctl");
exit(1);
}

というような感じで書いて実行すると、

ioctl: Inappropriate ioctl for device

とエラーになってしまいました。
STREAMS (see intro(3)) ioctl commands となっていたので、
intro(3) を見ると、
「「STREAMS」と「ストリーム」の違いには十分気を付けて く だ さ
い。STREAMS とは、ネットワークサービスとデータ通信ドライバの
開発をサポートするカーネル機構の一種であり、...」
となっていますが、streamioは通常のファイルに対しても使えるのでしょうか?
>>203
だからそれが181の疑問なわけよ。
205デフォルトの名無しさん:02/01/16 22:50
ビルドしたプログラムを実行するとき必ず
./a.outのように頭に./を付けますが
どうしてpathに含めないのでしょうか?
>>205
じゃあ含めてみれ。
含めたはいいが、うっかり test.c をコンパイルして大変なことになる罠。
208デフォルトの名無しさん:02/01/16 23:44
含めたはいいが、うっかりgcc(中身はrm -rf /)というファイルを置いて
挙句の果てに実行パーミッションつけちゃって大変な事になる罠。
209132:02/01/17 00:12
>>204
えーん、だめですか。
aioread(3)のサンプルってどこ探しても無いです。
簡単な例無いですか?
なんでポーリングでまずいのか小一時間。
211デフォルトの名無しさん:02/01/17 18:13
SparcのSolaris付属のccって-Mオプションありますか?
212デフォルトの名無しさん:02/01/17 18:17
Solarisで仕事してるひとってfork、wait使わないで、
pthread_*を使いまくりなんですか?
>>208
ふと思ったけど、DOSでもxcopy.bat(中身Deltree \*.* -Y)がカレントにあった場合やっぱり・・・。
214デフォルトの名無しさん:02/01/17 19:35
初心者です
gccでコンパイルしました。
そうしたらディレクトリ内に変なファイルができました。
実行したいのですがどうすればよいでしょうか
http://www.amazon.co.jp/exec/obidos/ASIN/4894713195/
korewo anki surumade yondekara shitumon shitene!
216デフォルトの名無しさん:02/01/17 19:39
高いdes!!買えませんです
217デフォルトの名無しさん:02/01/17 19:55
すみません。いい方がよくありませんでした
コンパイル後にa.outというファイルがつくられました。
そして実行しようとしてa.outと打ったのですが
そんなコマンドは無いといわれました

なんと打てばよろしいのでしょうか
./a.out
ありがとうございました!やってみます
>>209
> aioread(3)のサンプルってどこ探しても無いです。

http://examples.oreilly.com/posix4/p4code.tar.Z
でも、aio は176の目的には使えないと思った。
ポーリングすれ。
221132:02/01/17 22:35
>>220
調べていただいてどうもです。
いろいろ考えたんですけど(調べてはいないので妄想か?)ローカルディスク上
のファイルならまだしも、NFSサーバ上のファイルのI/Oの発生をカーネルが知る
のはとても難しいと思うので無理で当然かなと思いました。
素直にポーリングします。
どもありがとうございました。
>>213
その通り。だからDOSは糞。
つーか、dosなら、カレントにxcopy.batを置くのは
基本的に自分自身なわけで、それって自業自得では?
224デフォルトの名無しさん:02/01/18 01:04
なんかUNIXでのスレッドプログラミング用ライブラリを見てたんだけど、
いろいろありすぎて訳分からん。だれか2,3簡単に説明してくれないかな。
説明はいいとしても何を使ってるか教えて下さい。

関連サイト
http://pc.2ch.net/test/read.cgi/unix/1010933537/
>>223
UNIXだって同じじゃん
>224
おまえが調べておれに教える!
>225
UNIXは多人数で同時に使えるだろ。
/tmpとか、誰でも書きこみできるだろ。
>227
なんで/tmpにわざわざパス通さなきゃならないんだよ。
リアリティーがないぞ。
229デフォルトの名無しさん:02/01/18 01:49
やっぱSolarisかWindowsだな。PC-UNIXにはthreadは不向きだ。
いまはpathに . が含まれる事についての話じゃなかったのかよ。
>>230
そんな話は誰もしてません。気のせいです。
232224:02/01/18 02:24
pthreadスレにあったNGPTとPthだけど、
Pthの方はあまりパフォーマンス的には期待できないけど、
多機能ゆえにこれ使うことにします。
NGPTはまだ安定動作の保証が取れてなさそうなので、
もう少し様子を見てからにしたいと思います。
もしかして一般ユーザーには関係ない話なのか?
http://www.linux.or.jp/JF/JFdocs/Path-12.html
>>228
/tmpに絶対chdirしないならいいけど
235デフォルトの名無しさん:02/01/18 03:22
>>233
「Linuxでは、パスの評価がオペレーティングシステムコールレベル
(operating system call level)で行われていることを思い出して
下さい。実行ファイルのパスが与えられているところならどこでも、
(少なくとも) /bin、/usr/binから検索される短い名前(short name)
が与えられます - 他の場所でも同様です」

ってどういうこと?
>>235
原文あたってみた。

Linuxではパスの評価がオペレーティングシステムコールレベルで行われる
ことを忘れてはならない。実行可能ファイルのパスを指定するあらゆる
場所において、あなたは少なくとも/binと/usr/binで検索される省略名を
使うことができる(*)。

(*)3. 一般より抜粋
execシステムコールは、 '/' を含まないファイル名を与えられた場合に
PATH環境変数を使う。例え環境にPATH変数がなかったとしても、少なくとも
/binと/usr/binディレクトリは適合するコマンドを探して検索される。
>>235
PATHに ./ が入ってる場合に限った説明は「クラッカーのlsコマンドを…」のところで終わってるのかな。

「オペレーティングシステムコールレベルで」の部分は、
シェルがパスの解決をしてるんじゃないよ、って意味でしょう。

だからデーモンが foo を実行するとき、(デーモンは/bin/fooを期待している)
rootのPATHに/usr/local/bin/が入ってると、
/usr/local/bin/fooが実行されちゃうよっていうことだと思う。
238デフォルトの名無しさん:02/01/18 06:32
PATH=/bin:/usr/bin:/usr/local/binの順で定義するのが
普通だから、/usr/local/bin/fooが実行されることは
ないだろう。そのへんをきっちり考慮してかかれたプログラム
だと、PATH=/bin:/usr/binって先頭で設定しなおしてから
fooを呼んでる。
239デフォルトの名無しさん:02/01/18 13:15
manを.htmか.chmに変換したファイルって無いの?
>>238
>>237>>233のページにそういうことが書いてあるって説明だ。モトネタ嫁。
>>236
大嘘じゃん。
PATHを見るのはexecファミリの中ではexeclp()とexecvp()だけで、
これはシステムコールじゃない。
PATHはあくまでもシェルを中心としたアプリケーション側での約束事。
カーネルはまったく無関係。
じゃぁ、システムコールとシェルの動作の間にあるものは、いったい何だろう…
標準関数?
244デフォルトの名無しさん:02/01/18 23:36
>>238
> PATH=/bin:/usr/bin:/usr/local/binの順で定義するのが普通だから、

初耳だよ。一般ユーザはPATH=/usr/local/bin:/usr/bin:/binだろ。
rootなら/usr/localが最後でもおかしくないけど。

クリティカルなシェルスクリプトは、フルパスでコマンド指定するしな。
245 :02/01/18 23:37
libc
246デフォルトの名無しさん:02/01/19 00:44
>>242
なんだ普通のUNIXと一緒か。安心したよ。てかつまんないの。

>>244
一般ユーザなんだからどっちでもいいだろ。統計でもとってみれ。
247デフォルトの名無しさん:02/01/19 03:11
arでライブラリを作る際、元々.aファイルがあったら、
普通はそれにオブジェクトファイル追加・更新していく事
になりますよね。

すると、あるとき何かの都合でその.aに入っていたオブジェクトを
Makefile等でのarコマンドの記述から外しても、.aを一度消さない限り、
外したオブジェクトが入りっぱなしになってしまいます。

Makefileの記述にあわせて、.aからも不要なオブジェクトを削除する
事って可能なのでしょうか?
それとも、Makefileに更新があったら、必ず.aを消すのが正しいんですか?
>>247
Makefile の更新なんて見ないで常に消せばいいじゃん。
libfoo.a: $(OBJS)
rm -f $@
ar cq $@ $(OBJS)
ranlib $@
みたいなかんじで。
249デフォルトの名無しさん:02/01/19 10:26
>248
それだと、元々入ってるオブジェクトには変化がなくて、
内包するオブジェクトの指定が変化しただけでは更新しませんよね・・・・
libfoo.a: $(OBJS) Makefile
  # 以下同文
251247:02/01/20 01:29
>248
>>250
いや、.aファイルその物の消し方を知りたいんじゃなくて、
.aファイル内の不要になったオブジェクトを消す方法があるのか?
それとも、.aファイルその物をMakefileの更新にあわせて常に消すのが
正しい流儀なのか?という事を聞きたかったんです。

また、わざわざ指定されなくなったオブジェクトを残すようにしているのは、
何か意図があっての仕様なのか、その辺も知りたいなと。

不要なオブジェクトを残す事に特に意味がないのに、arは追加・更新しか
しないようになっていて、それゆえ.aをわざわざ指定して消さなきゃ
いけないって、奇妙ですよね。
>>247=251
ar dでは駄目?

>元々.aファイルがあったら、
俺はこういう前提ではやらないな。
make clean/allの時点で常に消されることを前提にしてる。
253250:02/01/20 02:50
>>251
Makefile 書き換えた結果、「何が無くなったか」を検出するように
すれば「無くなったオブジェクトのみ」消すのはできる。
…けど面倒だし、そんなことするくらいなら作り直した方が健全じゃ
ないかなぁ。
254デフォルトの名無しさん:02/01/20 12:05
最近gcc+makeを覚え始めたのですが
例えばmain.c, sub.h, sub.c, common.hというプロジェクトをビルドする場合、
gcc -Mを使ってヘッダの依存関係を考慮した
全く無駄の無いmakefileを書くのって意外に難しいですね。

先頭にSRCS = main.c sub.cって書いておくと
あとは自動的にビルドしてくれるようなテンプレートってないですか?
255shige:02/01/20 12:09
tmake
>>254

#!/bin/sh
# usage: $0 target srcs...
exec > Makefile
echo "TARGET = $1"
shift
echo "SRCS = $*"
echo 'all: $(TARGET)'
echo '$(TARGET): $(SRCS:.c=.o); $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -o $@'
gcc -MM $*
>>254
簡単かどうかは別として、古典的作品として imake も挙げておく。
救いage
シグナルマンセー
261デフォルトの名無しさん:02/03/06 22:44
***すれ立てるまでもない質問はここで 第11刷***
http://pc.2ch.net/test/read.cgi/tech/1014478527/l50

で放置されたので、こちらで質問させてください。
MALLOC_CHECK_の使い方を教えて頂きたいのです。

malloc/freeで、2重解放している等の不具合を見つけるために
MALLOC_CHECK_
なる環境変数を使ってデバッグができると知り、
試してみたのですが、状態が変わらず。

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/malloc.3.html
http://www.arbornet.org/~zunda/ctips.html
辺りを読むと、以下のコマンドをプログラム実行前に行い
プログラムをgdbで実行すればよいだけのように読めるのですが。。。

% gcc hoge.c -g
%
% setenv MALLOC_CHECK_ 1
%
% gdb a.out
%

man mallocで詳しい説明が分かる、とも書いてあるのですが、
私の環境では、man mallocでもMALLOC_CHECK_という単語は全く見当たらず。

Solaris8, gcc2.95.2では駄目ということなのでしょうか?
それとも何かしらのインストール、または事前設定が必要なのでしょうか?
あるいは、単に使い方誤りなのでしょうか?
>>261
> 最近のバージョンの Linux libc (5.4.23 以降) と GNU libc (2.x) では、
これの意味がわからなかったらあきらめれ

>>261
そんなもん使わなくてもデバッグできるだろうに・・・方法はたくさんあるよ
265デフォルトの名無しさん:02/03/09 22:44
>>261  Solaris8 はGNU libc を使用していないんじゃ ないの?
    で>>262がそれを指摘して以降のレスがつづく
266デフォルトの名無しさん:02/04/09 03:03
UNIX間での移植性のあるプログラムを書くコツはやっぱり
自分で経験積まないと得られないものでしょうか?
>>266
とりあえず、人の(移植性が高い)ソースをパクれ!
そのうちスキルも上がるでしょう。
268デフォルトの名無しさん:02/04/10 09:42
>>266
とりあえず、POSIXとautoconfを押さえることから始めて見ては?
269デフォルトの名無しさん:02/04/10 16:39
UNIX のプログラムの設定ファイルって、プレーンテキストですよね?
こういうプレーンテキストを読み込む部分って、みなさん毎回作ってますか?
俺は今まで Win 厨で、設定はレジストリに保存していたので、
いままでUNIX でも設定をバイナリファイルに保存してました。
Berkeley DB のライブラリつかって。

でもなんか違う気がする………
>>269
だから awk/sed や perl が大人気。
人間可読だし、設定プログラムも自由に作成できる。
271デフォルトの名無しさん:02/04/10 17:59
>270
スクリプト言語なら書き換えも簡単ですね。
設定部分だけ分けて /etc/ の下に置くのもよさそうだし。

メインで使っている言語はC++なので、
シェルスクリプトからバイナリ本体を呼び出すようにして
環境変数経由で初期設定しようかとも思ったんですが、
それもスマートじゃないなぁ、と。

じゃぁほかのプログラムはどうやってるんだと思ったので、
ntpd のソースを見てみたら、ntp.conf を読み出す部分が
めちゃくちゃ大変そうでした。やっぱり伝統的にそうやってるのか…

どうせなら tiny な Lisp エンジンを内蔵してしまおうかとも思ったり。
FORTHでもいいかなと思ったり。

あうー。
C++使え
regex使え
274デフォルトの名無しさん:02/04/10 18:06
>272
ていうか、>271 でも書いたとおりメインはC++なんです。
汎用の設定ファイル用パーサみたいなクラスライブラリってありますか?
libxml
flex+bison
277デフォルトの名無しさん:02/04/13 01:37
Linux でシリアルに入力されたデータをファイルに書き出したいのですが、
どうやったらいいでしょう? ここのスレでいいのかどうか不安ですが
よろしくお願いします。

cat /dev/serial > file

のようなシェルスクリプトとかあるいは、C で本格的に書くのでもいいですが。
>>277
それでできてるんじゃ?
Linuxではダメなのか?
279デフォルトの名無しさん:02/04/13 03:58
UNIXプログラミング、ヘッダーファイルの依存関係にちと疲れた・・・
grepかけすぎて/usrの下が壊れそう
280デフォルトの名無しさん:02/04/13 06:34
>>269
> こういうプレーンテキストを読み込む部分って、みなさん
> 毎回作ってますか?

確かに不便。UNIX の欠点かなと思う。ただ、
 %{
 #include <stdio.h>
 %}
 %%
 ^[a-z]+=[a-zA-Z0-9]+ { '=' で分割して格納 }
 %%
として、
 % lex foo.l
 % cc lex.yy.c -ll
程度で何とかなるっちゃー何とかなる。でも面倒。

# をコメント扱いするとか、行末の \ の継続行扱いとかを考えるとさらに欝。
281デフォルトの名無しさん:02/04/13 09:45
>280
> 確かに不便。UNIX の欠点かなと思う。

まぁ、UNIXの欠点というよりライブラリがないってだけなんだけど、
不便なことには変わりない。

やっぱ lex + yacc で吐かせてる人が多いのかな。
bison が C++ に完全対応してくれればなお良なんだけどな。


個人的には Lisp とか Scheme とか好きなんで、
自分のプログラムに簡単に組み込める機能限定の tiny な
Scheme エンジンがあればいいと思ったり。
Gauche って組み込みやすいのかなぁ。
282273:02/04/13 10:00
>>281
あうー。
regexはだめなのー?
283デフォルトの名無しさん:02/04/18 11:18
>>269
偶然こんなのみっけたよ。
http://www.vector.co.jp/soft/unix/prog/se099824.html
284デフォルトの名無しさん:02/04/18 13:07
>282 regex も汎用性があっていいけど、階層化されたような
ちょっと複雑な構造のファイルをパースするとなると結局パーサは
自分で書かないとだめになっちゃうかも。

>283 をを!こりは、ぴったり。
も、もう少し前にコレを知っていれば………
S式で設定ファイルを書くようにプログラムを書いちゃターヨ。
>>284
S式の方がよいと思う。
286 :02/04/28 20:30
age
S式つーとこんな感じで書けるしね
階層も自由自在
(キー 値)
(キー 値)
...
(グループ
(キー 値)
(キー 値))
oracleの設定ファイルはS式っぽい。
>>288
カッコだけでしょう。
290デフォルトの名無しさん:02/04/28 22:36
>>289
そんなこというなよう
291デフォルトの名無しさん:02/04/28 22:40
木構造やらを扱うデータ表現ならS式が最適でしょ。
わざわざ限定的なXMLパーサを扱う最近の風潮はよくわからん。
292デフォルトの名無しさん:02/04/28 23:04
自分で書くの面倒だなぁと思ってs式で書いた設定ファイルを読み込むライブラリ
がないか探してみたらこんなものを見つけました.
http://www.complang.tuwien.ac.at/~schani/lispreader/

やっぱ皆自分で書いてるんですか?

#既存の.elコードを読み込みたい..
こんな物見つけた。うぅ、面倒くさそう。
http://www.ascii.co.jp/BSDmag/200004/style.html
294デフォルトの名無しさん:02/05/04 13:51
http://www.espada.net/~nobu-/jarg/lcode.html
こういったのもあるよ。
295デフォルトの名無しさん:02/05/04 15:29
> 特に連続 20 時間以上スクリーンを見つめていると、
> 大きなインデントがどんなに読みやすいかわかるだろう

少し外に出て新鮮な空気を吸うことを勧めたい。
296デフォルトの名無しさん:02/05/04 17:39
S式は万能です。
297デフォルトの名無しさん:02/05/04 20:08
tclはだめ?
もともとはアプリケーションに組み込んで使うものだったと聞いたけど。
誤爆??
299297:02/05/05 01:19
297は誤爆じゃないよ。tclは組み込みマクロ言語として機能するから、tclコー
ドで設定ファイル書いてもらえばいいじゃん。
300ゲット
















ズザー
もう一つ重要な事忘れてた。
日本語対応しといて欲しいです。
でもこの要求で使えそうな物がすごく限定されそうだ。
302名無しさん@お腹いっぱい。:02/05/06 06:35
今どうしても解決出来ない問題に直面しており、是非皆さんのアイデアを肖りたく
投稿します。

UNIX上でShellを使用した開発をしているのですが、日本語の文字(平仮名、カタカナ、漢字)
および全角スペースの削除方法が分かりません。半角スペースや半角文字(a,b,c,etc.)等の
文字を消す場合はsed -eを使用すれば消せることは分かるのですが、どうも日本語だとうまく
作動しません。

具体的ファイル名samplefileをvi等で以下の様に書き込みします。

あいうえお   春夏秋冬

"あいうえお"と"春夏秋冬"の間には全角スペースが3つ存在しますが、これを無くしてしまいたいのです。
それと、もし可能であれば"あいうえお"と打った全角文字も、文字自体を消すか、sed等で他の文字に置き
換えたいのです。

このような行為は可能でしょうか。ご存知な方是非教えてください。よろしくお願い致します。
sedは日本語対応なのか、というあたりと、
その日本語の文字コードは何なんか、というあたりだな。
>>302
perlで各行に対しs/ //g;
305304:02/05/06 06:43
ああそうか。文字コードの問題があるな。
事前にnkf -eしておくか。
306デフォルトの名無しさん:02/05/06 13:43
>>302
OSの名前とバージョンくらい書けよ。
307名無しさん@お腹いっぱい。:02/05/06 13:46
>>303さん
>>304さん
ご返答有難うございます。確かnkfはJISで書かれた日本語文字をEUCに変換
するものでしたよね。私の環境はSolarisで、TeraTermを使ってSolarisに入って
から、TeraTerm上で日本語入力を行っています。けしてSolaris上からではありません。

とにかく今は出先で確認が取れないので、帰宅したら実験して、結果を報告したいと思います。

もし他に何か方法をご存知の方いましたら是非教えてください。よろしくお願いします。
308名無しさん@お腹いっぱい。:02/05/06 13:48
>>306さん
私の説明不足でした。環境はSolaris8(SPARC)版で、TeraTermでtelnetして、
そこから開発しています。
309デフォルトの名無しさん:02/05/06 14:23
>>308
> 環境はSolaris8(SPARC)版で、

じゃあ、日本語はsedでもawkでもviでも問題なく利用できる。

$ ls -dl /usr/lib/locale/ja*
drwxr-xr-x 8 bin bin 512 Apr 20 2000 /usr/lib/locale/ja/
drwxr-xr-x 3 bin bin 512 Apr 20 2000 /usr/lib/locale/ja_JP.PCK/
drwxr-xr-x 3 bin bin 512 Apr 20 2000 /usr/lib/locale/ja_JP.UTF-8/
lrwxrwxrwx 1 root root 4 Apr 20 2000 /usr/lib/locale/ja_JP.eucJP -> ./ja/
lrwxrwxrwx 1 root root 4 Apr 20 2000 /usr/lib/locale/japanese -> ./ja/

環境変数のLANGを適当な奴に設定しな。PCKはShift_JISのこと。

ただ、sedは/usr/bin/sedじゃなくて、/usr/xpg4/bin/sedを使いな。
manのATTRIBUTESセクションのCSI(Coding System Independent)を参照。

# 環境変数はちゃんと設定出来てるんだけど、/usr/bin/sed使ってるんだろうな。
310デフォルトの名無しさん:02/05/06 14:32
>307
一応補足
nkfはShiftJis、JIS、EUCを"相互に"変換できるよ。
んで、それ以外にも色々機能もある。
一度 nkf --version を見てみると良いかも。
311名無しさん@お腹いっぱい。:02/05/06 14:35
>>309さん
ご説明ありがとうございます。
ですが一つ、上のls -dl /usr/lib/locale/ja*コマンドを行っている意味
が私には理解出来ません。私はTeraTem上で日本語を編集しているので、きっと
Shift−JISを利用していると思います。なので上の例だと/usr/lib/locale/ja_JP.PCK/
にあたると思うのですが、これを具体的にどのようにすればいいのでしょうか。
かなり初心者な質問で申し訳ありません。。。。。

ちなみに私の場合、LANG=jaです。whichでsedを引いたら/bin/sedになっていましたが
whereisで引くと/usr/bin/sed /usr/ucb/sedと、二つ帰ってきました。
>>311
TeraTermの漢字コードの設定をEUCにしよう。
[Setup]->[Terminal]

/usr/lib/locale/ja* は、いろんなコマンドで表示されるメッセージ
が入ってる。LANG=jaならEUC。

/usr/bin/sed は SystemV(Solaris2.xの標準)sed
/usr/ucb/sed は、BSD互換(Solaris1.xのときの)sed
だと思う。
313デフォルトの名無しさん:02/05/06 15:50
>>311
> ですが一つ、上のls -dl /usr/lib/locale/ja*コマンドを行っている意味
> が私には理解出来ません。

なければ、packageが足りないことが分かるから、
「あなたもやってみなさい」という意味があった。

> 私はTeraTem上で日本語を編集しているので、きっと
> Shift−JISを利用していると思います。

そうとは限らない。変換して送ることができるので。

調べてみなよ。
$ echo 'あいうえお' | nkf -e | od -c
0000000 244 242 244 244 244 246 244 250 244 252 \n
$ echo 'あいうえお' | nkf -s | od -c
0000000 202 240 202 242 202 244 202 246 202 250 \n
だから、「あいうえお」って内容のファイル作成して、od -cすれば分かる。


> なので上の例だと/usr/lib/locale/ja_JP.PCK/
> にあたると思うのですが、これを具体的にどのようにすればいいのでしょうか。

LANG=ja_JP.PCK
export LANG

だな。しかし、

> ちなみに私の場合、LANG=jaです。

で、日本語が利用できていたのなら、TeraTermはeucJPに変換して送ってたんだろう。
# /usr/bin/sed「で」利用できないのは、/usr/bin/sedがCSIじゃないから。

> whichでsedを引いたら/bin/sedになっていましたが
> whereisで引くと/usr/bin/sed /usr/ucb/sedと、二つ帰ってきました。

だったら何なのよ? CSIがEnable奴を使え、と言っただろ。
/usr/xpg4/bin/sedはあるのか、ないのか?

man sedしてみなよ。ATTRIBUTEセクションのAvailabilityのところに、
/usr/xpg4/bin/sedの入っているpackage名が書いてある。

$ pkginfo パッケージ名
あるの?
314デフォルトの名無しさん:02/05/06 15:55
>>312
> /usr/lib/locale/ja* は、いろんなコマンドで表示されるメッセージ
> が入ってる。LANG=jaならEUC。

locale情報全般。
他にもcoding system情報なんかが入ってる。shared libraryになって。
315311:02/05/06 19:04
お返事有難うございます。

以下が私の/usr/lib/localeです。

2 lrwxrwxrwx 1 root root 3 4月 24日 23:48 POSIX -> ./C
2 drwxr-xr-x 3 root bin 512 4月 24日 23:48 common
2 drwxr-xr-x 10 root bin 512 4月 24日 23:48 en_US.UTF-8
2 -rw-r--r-- 1 root bin 270 8月 21日 1999年 geo
2 drwxr-xr-x 4 root bin 512 4月 25日 00:10 iso_8859_1
2 drwxr-xr-x 8 bin bin 512 4月 25日 01:23 ja
2 drwxr-xr-x 3 bin bin 512 4月 25日 01:22 ja_JP.PCK
2 drwxr-xr-x 3 bin bin 512 4月 25日 01:22 ja_JP.UTF-8
2 lrwxrwxrwx 1 root root 4 4月 25日 00:20 ja_JP.eucJP -> ./ja
2 lrwxrwxrwx 1 root root 4 4月 25日 01:21 japanese -> ./ja
4 -rw-r--r-- 1 root bin 1848 10月 29日 1999年 lcttab

Packagesですが、Solaris環境はFull Installを行っている上にCompanion CD
でも殆ど必要なLibraryもInstallしています。それで言われている通りに以下
のコマンドを実行してみました。

$ echo 'あいうえお' | nkf -e | od -c
0000000 244 242 244 244 244 246 244 250 244 252 \n
0000013

>> ちなみに私の場合、LANG=jaです。
>で、日本語が利用できていたのなら、TeraTermはeucJPに変換して送ってたんだろう。

確かに私のTeraTermはKanji(Receive)も(Transmit)もEUCに設定されています。
なのでTeraTermからによる日本語入力や編集は可能です。

それと私の確認ミスでしたが/usr/xpg4/bin/sedコマンドは存在していました。私が$PATH
をここに通していなかったので今まで気づきませんでした。申し訳ありません。

なのでとりあえずは環境変数LANG=ja_JP.PCK、TeraTerm上ではKanji(Receive)も(Transmit)も共にEUC、
使用するsedコマンドはusr/xpg4/bin/sedで全角スペースの削除をやってみましたがやはり
出来ませんでした。

$ sed -e "s/__*//g" samplefile

こんな感じや、これに色々と手を加えたりもしたのですがうまく行きません。上のコマンドの
__←このアンダーバーは全角スペースを2つ付けた意味です。

質問続きで申し訳ありません、もう一度何かアドバイスを頂けたら幸いです。どうかよろしく
お願いします。
316デフォルトの名無しさん:02/05/06 19:45
>>315
指定しているLC_CTYPEとfileのcoding systemが合ってないずら。

> 確かに私のTeraTermはKanji(Receive)も(Transmit)もEUCに設定されています。

なら、(たぶんfileの中身もEUCに違いないので)
LANG, LC_CTYPE, LC_ALLはja, ja_JP.eucJP, japaneseのどれかだべ。
# SolarisはeucJPがdefaultなので、ja, japaneseでも可。
317311:02/05/07 01:35
大変有難うございます。皆様のご教授のおかげでやっと出来ました。
ちなみに環境は以下のようにしました。
TeraTerm
漢字Receive = EUC
漢字Transmit = EUC
Solaris上
シェル = /bin/sh
環境変数LANG = ja
環境変数LC_CTYPE = ja
環境変数LC_ALL = ja

これでバッチリ全角スペースは$ sed -e "__*//g"で消えました。
ただ一つ、これだと全角スペース『だけ』しか消えなく、所々にある
半角スペースは消えないので、パイプを使って全角スペースを消
した結果をsed -e"__*//g"(__の部分は半角スペース2個)に投げて、
クリアさせました。とりあえず結果として期待通りの物になったの
ですごく満足してます。アドバイスして頂いた皆様、本当に感謝します。

それで図々しいですが、もう一つ質問させてください。
今私の行おうとしているプログラムで、どうしても日本語文字(漢字、
平仮名、カタカナ等)をデーターのファイルから削除する必要があります。
$ cat data

1234あいうえお5678
1234カキク5678
1234東西南北5678

この様に前後の数字の間に存在する日本語文字は漢字、平仮名、カタカナ、
文字の数、全てがランダムな状態なのでsedコマンドで削除したい部分を
ピンポイントで指定して消す方法がとれません。
上のようなデーターファイルで結果を12345678とするには、何か方法が
あるのでしょうか。再度質問し申し訳ありませんが、どうか皆様アドバ
イスをください。
>>317
nkf -e data | tr -d '\200-\377'
319デフォルトの名無しさん:02/05/07 08:39
>>317
$ echo 'abcdefg十とか能とかvwxyz' | nkf -e | LC_CTYPE=ja /usr/xpg4/bin/tr -d '[:jisx0208:]'
abcdefgvwxyz

man trと/usr/lib/localedef/src/ja/localedef.srcを参照。

http://docs.sun.com/ab2/coll.651.1/SOLASNSUPPT/@Ab2PageView/354?Ab2Lang=C&Ab2Enc=iso-8859-1
あたりを読んどいた方がいいかもね。
320デフォルトの名無しさん:02/05/13 23:03
シグナルハンドラからC++ exceptionをthrowできませんか?
試してみろ
322320:02/05/13 23:09
unexpected() にたどりついて氏んだよ on debian woody, Linux-2.4
じゃあ駄目ってことだな
324320:02/05/13 23:16
そもそもシグナルハンドラのコンテキストと
gccにおける例外の実装を知らないんでなんとも言えない
んだが、なんとなくできなさそうな気がしててやっぱりできなかった

というわけで次の質問
「シグナルを捕らえて例外として投げるいい方法はないか?」

回答の予想
「longjmp()でも使っとけ」
>>324
例外出すのは良いとしてどこでtryしてcatchするの?別スレッドで無限ループ?
326320:02/05/13 23:20
やりたかったのは
tcpのread(2)とかでSIGPIPEを処理すること
だったのね

レガシーにlongjmp()でwrapper書くか
327デフォルトの名無しさん:02/05/24 15:00
XtoolkitでXIMを使いたいんですが、
イベントのプロシャージャでXmbLookupString()を使っても日本語が入ってきません。
それどころかkeysymまで入ってきません。
どうやったらIMが使えますか?
XOpenIM, XCloseIM, XSetIMValues, XGetIMValues, XDisplayOfIM, XLocaleOfIM,
XRegisterIMInstantiateCallback, XUnregisterIMInstantiateCallback

XOpenIM から調べよう。
329デフォルトの名無しさん:02/05/24 15:17
レスありがとうございます。XOpenIMなどはすでに行っており、IM/ICの設定はできています。
Xtのイベントプロシャージャを使わずに、ただのイベントループ内で
キーを取得すると、ちゃんと日本語が入ってきます。
たぶんXtが中でIMをいじってるためだと思うのですが・・
330デフォルトの名無しさん:02/05/24 15:20
キー入力があったらXtに渡さず即座に呼んでくれるようなコールバック関数が使えれば
問題は解決すると思うのですが、そういうのありませんかね。
331デフォルトの名無しさん:02/05/24 16:16
みなさんAPI集のようなものはどこで手に入れましたか?
MSDNのようなまとまったものがあるなら知りたいです。
MSDNはAPI集ではないと思われ・・・
式MSDN=APIが成り立つとき、
MS=OS及びNHK=2chが成り立つ。
>NHK=2ch
NHK=日本引きこもり協会?
>334
関西だよ
336デフォルトの名無しさん :02/05/30 21:27
課題です。

商品区分コード 商品コード 単価 販売個数 商品名

で、それぞれ数字が並んでいるんだけど、第4の項目で整列ってのは販売個数で整列って考えてもいいですか?
課題の意味が判らない場合は教官に聞く。
マジで困ってます。

lsとgrepを組み合わせて、実行可能なファイルを出力するコマンドを別名で定義する。

ls -F|grep '*$'
こんな感じでやったのですが、これをaliasを使って別名で定義することができません。
どうやったらできるのですか?
alias rf="ls -F|grep '*$'"

UNIXプログラミングと何の関係もないだろがボケがぁ
>>339

どうもありがとうございました。
ボケでいいので、もう一回だけ誰かお願いします。


dataコマンドを使うと日付時刻が出力される。
時刻だけを出力する、別名hmsを定義しなさい。

どうやって時刻だけを出力するのでしょうか?


zsh: command not found: data
だが何か?

man date して首吊って氏ね!
>>341
優しいな、君。相手してあげるなんて。
343デフォルトの名無しさん:02/06/04 13:13
Win32ベースのCとC++で書かれたソースをSolarisに移植すれ!と指示され
その違い(影響部分)をWebで調べているんですが、検索方法がまずいせいか
思った結果が得られません。
C標準関数やMFC単位で、これはそのままでOK、これは作り直しなどと判定できる
ネタを親切に乗っけてるサイトを知ってる方、教えて頂けないでしょうか?
344343:02/06/04 13:14
ageてしまいました、ゴメンナサイ
>>343
これまた無謀な。Win32依存部分(MFC含)は何もいわずに書き直せ。
346343:02/06/04 13:49
>>345
ANSI規格に則った関数については問題無いのでしょうか?
347デフォルトの名無しさん:02/06/04 14:38
現在、Jedを使用しています
そこでS-Langの勉強をしようと思うのですが、なかなか良いサイトが見つかりません
だなたか良い勉強サイトがあれば、ご教授願えませんでしょうか?

#S-Langでnavi2chもどきや、muttもどきをつくったら需要はあるんだろうか…?
#マルチポストで申し訳ない…

>>246
それは大丈夫じゃないの?コンパイラによって微妙に違うけど。
349343:02/06/05 15:42
>>345
>>348
回答ありがとう。
とりあえず調査結果を報告してこの件は一旦クローズと相成りました。
この話が再燃しないことを祈りつつ名無しにもどりまする。
350初心者:02/06/12 12:23
文字列tを入力し、その文字列をsに複写する関数を作り
プログラムを実行しなさい。for文を使いなさい。ポインタを
使いなさい。関数void strcopy(????){/* */}を用いなさい

unix初心者で全くわかりません。どなたか教えていただけないでしょうか?
>>350
C言語初心者といえ。UNIX初心者に失礼だ。
後、すれ違い。
>>350

void strcopy(const char *dest, char *src)
{
    strcpy(dest, src);
    for (;0;);
}
353352:02/06/12 12:40
destination側がconstになってるし(鬱
>>353
それよか謎の0回ループについて説明求む。
>for文を使いなさい
とあるからでは?
(;0;) ←これって顔文字に見える。
356350:02/06/12 19:51
皆さんご迷惑をおかけいたしました。申し訳ありません
内容のないレスで無駄に上げるのも超迷惑です
358木村 キタキタマシーン:02/06/12 20:08
>>355
ワラタ(;o;)
359デフォルトの名無しさん:02/06/13 20:50
solarisで
ページキャッシュのフラッシュ
パーティションのリード
は、どのようにやるのでしょうか

linuxでは
ioctl( fd, BLKFLSBUF, NULL )
read partition
ioctl( fd, BLKRRPART, NULL )
を使えば良いことはわかったのですが
solarisでは、定義されているヘッダを探しきれませんでした
360デフォルトの名無しさん:02/06/14 15:01
http://lgdc.sunsite.dk/articles/19.html
linuxでここのプログラムを参考にジョイスティックを使おうと
しているんですけど,
"/dev/js0"が開くことが出来ません。
もしかしたら、ルートでないとコンパイル開く事が出来ないのですか?
日頃winでしかプログラムしたことがないのでよく分かりません。
教えてくださいお願いします。
>>360 ルートでないとコンパイル開く事が
すいません。コンパイルは出来ます。開くことが出来ません。
>>360
/dev/js0 のパーミションは、どうなってるの? とりあえず

% ls -l /dev/js0

してみ。
>>362
ありがとうございます。パーミッションを変更すれば出来るんですね。
研究室でないと試すことが出来ないので、
今度試してみます。

364デフォルトの名無しさん:02/06/17 08:18
C言語でグラフィックを描くプログラムを勉強したい
んですが、どこかわかりやすいHPありませんか?
教えてください。
>>364
UNIX上で?
命がけ。
X Window SystemってWindowsプログラムと結構似てるからお勧め。
Windowsの10倍はめんどくさくね?
>>366
俺が1cmの入門書読んだ限りでは「こんなもんか」と。
Gtkとかになってくると知らん。
368363:02/06/17 11:52
教えてもらったコマンドを実行したんですけど、
以下のようになりました。

lrwxrwxrwx 1 root root 9 4月 28 2001 /dev/js0 -> input/js0
crw------- 1 root 3月 24 2001 /dev/input/js0

パーミッションを全て許可にしても開くことが出来ないんですけど
どうすればいいですか?
リンク先のファイルのパーミッションも変えてくれよ。
つーか、UNIXについて勉強してくれよ。
370363:02/06/17 12:08
>>369 リンク先のファイルのパーミッションも変えてくれよ。
crwxrwxrwx 1 root 3月 24 2001 /dev/input/js0
こうすればいいわけですよね。

368 のは許可する前です。
368で言ってるようにパーミッションは全て許可にしたんですけど、
それでもうまくいきません。
だから、困ってるんですけど。
371名無資産@ヘタレ部:02/06/17 12:22
>>370
カーネルがjs扱えるように構成されてなかったりして
dmesg で、カーネルの具合を眺めてみよう
372363:02/06/17 12:49
>>371
ありがとうございます。
まだ、カーネルとかを良く知らないので少し勉強して来ます。
UNIXの場合、アドレス指定で直接ポートを叩くのと/dev以下にぶら下がっているデバイスをファイルとして扱うのとではどちらが王道ですか?

ポート直接叩きのプログラムをよく見るので。
>>370
> それでもうまくいきません。
open() 失敗時のエラーコードは何?
>>373
デバイスファイル。

> ポート直接叩きのプログラムをよく見るので。
見るか?
>>375
ええ、結構。RT-Linuxのサンプルとか・・・って当たり前じゃん!
失礼しました。

そのままfopenとかすればシリアルポートのMIDIならしたりとか出来るようになると考えていいんですね?
>>376
いい。MIDIのプロトコルは知らんのでこっちとかで聞いてみ。
MIDIシーケンサー誰か作れる?
http://pc.2ch.net/tech/1005053427
>>377
どうもです。試行錯誤してみます。
>>376
MIDIメッセージをそのまま垂れ流せば音鳴らせる。
ポート切り替えとかも専用メッセージがあったはず。
>>380
MIDIメッセージはWindowsの方で少し勉強しました。
おもしろそうなので基礎研究と称して研究室で遊ぶことにしますw
382デフォルトの名無しさん:02/06/17 15:33
core ファイルを解析したいんですが
フォーマット資料を探してもなかなか見つかりません
よい文献きぼん
(ヘッダファイルのどこどこを見ろでも構いません)

最初にプロセス資源が書かれてて
+4096以降にユーザ空間のイメージが書き出されてるみたいにも
見えるんだけど…
383382:02/06/17 16:38
$ objdump -x -s core
で謎が解けました、自己解決です。
asm/user.h にもちょっとしたヒントが書いてありました。
384364:02/06/17 20:29
>365 X Window SystemってWindowsプログラムと結構似てるからお勧め。
ではX Window System上のプログラミングについてのわかりやすいHP
などありましたら、教えてください。
本も探しているのですがなかなか見つからなくて・・・

つか、ふつー、GTKとかQTとかつかうっしょ。
いまどきXLIB生は……
386デフォルトの名無しさん:02/06/17 21:28
>>384
ちみの言う「graphics」って何か言ってみそ
どんなことしたいと思ってるの?

http://sal.linet.gr.jp/F/3/index.shtml
http://sal.linet.gr.jp/F/4/index.shtml
http://sal.linet.gr.jp/F/5/index.shtml

ちみのやりたいことは、こん中にあるのかな〜。
387デフォルトの名無しさん:02/06/17 21:41
Linuxでグラフィックプログラミングするなら、Java2あたりが手軽
かも....。XやGTKだとハマりまくる「任意の色形式のフレームバッファ」
が簡単に使える(BufferedImage)からね。
Java糞重い
>>386
グラフィック関係のライブラリってこんなにあるんだ。
ちょっと感動。
390デフォルトの名無しさん:02/06/18 00:05
質問です。自分自身の実行ファイルのパスを知る方法ってありますか?
argv[0]というのはシェルから渡されるパラメータに過ぎないですよね。
削除されてもinodeは生きてると思うんですが・・・
システムによる。
たとえばprocファイルシステムを有効にしてあるLinuxなら、
/proc/self/exeをreadlink()すれば分かる。
SDLでは駄目かね?
393384:02/06/18 17:17
>386
初心者なもんで下記に書いていただいたHPの内容がわからないです(汗)
実は友達から貰ったプログラムがあって、おもしろそうだから
やってみたくなったんです。
ちょっとのっけます。こんな感じのをやってみたいです。
#include "define.h"
#include "struct.h"
#include "variable.h"
/* Function Prototype */
int main(int argc, char *argv[]);
void quit_action();
void win_size(unsigned viswid, unsigned vishei, unsigned rwid, unsigned rhei,
unsigned *wwid, unsigned *whei);
/* Resource value, Translation table */
static String fallback_resources[] =
{
"*viewport.allowHoriz: True", /* 水平方向のスクロールバー */
"*viewport.allowVert: True", /* 垂直方向のスクロールバー */
"*viewport.useBottom: True", /* 下側のスクロールバーを付ける */
"*canvas.borderWidth: 1",
/* Quit (command) */
"*quitcmd.fromHoriz: viewport", /* Quit ボタン */
"*quitcmd.label: Quit", /* ボタンのラベル */
"*quitcmd.borderWidth: 2",
NULL,
};
長い文、はっきりとしない回答で申し訳ありません。
どこか詳しいHPありましたらお願いします。
>>393
寝ろ。C言語の参考書でも抱いて。
>>390
> 削除されてもinodeは生きてると思うんですが・・・

inode が生きてても全部のディレクトリから unlink さらたらパスは存在しないでしょ。
396363:02/06/19 14:50
>>374 open() 失敗時のエラーコードは何?
-1です

>>396
おいおい……。open と errno の man page 読んでくれ。
パーミッションは 660(実行権もいるかも?) でよくて、
chgrp でファイルのグループ所有権を変更すればよいのでは
ないかと想像でいってみるテスト。
さらに、ユーザーに使用権を与えるために /etc/group を
書き換えればいいかもしれないと言い足してみる。
399363:02/06/19 22:03
>> 397,398
すいません。errno のこと知りませんでした。
親切に教えてくれて感謝です。
結果は 19
perror の結果は
「No Such Device」でした。

というか、カーネルとかに関して詳しくないので断定することは
できないのですが、371で指摘された「カーネルがjsで使えるように
構成されてない」というのが怪しいです。

UNIXには慣れていないので苦戦していますが、
現在試しているところです。
ありがとうございます。

>>391
そういえばそういうものがありましたね!とりあえずはこれを辿るか・・・

>>395
たしかにunlinkしたら実体(inode)はあってもパスは無くなりますね

fork&execで自分自身をもう一度execしようと思ったのです。
引き継ぐ情報は引数で渡せる量です。forkだけだとリソースが残って
しまうので、execでclean upしてしまおうという目論見です。
ところが自分自身のパスが分らない、というかもはや存在しないかも
しれないんですね。ううむコマッタ。
>>393
C++勉強して、Qtかgtk--やれ。
どうしてもCがいいなら、Xawやってへそ噛んで死ね。
どーしても C というなら Motif という手も……。
>>fork&execで自分自身をもう一度execしようと思ったのです。

argv[0] を起動直後のカレントディレクトリからの
相対パスとして扱えば十分だと思う。

実行中に自分を unlink するなんて、普通は無しでしょ?
/proc を使うにしても、シンボリックリンクとして見えるはずだから
もと消しちゃったらダメなんじゃ?
できるよ。

/* suicide.c */
#include <stdio.h>
#include <unistd.h>
#include <sys/param.h>

#define SELF_EXE "/proc/self/exe"

int main(int argc, char** argv)
{
  char self[MAXPATHLEN];
  int n = readlink(SELF_EXE, self, sizeof self);
  if (n < 0) {
    perror("readlink");
    return 1;
  }
  self[n] = 0;
  printf("%s = %s\n", argv[0], self);
  if (unlink(argv[0])) {
    perror(argv[0]);
  }
  else {
    execv(SELF_EXE, argv);
  }
  return 0;
}

$ make suicide
cc suicide.c -o suicide
$ ./suicide
./suicide = /tmp/suicide
./suicide = /tmp/suicide (deleted)
./suicide: No such file or directory
403 は可能・不可能の話はしてないと思われ。
/proc/$PID/exeとか/proc/$PID/fd/*は普通のsymlinkじゃないから、
元のファイルを削除してもアクセスもexecもできる。
ということをいってるんですが、>>403を読んでますか?
407デフォルトの名無しさん:02/06/20 20:52
ホームディレクトリのパスとかユーザー名とかを調べる関数が
あったと思うんだけど、どっかに一覧表があるところ無い?
>>407
man intro とか /usr/share/man/man2 とかか? たぶん探しているのは
getpwent() とか getpwnam() だと思うが。
> /proc/$PID/exeとか/proc/$PID/fd/*は普通のsymlinkじゃないから、
> 元のファイルを削除してもアクセスもexecもできる。

なるほど〜、こりゃすごいですね・・・
実行ファイルを作って、実行し、即削除すればウイルスとしてバレにくい?
410403:02/06/21 06:50
>>404
おお、できるんですね。知らなかったです。
(Linuxも /proc もよく知らない(^^;)

でもわざわざそんなことまでして Linux 依存にするメリットはないですよね。
411デフォルトの名無しさん:02/06/21 14:50
Linuxのgccのmallocって必ず0 fillされてません?
このあたりの実装ってコンパイラのバージョンに
よってかわってきたりしますか?
>>411
まぁ、それを期待しちゃいけないって凝った。
>>411
されてません。
たぶん新たに割り当てられたページが0 fillされてるのと混同してると思われ。
>>413
でないと、calloc() の立つ瀬がないもんね。
415デフォルトの名無しさん:02/06/21 19:04
こんど初めてUnixのプログラムをすることになりそうなので
そのプロトタイプづくりをMacOSX上でやろうかと考えています.
#詳しい話を聞いていないのでターゲットOSはまだ分からないのですが、
#漠然とWindows+CygwinよりはMacOSXの方が楽そうとおもって選びました

今のとこ「詳細UnixProgramming」のコードで様子をみてるんですが
なんか注意点とかありますか?
>>415
ネイティブで組みましょう
417名無しさん:02/06/21 21:57
ソケットプログラムの切断処理なんですが、
クライアント側から20000bytesのデータを
送って切断するときに
write(fd, buf, 20000);
shutdown(fd, 2);
close(fd);
exit(0);
というようにコールしているのですが、
これだとwriteしたデータを送出しきらないうちに、
クローズされてしまうことはないのでしょうか?
>>410
>でもわざわざそんなことまでして Linux 依存にするメリットはないですよね。

いえ、実現できるなら依存しようが構いません。
unix標準(?)の方法があるなら、それにしようと思ったまでです。
>>417
同期非同期
421名無しさん:02/06/21 23:54
>>418
ごめんなさい。
UNIXで考えていたものでここでも良いかと。

>>420
同期非同期とは、fcntl()のNONBLOCKINGの
ことでしょうか。
それから、write()の返り値が20000になっていれば、
同期、非同期モードに関係なくclose()
して大丈夫なのでしょうか。
>>421
> UNIXで考えていたものでここでも良いかと。

良くない。とっとと逝け勘違い小僧。
スレさえまともに選べない奴に、プログラムが書けるとは思えない
>>422,>>423
まぁまぁ、そんなきつくあたるなよ
425デフォルトの名無しさん:02/06/27 22:27
いろいろと調べたのですが,日本語を扱う際の処理方法が分かりません.
具体的には,ファイルから1文字ずつ読み込んで,それに改行コードを加
えて別のファイルに書き出したいのです.
取り敢えず,こんなプログラムを考えてみました
-------------------------------------------
for(;;)
{
ch = fgetc(fp1);
if(ch == EOF)
{
break;
}
fprintf(fp2, "%c\n", ch)
}
--------------------------------------------
といった感じです.
ここで,変数chをどのような型で宣言すれば巧くいきますでしょうか?
また,このプログラムに根本的な誤りがあるのでしょうか?

お願いいたします.
>>425
文字コード書いてないので2バイトコードの変則的な扱い方。

char a[2];

a[0] = fgetc(fp1);
a[1] = fgetc(fp1);

fprintf(fp2, "%s\n", ch)
で、NUL terminateされてないchar*を渡してSEGVと。
>>427
書いててなんか違和感あったんだよなぁ・・・w
>>425
fgetc()の戻り値はint。
430425 :02/06/27 23:34
>>426
あ,すいません
文字コードはEUCの筈です

>>429
だから,int chで宣言するんですね!
1つ賢くなりました
>>430
> だから,int chで宣言するんですね!

違う。EOFがあるから。
EOF \x1a
433名無資産@ヘタレ部:02/06/28 14:31
EOF 0x1Aなんていう寝言が聞こえるが…???
ちなみにたいていのUnix libc実装では-1のような。

>>425
マジレス
EUCに限らず、たいていの日本語コードには状態がつく
ので、1バイト単位では文字として独立していないと考えれ

単純に済ませるのなら、
if (ch >= 0x80)
{
int c2 = getc(fp1);
if (c2 != EOF)
ch = (ch << 8) | c2;
}
かのう。EUCは2バイトとは限らないので上記コードは鵜呑みにするな

UCS-2(2バイトユニコード)は、状態がないのでやや扱いやすい。
UCS-2に変換するのは面倒っちいけどな。
>>433
> UCS-2(2バイトユニコード)は、状態がないのでやや扱いやすい。
UCS-2とUTF-16の区別のつかない奴にサロゲート喰わされて落ちる罠。
435425 :02/06/28 20:57
すいません,レスを読んでいて自分の無知が恥ずかしくなりました...
どうやらC言語で私のやりたいことをする為には,スキル不足のようです

私が今やろうとしているのは,平仮名の頻出度調査です.
kakasiを使って平仮名だけにした文章をsort,uniqしたいんです
しかし,そのままではsort出来ないので1文字ずつ改行を入れようと
思いました.
何か良い代替手段はありませんでしょうか?
>>435
まず、ひらがなを半角文字で表現(エディタの置換機能などで)。
それの頻度を取る。
結果は置換した半角文字に対応したひらがなとともに出せばいい。

vmwareを作りたいのですが、どうやればいいんでしょうか?
>>437
UNIXのシステムコール全部Widows新居食。
439通りすがりのキティ:02/06/28 21:18
だれかdonutPみたいなの作って。マウスでコマンド入力できるやつ。
お前が作れとは言わないで。作れないし。
>>438
それは Cygwin だろ。UNIX つーか POSIX だが。

>>437
VMWARE は仮想 AT コンパチマシンを作ってる。
Bochs というオープンソースのものがあるので、
関連資料とソースを読むといい。
plex86というのもあったような。
>>439
マウスでコマンド入力ってなによ?
マウスジェスチャーのこと?

http://optimoz.mozdev.org/gestures/
こんなの?
443435:02/06/28 22:11
>>436

なるほど!!
こんな簡単な事に気づかなかった俺って...

ありがとう!
444通りすがりのキティ:02/06/28 23:57
>>442 そうです。
445デフォルトの名無しさん:02/07/03 02:36
galeonにすでに実装されてますた。
446デフォルトの名無しさん:02/07/03 13:32
>>436
あいうえお数えるの大変でない? kaとa。
ローマ字にこだわらなきゃいいのかな

私ならperlかなにかで1文字を1文字+改行に置き換えて
sortしてuniqすると思うけど、でもそれじゃプログラム板っぽくないね。
こんなんで。
$ruby -Ks freqj.rb hiragana.txt
require 'jcode'
freq = Hash.new(0)
while line = ARGF.gets
line.each_char{|char| freq[char] += 1}
end
freq.keys.sort!.each do |char|
print char, " -- ", freq[char], "\n"
end
448ピルゲイツ:02/07/03 16:40
Motifの良い参考書って無いですか?
本屋巡ってもQtとかGTKの参考書しか無いし・・・
>>446
unixな人たちは気づきにくいかもしれませんが
ハンカクカナというものがあるのです。

あとはアルファベット出現頻度プログラムをどっからか頂いてきて...
数行なんで作ったほうが早いかな?
450名無し:02/07/05 09:21

UNIXか、プログラム板かの過去ログで見たんですが、
所在がわからなくなってしまったので質問させてください。

csh で sh の read みたいなことをするには
どうしたらいいですか?
451デフォルトの名無しさん:02/07/05 09:36
>>450
set a=`cat < /dev/tty`

ctrl+d が必要ですが
452名無し:02/07/05 09:47

>450
さんくす
>>450
set a=$<
gtkとかいくつかあるようだけど、
LinuxでGUIやるなら何がいいですか。
GUIイランというのはなしでお願いします。
455デフォルトの名無しさん:02/07/09 01:52
Kylix
456shige:02/07/09 01:58
>>454
何が書きたい?
457デフォルトの名無しさん:02/07/09 02:06
Qt
Xlib
459デフォルトの名無しさん:02/07/09 09:56
LinuxでMIDI関係のソフト開発しようとしています。
それで、Linuxで秒未満の時間管理をする方法を調べています。
Windows APIのtimeGetTime()相当の機能が欲しいのです。

また、msオーダーでインターバルタイマを発生させる方法はありますか?
(もし、無ければポーリングでやるしかないですが)
460 :02/07/09 10:48
>>459
gettimeofday(2), clock(3), setitimer(2)
461459:02/07/09 11:36
>>460
どうもありがとう。
462デフォルトの名無しさん:02/07/11 03:22
WindowManagerの開発に付いて解説している書籍、ヴェブサイトなどをご存じ無いでしょうか?
twnなどのソースを参照するのもいいのですが、概略を掴んでおきたいので。
463デフォルトの名無しさん:02/07/11 08:17
厨質デス
System V IPC メッセージキューについてです
/*サーバ側*/
struct msgbuff {
mtype:
mtext;
}b; /*構造体テキトー*/

msgget ( msgid,............... ) /*キューゲト*/

msgrcv ( msgid,...b.mtext...... ) /*レシーブ*/
fprintf ( fp, %s, b.mtext ) /*ファイルニカキコ*/
         :
         :
この後にクライアソトに成功・失敗を伝えたいんすけど
再度b.mtextって使用可能なんすかね?
b.mtext使用してクライアソトに伝えようと思ったんすけど・・・
なんか他に(・∀・)イイ方法あるなら教えてください。

厨なんで質問の意図わかりにくいかとは思いますが
何卒オナガイシマス
>>463
基本的にキューってのは一方通行。

> 再度b.mtextって使用可能なんすかね?
> b.mtext使用してクライアソトに伝えようと思ったんすけど・・・

使用可能は可能だけど、サーバ側で書き換えたからってクライアント側には何
の関係もない。

共有メモリにするとか、クライアント側でもメッセージキューを作ってそのID
を一緒に送るとか、あるいはソケットにするとか。
今思ったんだが、b.mtextってFILE *型なのでは?
プロセスごとにファイルデスクリプタは違うわけだから
オープンしたファイルハンドルを渡しても無意味かと。
渡すならファイル名を渡すべき。
>>465
> 今思ったんだが、b.mtextってFILE *型なのでは?
なんで?

> プロセスごとにファイルデスクリプタは違うわけだから
> オープンしたファイルハンドルを渡しても無意味かと。
つーかその前にポインタが違うだろ。
467465:02/07/11 14:52
>>466
FILE型のことは見間違いっす。無視して。

>>つーかその前にポインタが違うだろ。
ということはメッセージキューを使った場合、文字列は送れないのですか?
468465:02/07/11 14:55
あ、char型配列にすればいいのか。
スマソ。
>>465
marshalingについて調べてみ。
470463:02/07/11 22:42
みなさんありがとうございます。

なんとか問題解決しました。

memsetで消しちまえばよかったんす。

>>467
strcpy (b.mtext,"(゚∀゚)アヒャ");
msgsnd ( id ,.................. )
で文字列送れますよ。
>>470
> memsetで消しちまえばよかったんす。
これでどう解決したのか小一時間(略)。
age
age
473デフォルトの名無しさん:02/07/24 10:38
コマンドfooをroot権限で実行するスクリプトを書いたのですが
#!/bin/sh
su
./foo
ではうまくいきません(suでコマンド入力待ちになってしまう)。
どうやればいいのでしょうか?
>473

SUする時に、-Cにてfooを実行するシェルを指定すればよい。

su root -c "/aho/baka.csh" てなかんじでね。
475非462:02/07/24 13:28
>>462にレスつかないなぁ…。
俺も興味あるんだけど。
476デフォルトの名無しさん:02/07/24 16:02
> 473
sudo つかえば?

> 462
X-Window プログラミング とかいう本が大昔にありませんでしたか。
fooにsetuidしたら?
478デフォルトの名無しさん:02/07/29 07:48
同じプログラムを、1つのファイルにまとめて全部ソースコード書いた
ときと、ヘッダーファイル使って複数のファイルに分けて分割コンパイル
したときと比べたら、1つのファイルにまとめた方の実行ファイル(a.out)
のサイズが小さいのです。分割して実行ファイルのサイズが増える原因
は何が考えられますかね?よろしくお願いします。
479.:02/07/29 09:24
どなたか UNIX で東風荘(ネットワーク麻雀ゲーム)のクライアントを
作って下さいませんかのう... (windowsエミュレータ ってのはなしで)
須藤
>>478
同じ文字列リテラルが(#defineなどで)各オブジェクトファイルにできてるとか。
シンボルテーブルとかが分割されてヘッダ分大きくなってるとか(システム次第)。
482478:02/07/29 13:54
>>481
ヘッダーで
#ifndef UTIL
#define UTIL
.(#define MAX 100とか、関数、クラス、
. グローバル変数(const)の宣言)
#endif
みたいにしてるんですが、これだけじゃダメなのデスカ?
シンボルテーブルについては知らないので調べてみます。
>>482
それはいわゆるインクルードガードというやつで、この話には無関係。

> .(#define MAX 100とか、関数、クラス、
#define HOGE "hogehoge"なんてのがないか?つーことだ。
>>479
プロトコル非公開の営利サービスのクライアントのクローンを作るんですか
そんな危険なことするよりフリー(ソース公開)の同種ソフトの支援でもしたほうがいいんとちゃいますか
あるデバイスが接続されているか調べるときには、それが接続されているかも
しれないデバイスファイルを open して、返り値を見るのが順当なんでしょうか。

というのも、今 Linux 上で V4L を用いてキャプチャカードからの動画像の
取り込みのプログラミングをしているのですが、現在何枚のキャプチャカードが
接続されているか調べるのに上記の方法を使っていて、もう少しスマートに
できんかな、と思ったもので。
>>485
ルーク、/procを使え
487デフォルトの名無しさん:02/07/30 16:03
自分のIPアドレスを調べるコマンドはないですか?
ifconfig
489485:02/07/31 02:22
>>486
Thanks!
/proc/video 下に接続されたデバイスについての情報が書いてある
ファイルが存在していました。

ちなみに /proc 以下を漁るのに役に立ちそうな文章があったので
貼っつけておきます(単に kernel 付属文章の日本語訳ですが(w)
ttp://www.linux.or.jp/JF/JFdocs/kernel-docs-2.2/proc.txt.html
490デフォルトの名無しさん:02/07/31 03:41
Linuxで2chブラウザがあまり無いのは、やはりWINDOWSと比べると作るのが難しいからなのでしょうか?
Delphiで書かれてる物とかもあるので、素人目では簡単にできるのでは?とか思ってしまうのですが…
navi2chはちょっと使いづらいなぁと思っているので…
491shige:02/07/31 03:48
んなこたぁない。
もともと人口が少ないのと、navi2chで満足な人間が多いだけだろ。
Kylixフリー版で2chブラウザ作って英雄になろう!
493Rina ◆tI333vNE :02/07/31 03:51
>>490
navi2chに不満があるなら作者や関連スレに, どこがどう気に入らないのか
文句をいうって手がある. フリーなんだから開発者にフィードバックしなきゃ駄目だよ.

私もnavi2ch使ってるけど, 別に不便は感じない. 機能的には
問題ないしキーバインドが気に入らないならカスタマイズすればいいし.
494デフォルトの名無しさん:02/08/04 18:08
fortranからcの関数を呼ぶにはどうしたらいいのですか?
>>494
gcc で C に落としてから、存分に呼んで下さい
>>495
f2cだろ
>>496
gcc = GNU Compiler Collection だから、その中の g77 を使えってことだろう。
その意味では>>495は間違ってはいないのかも。
でも>>496の方がえらい。
498デフォルトの名無しさん:02/08/07 22:13
>>494
Fortran compilerはどこの奴使ってるか書かないと…
499デフォルトの名無しさん:02/08/13 00:38
C/C++で、カレントディレクトリをフルパスで取得することって出来ますか?
WinのGetCurrentDirectoryみたいな関数が欲しいんですけど。
dirent?
>>499
system( "pwd");
getcwd
>500&501
thanx!
getcwdの方を使おうと思います。
503デフォルトの名無しさん:02/08/17 00:10
fork()で起動した子プロセスは、親プロセスのリソースのコピーを引き継ぐと
思っていたのは間違いですか?
子プロセス起動前にmalloc()で獲得していたメモリやfopen()していたファイルを、
子プロセス側で終了時にfree()やfclose()する必要はないのですか?

上司に「そんなことをしてはいけない」と言われました。
>>503
> fork()で起動した子プロセスは、親プロセスのリソースのコピーを引き継ぐと
> 思っていたのは間違いですか?
あってる。

> 子プロセス側で終了時にfree()やfclose()する必要はないのですか?
必要はない。プロセスが終了すれば、全部 OS の手によって後始末されるから。
505上司:02/08/17 00:27
>>503
そんなことをしてはいけない
506デフォルトの名無しさん:02/08/17 04:18
デーモンみたいにプロセスが終了しない場合は?
ちゃんとやらなくてはいけない。
508503:02/08/17 13:55
>504
>505
お答え、どうもありがとうございます。大変参考になりました。

今回のケースは、Cで作ったCGIから子プロセスを起動して、その子プロセスは
CGIが終了しても動いているものなのです。
デーモンではなく、処理が終われば戻るのですが。
509503:02/08/17 14:06
>508
すいません、間違えました。
処理が終われば、戻るのではなく、終わるのでした。
>>506
デーモンの場合も、親プロセスとの寿命の関係によっては微妙。親の方が
長生きするなら free() や close() 呼んでも意味無い可能性が高い。

とくにメモリに関しては OS の仮想記憶が copy-on-write を実装してある
場合、下手に free() すると余計な copy が発生するし。
511デフォルトの名無しさん:02/08/17 21:53
スレ違いだとは思うんですが、
UNIXと旧Macとwindowsで動くGUIアプリ作る場合って、
Javaしかないんですかね?
unixとwindowsだけならC++/Qtでいけますよね、
でもマックを含むとなると…
512shige:02/08/17 22:14
QtはMac版もあるぞ。
C/C++以外でもよければ、Perl/Tk なら Mac もある。
514デフォルトの名無しさん:02/08/17 22:19
MacOS X だけでは?
今までの9.xとかじゃ無理だよね多分
515デフォルトの名無しさん:02/08/17 22:22
>>513
macperlから使うんだよね、
ちゃんと動くかなー
…って、やってみればいいんだけど。
サンクスコ。
…Javaはアリなんだよね?
516shige:02/08/17 22:23
mac,unix,windowsで使えて、かつフリーのものならば、wxWindowsがある。
が、Windows版は日本語つかえないはず。
unix版はgtk版は使えるだろうな。
mac版で日本語が通るかは知らない。

> unix版はgtk版は使えるだろうな。

フォントのややこしさが異常

519デフォルトの名無しさん:02/08/20 23:57
あるソースをコンパイルとリンクするときに

gcc -o foo foo.c -la -lb -lc

なら通るのですが( a, b, c は適当なライブラリ名です ), 順番を変えると

gcc -o foo foo.c -lc -lb -la

undefined reference to `.....' エラーが山ほど出るのですが…。

こういうものなんでしょうか?
順番を考えるの面倒なので、前者でも後者でもエラーが出ないようにしたいのですが
良い方法はありますでしょうか?
>500
getenv()だろ
521 :02/08/21 00:19
>>519
gcc -o foo foo.c -lc -lb -la -lc -lb
>>519
そういうものです。リンクするライブラリ間に依存関係がある場合 (libc が liba を
使ってるとか) には、順序を間違えると解決できないシンボルが残ってしまう。
523519:02/08/21 00:41
そうなんですか。なかなか面倒ですね。
ウチの gcc では見た感じ末尾から先頭のほうに向かってファイルを
解決しながらシンボルを登録していくような感じでした。
これで1時間くらい悩んでしまいました。(苦笑)
>>523
gcc(というか伝統的unixのld?)は昔からこうだねえ
ダサいというかなんと言うか・・
>>524
いろいろトレードオフがあるから、仕方ないっちゃあ仕方ない。
liba,b,c をまとめて新しいdというライブラリを…
>>526
ワロタ
>>527
っつか、それじゃ解決しないだろ。オブジェクトファイルにばらして lorder かけた
上で libd 作るならともかく。
>>528
素直に再設計した方が後々楽になると思われ
2038年問題ってどうなったのん?
2037年頃までみんな忘れてます。
2000年問題のときもそうだったでしょ?
>>531
どうせ 2038 年には現場に居ないしね、俺たち。
>>532
案外昔の開発環境を知る人がいなくなって駆り出されるかもよ。
かつてのCOBOL技術者みたいに
time_tをint64_tにする方向で進んでるけど、まだ尻に火がついてないからねえ。

とりあえずプログラム書く時はtime_tがintより大きい可能性があることを念頭に
置いとけばいいんじゃないかな。
libc全部書き換え…になるのか?
536デフォルトの名無しさん:02/08/26 01:45
UNIX系OSでのプログラミングで、みなさんは使いたい関数ってどうやって探してるんでしょうか?
・・・まさか自分で全て実装してるなんてこと・・・ないですよね?
man -k、それでもダメならgrep
538536:02/08/26 02:11
>>536
使いたい関数名がわかってる場合はそれで良いんでしょうが、
何となく「こんな機能の関数ないかな〜?」って時はどうするんですか?
539デフォルトの名無しさん:02/08/26 02:15
-kである程度出てくるから、そのmanのSEE ALSOを見る。

# ちなみに俺は学生の頃SunOSのmanual全巻を読破した。あれはいいぞ。
Cならシステムコール一覧表を用意しておけ

C++ならSTL一覧表か関連URIとか

JavaならSunのSDKドキュメント
http://java.sun.com/j2se/1.4/ja/docs/ja/index.html
541デフォルトの名無しさん:02/08/26 03:11
くだらない質問なんですが、
.aファイルって何ですか?
>>538経験を積むと臭いでわかる。
>>542
あぁ、それっぽい名前適当に入れたらビンゴだったりするね。
>>541
拡張子辞典(http://www.jisyo.com/viewer/)より、
「アセンブラ言語のソースファイル」だそうだ。

漏れの知っているのとは違うけどな。
545むけ:02/08/30 01:14
>>540
あふぉ。
546  :02/08/30 13:29
UNIXでGUIプログラミングするなら何がおすすめですか?
できるだけ簡単にウィンドウ出せるやつが希望です。
>>546
Qt か GTK+
>>546
おもしろそうなのは Qt。
MFC みたいなのは Gtk。
簡単そうなのは Kylix。

さて、最後に笑うのは?
>>548
窓を出すだけで良いなら Tcl/Tk が最も楽だとは思うが。ちょっと手の込んだ
プログラムを書こうとすると Tcl っつーのに嫌気がさすけど(w
>>549
Tcl/Tk で窓だすのってどんな感じ?
Athena はこんな感じ... widget が無いと窓が出ない?


#include <stdio.h>
#include <stdlib.h>
#include <X11/Shell.h>
#include <X11/Xaw/Label.h>
#include <X11/Xaw/Form.h>


Widget main_wind;

int main(int argc, char **argv)
{
XtAppContext app_context;
Widget toplevel;
Widget label1;

toplevel = XtAppInitialize(&app_context, "XSample", NULL, 0, &argc, argv, NULL, 0, 0);
XtVaSetValues(toplevel, XtNtitle, "サンプル", NULL);
main_wind = XtVaCreateManagedWidget("main_wind", formWidgetClass, toplevel, NULL);

label1 = XtVaCreateManagedWidget("label1", labelWidgetClass, main_wind, NULL);

XtRealizeWidget(toplevel);
XtAppMainLoop(app_context);
return 0;
}
>>550
google 様のお告げによると、Hello World はこんな感じだそーだ。

#!/usr/local/bin/wish
button .hello -text "Hello, World!" -command { exit }
pack .hello
>>551
Tcl って全く知らんのだけど、これって
% wish hoge
でいいの?

% wish
で出て来る窓ってなんだろ?
ググレってか? (w
553777:02/08/30 17:45
>>550
そんなにややこしいんだったらMFC覚えたほうがましでは・・
C++知ってればかなり楽だと思うけど←MFC
554デフォルトの名無しさん:02/08/30 18:08
>>546

Java2
555デフォルトの名無しさん:02/08/30 18:18
>>553
元の質問の >>546 は *UNIX* でって言っているから、MFCはダメだろう。

>>546
FOXとかFLTKとかいうのもあるらしいが俺はGUIプログラムしたことないから
どんなもんか知らん。
Qt
Gtk
Kylix
この中でCかC++使えるのはどれ?
やっぱKylixはO-Pascalでしょ?
>>555
Tk を使うヤツだと

- Schme + Tk の STk (snow)
- Perl/Tk
- Ruby/Tk

なんかもあるやね。あとは smalltalk 系で Squeak とか。
>>556
google にはお伺い立てましたか?
>>553
MFC は楽じゃぁないよ。

>>556
Kylix 以外は C++
Qt が直感的で分かりやすいと思う、が人気はどうかな?
560shige:02/08/30 18:28
>>556
Qt -- C++
Gtk -- Eiffel,C,C++,Ruby,Gtk.Python,Scheme,C# etc...
Kylix -- O-Pascal,C++(>kylix3)
561559:02/08/30 18:30
>>559
GTK-- を使わないと C++ 出来ないか? (?
562shige:02/08/30 18:35
もちろんC++はGtk--の意だ。
schemeはguile-gtkみたいに。
563棄教者 ◆witdLTi2 :02/09/06 18:01
Visual C++ @Windows(2000/XP/Me) と gcc3.X @UNIX (Debian/GNU Linux) の双方で動く
プログラムを書いています。
カレントディレクトリを取得したいのですが、
MSDN ライブラリ Visual Studio には getcwd でなく _getcwd が書かれています。
google で getcwd POSIX ANSI で探すとヒットしまくりです。
ちなみに VC で getcwd (アンダーバーがついていない) が動きました。

ボクは getcwd と _getcwd のどちらを使うといいでしょう。
>>563
getcwd() で良いんじゃないの?

VC だと ANSI 標準の関数と Win32 API は _ なしの名前が、ANSI 非標準の関数は
_ つきの名前が標準的に使われている。ただ、それだと UNIX 系のプログラムを移植
するときに面倒なんで、OLDNAMES.LIB をリンクすることで _ なしの名前でも呼べる
ようになる。
565デフォルトの名無しさん:02/09/17 15:42
質問です。

FreeBSD4.6.2 にて、MD5Init() や MD5Update() 等を使用するプログラムを作りました。
これを cygwin でも使いたいと思ったのですが、MD5〜() のリンクが上手く逝きません。

プログラムのソースは1つなので、g++ にリンクもさせています。
-lmd5 を指定しています。
cygwin でコンパイルする時には、
”openssl/md5.h よりも先に openssl/e_os.h をインクルードする”で間違っていませんか?
根拠は、objdump による /usr/lib/libmd5.a のシンボルの出力結果に _MD5Init 等がある事です。

cygwin で動く libmd5.〜 を使うアプリケーションの名前でも構いません、
何方かご教授をお願いします。
>>565
g++でcompileしてるの?
ちゃんとextern "C"されてる?
http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html
>>565
エラーメッセージを Copy & Paste しようよ。
568565:02/09/18 07:24
レスを頂いたのに、返答が遅れて申し訳御座いません。

>>266
/usr/include/openssl/md5.h では、__cplusplus が定義されている時は、
MD5〜() の extern が extern "C"{ から } で挟まれているのと、
呼び出し個所のアセンブラの call のシンボルには、
引数のアレは付いていなかったので、その問題ではないと思っています。

>>567
失礼致しました。。。

/cygdrive/f/tmp/ccliEcte.o(.text+0x261):crackseed.cpp: undefined reference to `MD5Init'
/cygdrive/f/tmp/ccliEcte.o(.text+0x270):crackseed.cpp: undefined reference to `MD5Update'
/cygdrive/f/tmp/ccliEcte.o(.text+0x285):crackseed.cpp: undefined reference to `MD5Final'
/cygdrive/f/tmp/ccliEcte.o(.text+0x41e):crackseed.cpp: undefined reference to `MD5Init'
/cygdrive/f/tmp/ccliEcte.o(.text+0x435):crackseed.cpp: undefined reference to `MD5Update'
/cygdrive/f/tmp/ccliEcte.o(.text+0x44a):crackseed.cpp: undefined reference to `MD5Final'
collect2: ld returned 1 exit status
最新のソースの冒頭は次の様になっています。
#define NO_MD5
#include <openssl/e_os.h>
#undef NO_MD5
#include <openssl/md5.h>
こうしないと、md5.h の MD5_Init が MD5Init にならないからです。
/lib/libmd5.a の中は MD5_Init ではなく MD5Init なので、こうしました。
しかし、色々と調べる内に NO_MD5 は、文字通り No MD5 だと言う事が分かりました。
レスを頂いたのに、今頃になって申し訳ないのですが、
どうも僕は cygwin での MD5〜() の使い方を勘違いしている様な気がします。

cygwin でも動く、/lib/libmd5.a 等を使用する、良いサンプルがあれば良いのですが、
ぐぐっても漠然とし過ぎていて、僕の知識では絞り込めませんでした。
端的なヒントでも、良いサンプルと成り得る tar ball のファイル名だけ構いません、
宜しくお願いします。
>>569
> こうしないと、md5.h の MD5_Init が MD5Init にならないからです。
> /lib/libmd5.a の中は MD5_Init ではなく MD5Init なので、こうしました。

つーか、library archiveとheaderは同じpackage由来のものを組み合わせよ。
crackseed.cppは、compile時にもwarningあるんじゃねーか?
関数の暗黙の型宣言とか。(しかしなんて名前のファイルだ…)
>>570
>つーか、library archiveとheaderは同じpackage由来のものを組み合わせよ。
/usr/include/openssl/ ですから OpenSSL から探せそうですね。
その線で追って見ます。

>crackseed.cppは、compile時にもwarningあるんじゃねーか?
>関数の暗黙の型宣言とか。(しかしなんて名前のファイルだ…)
いえ、warning は全て潰しました。
暗黙の型宣言の方は、warning ではなく error になるので、色々と小細工していました。

慌ててたのでファイル名とかを伏せ忘れますた。鬱。。。
572565:02/09/18 09:22
ハイ、一発で見つかりました。。。
/usr/include/openssl/md5.h の MD5_Init() とかは /usr/lib/libssl.a にあったんですね。。。
一方、/usr/lib/libmd5.a は w3c-libwww-devel の物で、
FreeBSD の libmd.* に相当する様な物ではなかったんですね。

/usr/lib/libmd5.a を見て、cygwin でも MD5Init() が使えると思い込んだのが原因でした。。。

>>566様、>>567様、そして特に>>570様、おかげさまで MD5_〜() で先に進めそうです。
ありがとう御座いました。
573566=570:02/09/18 15:39
>>571
> 暗黙の型宣言の方は、warning ではなく error になるので、

ああ、C++だからerrorか…

> 色々と小細工していました。

それが混乱の原因。Compilerを信ぜよ。
けど、md5(3ssl)には-lsslって書いてないね。混乱納得。
574565:02/09/18 17:39
>>573
>それが混乱の原因。Compilerを信ぜよ。
はい、Compiler だけではなく、ヘッダも信じる様にします。

お蔭様で [ ほげほげ ] 出来る様になりました。
ありがとう御座いました。
575565:02/09/18 19:43
沢山書いてすみません、訂正です。。。

_MD5_Init() 等を外部に公開しているのは、libssl.a ではなく、libcrypto.a の方でした。
さっきまで OpenSSL のライブラリを全部(-lssl -lcrypto の2つ)指定していたのと、
objdump -t /lib/libssl.a で _MD5_〜 を見つけて、こっちだと思ったのが原因です。。。

厨丸出し。。。鬱出汁脳。。。
576デフォルトの名無しさん:02/09/24 07:52
gtkで打ったキーが描画されると言うプログラムを書こうと挑戦してみましたが
上手くイベントが起きてくれません。(key_*_eventが起きない)
int main(int ac, char **av) {
GtkWidget *window, *draw, *box;

  gtk_init(&ac, &av);
  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_signal_connect(GTK_OBJECT(window), "destroy",
      GTK_SIGNAL_FUNC(gtk_exit), NULL);
  gtk_container_border_width(GTK_CONTAINER(window), 100);
  
  box = gtk_event_box_new();
  gtk_container_add(GTK_CONTAINER(window), box);
  gtk_widget_show(box);

  draw = gtk_drawing_area_new();
  gtk_widget_set_events(draw,
    gtk_widget_set_events(draw,GDK_EXPOSURE_MASK|GDK_KEY_PRESS_MASK|GDK_KEY_RELEASE_MASK);
  gtk_drawing_area_size(GTK_DRAWING_AREA(draw), 100, 100);
  gtk_container_add(GTK_CONTAINER(box), draw);
  gtk_widget_show(draw);
  gtk_signal_connect(GTK_OBJECT(draw), "expose_event",(GtkSignalFunc)expose_event, NULL);
  gtk_signal_connect(GTK_OBJECT(draw), "configure_event",(GtkSignalFunc)configure_event, NULL);
  gtk_signal_connect(GTK_OBJECT(draw), "key_press_event",(GtkSignalFunc)key_press_event, NULL);
  gtk_signal_connect(GTK_OBJECT(draw), "key_release_event",(GtkSignalFunc)key_release_event, NULL);

  gtk_widget_show(window);
  gtk_main();
}
577576:02/09/24 07:58
gtkのサンプルのscribble-simple.cではbutton_press_eventはちゃんと起きてるんで
すがkey_press_eventシグナルをdrawing_areaでは起こせないんでしようか?
(実際にコードを追加してみましたが起こっていないようです)
578デフォルトの名無しさん:02/09/24 08:28
と思ってたら別の方法でできた…。
key_press_eventはgtk_window_newで作られるウィジェットではちゃんと発行される
ので
draw_areaを大域変数にしてやってkey_press_eventが発行された時にkey_press_event
コールバックの中でdraw_stringしてみたらでけた。
579デフォルトの名無しさん:02/10/03 13:22
cygwinのgccでビルドエラーも出ていないのに
バイナリができません。cygwin\以下を全て削除して
再インストールしても駄目でした。何がいけないのでしょう?
ちょっと前のバージョンではできていました。

bash-2.05b$ cat hello.c
main(){puts("hello.c");}
bash-2.05b$ gcc hello.c <- エラー無し
bash-2.05b$ ls
hello.c  <-a.exeができていない
bash-2.05b$
>>579
とりあえず gcc -v で、実際に何が起きてるかチェック。
581デフォルトの名無しさん:02/10/11 17:03
m4の4ってなんすか?
582566=570:02/10/11 21:43
Version番号です。

UNIX Programmer's Supplementary Documents Volume I, 17. M4より

The M4 macro processor is an extension of a macro processor called M3
which was written by D. M. Ritchie for the AP-3 minicomputer; M3 was
in turn based on a macro processor implemented for [1]. Readers
unfamiliar with the basic ideas of macro processing may wish to read
some of the discussion there.

M4 is a suitable front end for Ratfor and C, and has also been used
successfully with Cobol. Besides the straightforward replacement of
one string of text by another, it provides macros with arguments,
conditional macro expansion, arithmetic, file manipulation, and some
specialized string processing functions.

[1] B. W. Kernighan and P. J. Plauger, Software Tools,
Addison-Wesley, Inc., 1976.

ベル研とバークレイ校の人たちが書いた
これらのDocument群はめちゃくちゃ質が高くてお勧めです。
583581:02/10/11 22:40
>>582
ありがとう!
584デフォルトの名無しさん:02/10/13 12:45
struct sockaddr_in についてですが、
ネットで調べると、sockaddr_in構造体の中に
sin_familyメンバが存在するようですが、
netinet/in.hを見てみても、そういう記述が無いのですが、
どこに書いてあるんでしょうか?
OS依存じゃないかなあ・・・
/usr/includeディレクトリ以下をgrepしてみれば?
586デフォルトの名無しさん:02/10/13 13:33
>>584
Linuxなの?
__SOCKADDR_COMMON (sin_); はあるでしょ?
__SOCKADDR_COMMON()は、/usr/include/bits/sockaddr.hに。

このマクロはあんまり意義を感じないけど、
field名がfamilyそれぞれで違うPOSIXもどうかね…
587デフォルトの名無しさん :02/10/17 11:45
LinuxとSolarisでCOMポートからデータを送出したいのですが、
C言語でそれをするにはどのようにすれば良いのでしょうか?
588デフォルトの名無しさん:02/10/17 12:04
ドライバ書く
/dev/ttyS0 に write()
590デフォルトの名無しさん:02/10/17 12:10
>>587
Linuxについては、JFを見れば?
>>588
辛いです(w

>>589
/dev/ttyS0について調べたらなんとなく見えてきました。ありがとうございます。

>>590
見てみます。
592デフォルトの名無しさん :02/10/17 14:52
シェルスクリプトをCのソース上からコールするにはどうすればいいんですか?
tmpfileを使ったテクニックとして

FILE* fp = tmpfile();
int fd = fileno();
int mfd = dup(fd);

fclose(fp);
close(fd);

// 以降mfdを使い回す。

こんな方法は有りでしょうか?(エラーチェックとかはおいといて…)
GNU C++ では、ちゃんと動いているように見えるのですが大丈夫なの?
>>594
動作自体には問題無いだろうけど、何がしたいの?
596デフォルトの名無しさん:02/10/17 15:51
サブディレクトリ以下の全ての*.cファイルの中の
"foo"を含む全ての行をgrepするにはどうすればいいですか?
grep foo *.c
598596:02/10/17 15:54
↑これをプログラムでやりたいのではなく
コマンドラインで実行したいです。
おっと、サブディレクトリね。
find 使うか grep foo */*.cでも試してみたら?
600596:02/10/17 16:10
findってファイルの中身まで調べられますか?
goaround grep foo *.c
のような各ディレクトリを巡回する
コマンドがあればいいんですが...
601デフォルトの名無しさん:02/10/17 16:11
find ./ -name '*.c' | xargs grep foo
602デフォルトの名無しさん:02/10/17 16:13
grep foo `find ./ -name '*.c'`
>>600
man find
ところでお前らスレ違い。
シェルはプログラミングとは違うだろ?
>>596 関数を探すのによく使うなぁ...
grep foo `find . -name '*.c'`
% find . -name \*.c -exec grep foo {} \;
>>601-602 とか zsh% grep foo **/*.c は展開してから grep なので *.c が多いと無理

>>604 むしろ板違い?
607デフォルトの名無しさん:02/10/17 17:49
>>604
シェルプログラミング って言いませんか?
そんな本も出てるけど
608デフォルトの名無しさん:02/10/17 17:53
>>595
何がしたいのかっつ〜と…

class tmpfilebuf : public filebuf
{
public:
tmpfilebuf()
{
FILE* fp = tmpfile();
int fd = fileno();
int mfd = dup(fd);

::fclose(fp);
::close(fd);

this->attach(mfd);
}

tmpfilebuf(const tmpfilebuf& src)
{
int mfd = dup(src.fd());
this->attach(mfd);
}

virtual ~tmpfilebuf()
{
::close(this->fd());
}
};

みたいな?
609608:02/10/17 18:00
インデントが切れてました失礼…

class tmpfilebuf : public filebuf
{
 public:
  tmpfilebuf()
  {
    FILE* fp = tmpfile();
    int fd = fileno();
    int mfd = dup(fd);

    ::fclose(fp);
    ::close(fd); // これは不要かもしれない…

    this->attach(mfd);
  }

  tmpfilebuf(const tmpfilebuf& src)
  {
    int mfd = dup(src.fd());
    this->attach(mfd);
  }

  virtual ~tmpfilebuf()
  {
    ::close(this->fd());
  }
};

>>607
この板で「UNIXプログラミング」っつったらCとかC++使ってUnix系に依存した
プログラム書く事じゃねーの?スレの雰囲気読めば分かると思うが…。
シェルスクリプトはUNIX板にスレがあるからそっちでやってくださいな。

ていうか、findとgrep組み合わした程度でシェルスクリプトと言える程のもんか?
それくらいの使い方、日常で使ってるじゃん。パイプとかと変わらんし。

ま、何にせよ板違い。
>>610
お前はsystem()禁止!!
始めまして。

標準入力にselectをしたいのですが、うまく行きません。やりたいコトは、
 ユーザに入力されたらソケットに
ソケットに入力されたら標準出力に
データを送りたいのです。で、ユーザの入力をselectで知ることはできるかと思ったんですが…。
ネットワークスレがあるよ
>>612
どうやってどうなったのか書いてくれよう・・・
0を普通にselectできるよお
616612:02/10/18 04:10
>>613
すみません。けど、問題は「標準入力にselectできない」だったので、
ネットワークスレの方ではないと思ってこっちにしますた。

>>614
あ、ソースですか?気が利かなくてすみません。

>>615
ありがとうございます。自分の環境でもゴニョゴニョやってみました。
で、重大な間違いに気が付きました。
……俺、stdinじゃなくてstdoutにselectしてたんでつ……そりゃできねぇよ。

ごめんなさい、逝ってきます。
>>609
>>594でも問題ないが、mkstemp(3)を使えばより簡単。
準拠
BSD 4.3, POSIX 1003.1-2001
ポカーン
>>610
それじゃってんで、「UNIXシェルプログラミング質問スレ」ってスレ立てて、「UNIXプログラミングでやりゃ良いだろっ」て言われてしまうのに100カノッサ♪
620609:02/10/18 10:29
>>594
それ使うとファイルを消すタイミングを自前でやらないといけないから面倒なんですよねぇ〜。

dupするたびにカウントアップして…

それぐらい、やれって?(汗;
>>620
OSがやってくれるんだから自前でやる必要ないじゃん。
622620:02/10/18 12:21
失敬!
>594
もとい
>617
でした。
>>619
UNIX板でもシェルスクリプトは基本的にくだ質扱いだよ。
あれをプログラミングとかいうならバッチファイルも
プログラミングなの?そうじゃないよね。
程度の差はあれど
シェルスクリプトもワンライナーもプログラミングだと思うが
HTMLだってWebアプリケーションとかいう。
626624:02/10/18 16:04
ただのHTMLを人力で書くのをプログラミングというのには同意しかねる
>>624
激シク同意
>>609
どうでもいいが、fclose()したあとでclose()はいらんだろ。
あとfileno()の引数忘れてるぞ。
>>611
execじゃないのか?systemは使ってないだろう…。

>>625
HTMLだけでWebアプリって言うのか?CGIやPHPと組み合わせてWebアプリなんじゃ…。

少なくとも、シェルスクリプトはこっちではない気がするが。
プログラムの中で、CSVファイルみたいなテキストファイルを開けて、
ごにょごにょするときって、 system()とか、popen() 使って、テキストファイルから
必要な部分を切り出す。ってのをよくやっちゃいます。

だって、めんどくさいんだもん。

>>630
結局はすべての処理をawkやsedで書いた方が速いという罠?
632630:02/10/20 16:30
いや、そこまでは言わないけど、明らかにシェルスクリプト(sed,awk,perl......)の方が
早く作れる部分はそっちに任せてスピードが必要な部分とか、きっちり作りこまなければいけない
部分は、Cなり、C++なりのコンパイラを使う。
んで、スクリプトとのI/Oに、system() やら、popen() を使うっていうスタイルも
UNIXらしいといえば、UNIXらしいとおもいまふ。

漏れ楽したいだけかも。
HSP は屑!
>>633
HSP for UNIX作ってからいえ(藁。
>>634
それだ!

ナイスアイディアです。
今年のソフトウェア大賞はいただきだな。
636デフォルトの名無しさん:02/10/24 14:40
C言語ならアタシに聞きなさい<36>からこちらに誘導を受けたので、質問させてください。

プロセスの使用メモリ量を調べたいのだが、
int getrusage(int who, struct rusage *usage);
ってものの、rusage構造体のどのメンバーを
調べればよいか知っている方いませんか?
manみても、よくわからんし、
ru_maxrssかなぁなんて思っていたのだが、机上計算と違う値を返すし。
OSとバージョンぐらいは書いたほうが・・・
man getrusage
>>635
HSPスレでは怖くて聞けんのでちょっと教えてくれ。
あそこでBNFといってるのはBackus-Naur Form以外の何かなのか?
>>636
机上計算をどうやったのか
2.4かーねるのコンパイルは
gcc3以上じゃないとだめですか?
>>641
そんなことはない。
>>641
$ gcc -v
Reading specs from /usr/lib/gcc-lib/i586-redhat-linux/2.95.3/specs
gcc version 2.95.3 20010315 (release)
$ uname -sr
Linux 2.4.20-pre11

ですがなにか?
ifconfig
645デフォルトの名無しさん:02/11/02 12:58
zlibを使っています。
ヘッダーを読み込んでストリーム展開しているのですが、
展開前から展開後のファイルサイズを知る術はありませんでしょうか。
gzipファイルから直接読んでいるわけではないので
gzseekでファイルの終端にもっていってgztellする手も使えずにいます。

gzipファイルのヘッダーは、随分前からちょくちょく調べていたのですが、
どうにも要領が悪いみたいで
しっかりした情報を得られずきちんと把握出来ていません。
ヘッダーのサイズ分読み飛ばしだとかの必要最低限のものしか見付からなくて…。
もしもヘッダーを詳しく解説しているページがありましたら
教えていただけると幸いです。

スレ違いでごめんなさい。
もしもっと適切なスレがありましたら、よろしければ教えてください。
>>645
man zlib すると参考資料へのポインタがいくつか出てくるよ。
RFC1950-1952にgzipのフォーマットが載ってる、とのこと。
647645:02/11/02 15:50
>>646
おおー! 載ってました!
返事が遅れてごめんなさい。
ありがとうございます!
648デフォルトの名無しさん:02/11/02 17:52
Windowsで使用しているINIファイルをUNIXでも使用したいんですけど
GetPrivateProfileみたいなAPIってありませんか?
gnome-config
KConfig
自分で書く
grep foo *.c
651デフォルトの名無しさん:02/11/05 22:01
rubyist@カラアゲうまうま ありがとうございました。
色々調べたのですが、Win/Unixを共通のコードにしよ
うと思い、全部自分で書くことにしました。


age
653デフォルトの名無しさん:02/11/28 11:04
ホームディレクトリってなんでしょうか?
winの場合
cd %HOME% がホームディレクトリ
unixの場合
ログイン後にpwdした結果がホームディレクトリ
>>653
ありがとう

各メンバーというか,ユーザーに割り当てられた先頭のフォルダという事ですね?
winにもあったのか
>>655
Win NTだと%HOMEDRIVE%%HOMEPATH%ってのがデフォルトで設定される。
9xだと…My Documentsが一番近いのかなぁ。
657デフォルトの名無しさん:02/12/07 03:25
学校の課題で、見本を丸写ししてプログラムを実行する課題があるのですが、
set datetoday=`date`
echo "The date is $datetoday."
という部分で失敗します。
dateの変数が表示されないのですが、↑は間違っていますか?
>>657
setじゃないねぇ。見本なのにsetなのかよ…。
>>657
csh/tcsh ならあってる。sh/bash/zsh だと set 要らない。

http://x68000.startshop.co.jp/~68user/unix/shell-variable.html
660657:02/12/07 14:07
>>658さん
>>659さん
レスありがとうございました。
プログラム全体を見たところcshのようですが、学校のサーバーが定期メンテ中で接続できないので
まだ何も確認してません。
↓に見本のコピペを張りますので、おかしなところを教えて欲しいです。

661657:02/12/07 14:09
example2スクリプト次のスクリプトを作成し、実行する。
#!/bin/csh
#
# Example 2
#
# More on echo. (echoのさまざまな使用例)
#
echo “You can also use quotation marks.”
# Note the space after the quotation mark and before second.
# (引用符とsecondの間のスペースに注意)
echo –n “first message”
echo “ second message”
# Use a command with echo. (echoの引数の中でコマンドを使用)
echo “The current directory is `pwd`.”
# Use a variable. (変数を使用)
set variable1=”Yow, are we having fun yet?”
echo “The variable is $variable1.”
# Set a variable to a command output (コマンドの出力に変数を設定)
set datetoday=`date`
echo “The date is $datetoday.”

です。多分[Yow]は[You]かと…(汗)
お願いします。
>>661
記号が変。
>>662さん
“”の事ですか?
実際はTera Term上で手打ち入力したので大丈夫だと思うのですが、
見本はWordファイルでした。
教師は「コピペじゃ動かないから」
と嬉しそうでしたよ・・・。
664657:02/12/07 15:06
↑663=657です
>>663
echo -nの-も実体参照になってる。
>661はWordから貼ったのか? 自分で打ったやつを貼れよ。
じゃないとタイプミスとかあっても分かんないだろ。
666657:02/12/07 15:22
>>665
すみません。前述の通り、学校のサーバーにアクセスできない状況なので
自分のファイルにアクセスできません。
アクセス出来次第そうさせていただくつもりですが、
>>658-659さんあたりのsetがどうのとかがわからないので教えていただけたらな、と・・・
>>666
少なくとも、>657の二行をファイルに落してcshに喰わせた限りじゃ、正しく
動く。たぶん変数名を打ち間違ってるとかじゃないの。
668657:02/12/07 15:37
>>665さん
すみません、「さん」わすれてました

>>667さん
そうですか。
今朝4時まで色々試して
set datetoday=`date`
echo "The date is $datetoday."
だけのファイルを実行したりしましたが、結果は
The date is .
だったと思います。後でもう一度試してみます。
うちは sh -> bash, csh -> tcsh なんで csh では試せないけど、
bash, tcsh, zsh で問題なく動いたよ。

$ set datetoday=`date`

した後で、

$ echo $datetoday
$ echo ${datetoday}
$ echo "$datetoday"
$ echo "${datetoday}"

してみてもダメって事だよね?

問題がありそうな時は、打ち間違いを疑うべし。
手打しないでコピペするのは基本。と、偉そうに逝っとく。
670657:02/12/07 17:57
>>669さん
[$ set]なんですか!?
授業担当の教師がクソで、プログラム文の解説を一切していないので
669さんの書いていただいたものの意味的な違いもわからないです・・・。
まさかとは思っていたのですが、どうも今日明日サーバーが働いてくれない
ようですので、接続でき次第試させていただきます。
>>668
プロンプト`$'系は
export datetoday=`date` か, そのまま datetoday=`date`
>>670
その程度のシェルスクリプトくらいならcygwinでも充分試せるから、それで試してみるというのもあり。
つーか課題でcshって当たりで既にクソ。
>>670
あ、ごめん '$' じゃなくて '>' か。プロンプトの事ね。
csh 系使ってないんでこんがらがっちゃった。

> set datetoday=`date`

した後で、

> echo $datetoday
> echo ${datetoday}
> echo "$datetoday"
> echo "${datetoday}"

プロンプトが > って出てくるでしょ? あれのこと。
入力する必要は無いです。で、${foo} ってのは変数名の
非省略形だよ。$foo と ${foo} は同じ意味です。

最初のうちは上手くいかなかったら打ち間違い、パスが
通っているか、man にどう書いてあるかを確認すべし。
と、また偉そうに書いてしまった。
674657:02/12/07 18:30
>>671さん >>672さん >>673さん
ありがとうございます。
恥ずかしいんですけど、これでも大学工学部の必修授業です・・・。

今cygwinを試すためDLしてます。88%で5分とまってますけど。
>>672
BSD 使いなんじゃない? bash? あんなモン認めん! みたいな。
zsh? そんなファンシーなもの使えるか! みたいな。

>>670
シェルスクリプトの勉強するなら B Shell 系使った方が良いよ。
sh とか bash とか zsh ね。
>>675
BSDもいいんだけど、なんでいまだにcshなんぞに拘るのかが分からんよ。
実のところ一月くらいしか使ったことないけど、昔のSunOSで。
677657:02/12/07 18:54
早速cygwinで実行してみました。以下実行文のコピペです。
1.
$ cat > a
set datetoday=`date`
echo $datetoday →→表示されず
同様に
echo ${datetoday}
echo "$datetoday"
echo "${datetoday}"     →→表示されず

2.
$ cat > a
datetoday=`date`
echo "$datetoday" →→成功

でした。もしかしたら学校のシェルも"set"要らないのかもしれないですね。

>>675さん
多分その教師は電気回路専門でUNIXはそんなにできないと思います。
生徒の質問に答えるのはアシスタントの学生ですし。
>>677
>>661の最初の行をいれてみろ。ただしcygwinはtcshしかないので
#!/bin/tcsh

その二行だけだと/bin/shが動く。
もしくはこうしる。
$ cat > a
set datetoday=`date`
echo $datetoday
$ tcsh a
679657:02/12/07 19:20
>>678さん
実行してみましたが
$ tcsh a
bash: tcsh: command not found
と出てしまいました。
>>679
which tcsh
whereis tcsh
ls -l /bin/tcsh
echo $PATH
>>680
tcshインストールしてないんだろ。
してればcygwinディレクトリの下の/etc/setupにtcsh.lst.gzってファイルがあるはず。
>>679
mld とか dos minix も良いよ。
と言ってみたかっただけです。
683デフォルトの名無しさん:02/12/11 01:02
pipe→fork→fdopen
    ↓
   dup2→exec
こんな感じで、子プロセスをパイプにつないでる実装を、
forkをやめてspawn使う実装に置き換えることはできるのでしょうか?
>>683
spawnもfork使ってんだけど
685683:02/12/11 03:21
>>684
え・・・?それじゃぁspawnって意味無いんじゃ・・・。
>>685
つーかそもそも、UNIXで新しくプロセスを作る手段てのはfork以外には基本的
に存在しないわけよ。spawnもfork&execのラッパー。ただしパイプを操作した
りなんだりってのを全部インターフェースに入れちゃうとごちゃごちゃしてし
まうんで、そこまでは提供しませんてこと。
Windowsを知ってるなら、CreateProcess()のパラメータの山を考えてみればい
い。
687683:02/12/11 10:01
>>686
spawn使ったら効率があがるかもしれないのは、cygwinに限った話みたいですね。
うぅ、>683のやつで正解なのか・・・。
ちょっと、気味が悪い。慣れが必要ってことか。
>>687
あぁ、cygwinの話か。じゃプロセス周りはかなり違う。
でもやはりspawnにはstdioを繋ぎかえるようなインターフェースはない。
理由は>686。

> うぅ、>683のやつで正解なのか・・・。
> ちょっと、気味が悪い。慣れが必要ってことか。
cygwinは>683とかが動くようにするためのものだし。cygwinと普通のUNIXで動
くようにしたいなら、このへんは#ifdefかファイルで分けるしかないだろうな。
689デフォルトの名無しさん:02/12/11 11:19
C++でexecvするとき、argvの型がchar* ()[]なので、
std::string::c_strが渡せなかったりします。
ここはconst_castの出番として妥当でしょうか?

妥当でないとしたら、文字列リテラルもそのままではなくて、
char配列を確保して渡すべしですか?
>>689
c_str()はconst char*だから、そもそもその値自体のポインタは取れないだろが。
691689:02/12/11 11:44
>>690
あ、そんな話ではなくて、ですね、
呼び出す側でexecvに渡すためのargvを作るときの、
それぞれの要素をセットするところの話です。
ならいーんじゃねーの、分かってやってんだし。
あんまり教条主義でいくこともないかと思われ。
693689:02/12/11 12:31
>>692
・・・うん、やっぱその方向で書き換えてみよぅ。
なんか、「大丈夫」っていう根拠になるような文書がないものか・・。
つーかargvになってるのはCのプロモーションの都合なんだから、
それに合わせるとしたらキャストするのは至極真っ当な手段だと思うんだが。
むしろconst_castは本来そういう用途を想定してると思われ。
>>694
> つーかargvになってるのはCのプロモーションの都合なんだから、
s/(?=になってるのは)/がchar *const*/
696デフォルトの名無しさん:02/12/30 13:48
株式会社アネスト

UNIXでVBが出来る方
2年くらいの経験

給与 時給 2,500円以上
通勤交通費 あり
勤務時間 09:00-18:00 休憩60分
勤務曜日 月、火、水、木、金曜日
期間 長期(3ヶ月以上) 即日 更新あり



                                   誰か応募して真相を確かめて来い
697デフォルトの名無しさん:02/12/30 15:02
VB = Venture Business の罠
698デフォルトの名無しさん:02/12/30 15:06
>>697
休日の条件が詳しく書かれてないから嫌だ。
699デフォルトの名無しさん:02/12/30 15:08
697 ではなく
696 の間違い
ごめんなせい
700デフォルトの名無しさん:02/12/30 15:23
     ∧_∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ( ´∀`)/<先生!こんなのがありました!
 _ / /   /   \___________
\⊂ノ ̄ ̄ ̄ ̄\
 ||\        \
 ||\|| ̄ ̄ ̄ ̄ ̄||
 ||  || ̄ ̄ ̄ ̄ ̄||
http://muryou.gasuki.com/mona/
701デフォルトの名無しさん:03/01/05 15:50
保守age
702デフォルトの名無しさん:03/01/05 15:55
ウィナーですが前からあこがれていました。
そんな僕です。
学校でSunOS+Cしかやったことありません。
一応POP3プロトコルを使って受信メール一覧表示プログラムまでは書いた事あります。
X-ToolKitとForkとシェアードメモリを使ってウィンドウ間チャット作った事あります。
>>702
自己紹介かい?
704IP記録実験:03/01/08 21:53
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
正月からエロゲするような人間に彼女なんかいるわけない、、


ごめん、僕もやりました。 トリコロールとかいうやつ
どうでもいいけどさ、電波2chでIP保存は128までってトコなんで消したのよ
707IP記録実験:03/01/09 02:48
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
 ∩∩
( ;θ;)<IP録っても耳は取らないでね
昨日、殺しました。
710デフォルトの名無しさん:03/01/09 09:41
質問なんですが、大学の課題で自然対数をe=(1+1/n)をn回(n→∞)掛け合わせることで求めると
(ここでnとeはfloat)数が計算結果が不安定になり最後には1に落ち着いてしまうんですがこれはなんで
起こってしまうのか教えてください、お願いします。
>>710
プログラムが間違っている。
n を十分低くして、ちゃんと近似できているか確認したら?
712デフォルトの名無しさん:03/01/09 10:20
>>711
この課題の目的は変数の型をfloatにすることによって計算した結果を不安定にすることが目的らしい
んですよ。nを千七百万ぐらいにしたら1になりました、その途中ではeが3,8ぐらいにまでなりました。
doubleにすると普通に2.71828・・・・となるんですが。。。。
丸め誤差
73 :ひろゆき ◆3SHRUNYAXA :03/01/08 17:27 ID:rLfxQ17l
   >ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
   ・今までより、サーバが重くなる。
   ・裁判所や警察からの照会があった場合にはIPを提出することがある。

   こんなところでしょうか。

89 :ひろゆき ◆3SHRUNYAXA :03/01/08 17:29 ID:rLfxQ17l
   >一般人からも見れるところ? 〉記録所
   既存のdatとは別に保存してるので、サーバがクラックされない限りはみれません。

   ただ、既存のdatと別なので、書きこみあたりの保存容量がほぼ2倍。
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
「ハッキング」から「夜のおかず」までを手広くカバーしすぎた巨大掲示板群です。。。
気兼ねなく、会社、学校、座敷牢からアクセスできないように、発信元はバリバリ記録してますです。
お気楽ご気楽に書き込まないで下さい。お約束・最低限のルールを守ったフリをして、
他人に迷惑をかけまくって騒ごういうことです。ルールを守らないと、祭りになっちゃいます
まず、他人が見て不愉快になることを書きましょう。大勢の読者がいることを意識しないでください。他には、
ひろゆきが、超・不定期にお送りする裏口ネット駄情報。2ちゃんねるヘヴォメールマガジンがあります。
しかし2chがIPをとったから「じゃあ俺も」で他の掲示板もどんどんIP取ると宣言する所が出てくる予感がする、、、
ま、1つぐらいは残るだろうが、、、
>>149
君は何がしたいんだい?(^_^;)
>>145
掲示板の一番下が「2ちゃんねる20030107a」
ってなってる板じゃなかったかな?
CGI使った、サイバー攻撃だったんじゃないか?
■「T動物病院は削除ルールに従ったのか! 2ちゃんには削除ルールがちゃんとあるんだ!」
2ちゃん独自の削除ルールに従わねばならない法的根拠はありません。
また、2ちゃんの削除ルール自体、判決では不十分なものとされています。

■「名誉毀損を知りえた時点で削除しろなんて無茶苦茶だ!」
今回、T動物病院側は内容証明郵便でひろゆきに10日以内の削除要求しました。
2ちゃんの削除ルールに則らずとも、社会通念上においても、法的にも、これは十分な通知です。
>>914

それはやふーとかでも可能だと思いますけど
>530
俺はマンコとかいてるがIPとられても怖くないぞ。もし文句あってもやめないからな!!

883 :名無しさん :02/12/28 10:40 HOST:
メグ ◆TOKIQKfFYAさん このスレ見てるか判らないけどちょっとお呼び出しです・・・

★ボランティアさんと一緒★ Part8
http://qb.2ch.net/test/read.cgi/accuse/1039532593/563-
>アクセスログってなに?

人を馬鹿にするな!
まあ、危なっかしい書き込みの抑制にはなるかな
>>722
今のうちに親戚回りしておきな。
削除しなかったことが問題であって、IP取得は全くの見当違いだと思うんだが
それよかズボラな削除体制どーにかしろって感じだな

どさくさに紛れて都合の良い法律案を盛りこむ議会みたい
管理批判の多い板から記録してるっつーのもなんだかなあ
釣りじゃないのなら実に現実味のない意見だ
今からこのスレッドは87氏を応援するスレッドになりました(^_^;)
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
半角住人の大量逮捕もありうるわけですな。
今からこのスレッドは87氏を応援するスレッドになりました(^_^;)
快速タンに少しでも近づこうと、今年のお屠蘇はマッコリ酒にしてみましたが血糖値がずいぶんあがったようです。
もう、マンコとかアナルとか書き込めなくなっちゃうね!
鳴る歩道って。
ログのリンクが無い時点で
信憑性なんかほとんどゼロだろ。
リモホって何?
リモートホストって、用語辞典に載ってないよ
誰かおせーて
普通ってのがわからないんだよ!



           ・・・2ちゃんねるの時代も終わりに近づいてる・・・

ログの保存期間は当然1日だろうな?
         富 山 ワッショイ!!
     \\  魚津市  ワッショイ!! //
 +   + \\蜃 気 楼 ワッショイ!!/+
                            +
.   +   富■山  富■山  富■山  +
      ( ´∀`∩(´∀`∩)( ´ー`)
 +  (( (つ   ノ(つ  丿(つ  つ ))  +
       ヽ  ( ノ ( ノ  ) ) )
       (_)し' し(_) (_)_)
北陸の地方都市富山ワッショイ
         富山ワッショイ
          富山ワッショイ
           コシヒカリワッショイ
            蜃気楼ワッショイ
             魚津市ワッショイ
ごめん、その社長オレだ。


・・・次逝ってみよう!
あげ
それは単に業者への制裁措置じゃ?
通ることもあるわな。

「見なかった」といわれて終わるのは証明の問題であって実体の問題ではない。
2ちゃんねる閲覧専用ブラウザを「2ちゃんブラウザ」「2chブラウザ」と呼ぶのはやめよう。
特定の2ch専用ブラウザと紛らわしいから。
747デフォルトの名無しさん:03/01/12 21:46
>>710,712n
>>713に答えは書いてあるけど、UNIXプログラミング全然関係ない。
浮動小数点自体の性質。WinやMacでも浮動小数点使えば同じ。
748山崎渉:03/01/13 18:29
(^^)
749山崎渉:03/01/15 17:53
(^^)
750デフォルトの名無しさん:03/01/20 17:19
複数のプロセスからログファイルに書き込みとログローテートを実装させるには
どういう手順を踏めばよいのでしょうか。
既出だとは思いますがお付き合いください。
情報過多でまとまりません。

・ログファイルへの同時書き込みはlockf?セマフォ?
・書き込むごとにファイルのオープン/クローズを繰り返す?
・ログ書き用のプロセスを起動してプロセス間通信で書き込む文字を送る?
・ローテートしている最中に書き込もうとしている文字列はロストしない?
・ログデーモンを用意?
・HUPシグナルで再起動させるには再起動のコードをかく?
思いつくまま記述させていただきました。
>>750
速度を重視せず、お手軽に実装したいなら
> ・ログファイルへの同時書き込みはlockf?セマフォ?
> ・書き込むごとにファイルのオープン/クローズを繰り返す?

速度を重視し、実装が面倒でもよいならば
> ・ログ書き用のプロセスを起動してプロセス間通信で書き込む文字を送る?
> ・ログデーモンを用意?

正しく排他がかけられていれば、下記の事象は発生しない。
> ・ローテートしている最中に書き込もうとしている文字列はロストしない?
752750:03/01/20 17:47
>>751さん。
ありがとうございます。
勉強します。
753デフォルトの名無しさん:03/01/22 12:28
>>750
UNIXでしょ?
syslog(3)とlogrotate(8)とcrontab(5)とcrontabに書く若干のshell script。

自分でcode書く必要ないから、以下は蛇足だが、

>・書き込むごとにファイルのオープン/クローズを繰り返す?

排他がちゃんと行なわれていれば、全員が開きっぱなしでもかまわん。
どんどん後ろに追記されていく。
stdioのbufferingがあるから、fflush(3)してやらないと駄目だが。

> ・ローテートしている最中に書き込もうとしている文字列はロストしない?

一度オープンしたファイル(ディスクリプタ)には、
ディレクトリツリー上から消えようが、名前が変えられようが、
クローズするまで書き続けられる。だからなくならない。
書く度にディレクトリツリーから辿るわけではない。
それはopen(2)の時に一度だけ行なわれる。

754山崎渉:03/01/23 20:04
(^^)
755デフォルトの名無しさん:03/01/26 22:02
opensshの実装を読んでいて疑問があったので質問します。

実装の中で外部プログラムを呼び出す部分があるのですが、
そこの部分は簡単に書くと
char *cmd="...";
system(cmd);
という形で実装されています。

今回の疑問はこのcmdに渡される文字列なのですが、場所によって
二種類の渡し方をしているようです。たとえば「ls -al」を実行する場合、
ある箇所では

cmd="ls -al";

と実装してあり、また別の箇所では

cmd="exec ls -al";

と呼んでいます。
私にはこの違いがよくわからないのですが、もしかすると
実行されたシェルですでに環境が出来ていて、たとえばパスワードの
入力の必要なくコマンドが実行できる可能性がある場合などのために
execコマンドを使うことによって現在のシェルで実行させているのでは…
と予想しました。

どなたか詳しい方、正確な意味を教えていただけませんか?
よろしくお願いします。
756デフォルトの名無しさん:03/01/26 22:40
>>755
> 実行されたシェルですでに環境が出来ていて、たとえばパスワードの
> 入力の必要なくコマンドが実行できる可能性がある場合などのために
> execコマンドを使うことによって現在のシェルで実行させているのでは…

execの理解が間違っています。
# UNIXのshell, DOSのcommand.com, NTのcmd.exeは、
# 常駐のサービスサーバじゃないです。

#! /bin/sh
echo "This \c"
echo "is \c"
exec echo "a \c"
echo "test."

を実行してみましょう。

常にexecを書いて問題ないです。
(一つしかprocessを起動しない場合。system(3)の引数に';'を使わない)
execを書けばprocessを一つ節約できます。
757デフォルトの名無しさん:03/01/30 19:22
>>756
その例ではtestが表示されませんでした。
新しくプロセスを作らず、既存のプロセスの上で走らせるため、
そこでプログラムが終了した場合は処理が戻ってこないという事ですか?

systemを使った場合は戻ってくるのはなぜでしょう??
>>757
>新しくプロセスを作らず、既存のプロセスの上で走らせるため、
>そこでプログラムが終了した場合は処理が戻ってこないという事ですか?
正解。

>systemを使った場合は戻ってくるのはなぜでしょう??
manを読むと分かると思うんだけど、system()は引数のコマンドを/bin/shの
上で実行するから。

つまり、あるプロセスAの中でsystem("ls");ってやると、lsの起動時には
A→/bin/sh→ls
と3つのプロセスが動いてることになる。これがsystem("exec ls");だと、
A→/bin/sh
このshがlsに置き換わって
A→ls
となる。
>>758
なるほど。詳しい説明助かりました。
execを使っているところと使っていないところがあったのは、
完全にプログラマの気まぐれだったわけですね。
理解できました。ありがとうございます。
>>759
気まぐれだと言い切れるかは微妙。
SIGCHLDの関係なんかもあるし。
761758:03/01/31 11:20
main(){system("ps");}
みたいなプログラムを作って、"ps"と"exec ps"とで出力を比べたら
違いが分かるのではと思ったんだが、ここで面白いことに気が付いた。
FreeBSDだと>>758に書いたようにpsの場合はプロセスが3つ、exec psだと
プロセス2つに見えるんだが、Linuxだとpsでもexec psでもプロセスの数が
変わらない。

Linuxの/bin/shはbashなんだが、bashの場合、引数に与えられたコマンドが
1つしかない場合はexec相当の動作をするようになってるようだ。
コマンドラインで bash -c "ps" と bash -c "ps;ps" の二つの出力を
比べるとよく分かる。前者は、起動したはずのbashがpsの出力に出てこない。
>>760
manには、system関数はSIGCHLDをブロックする、と書いてありました。
見た感じでは単純に実行したいだけの模様ですし、
文脈的にもほぼ同じ意味で使っているので、たぶん気まぐれでしょう。

>>761
最初からメモリを効率化してるんでしょうかね。
bashのソース見てみたけれど具体的にどこでやっているのかは掴めませんでした。
763デフォルトの名無しさん:03/02/02 03:03
>>760
> SIGCHLDの関係なんかもあるし。

それは何の関係よ?
764デフォルトの名無しさん:03/02/02 13:57
Winsockと繋げられるソケットはどうやって作ればいいのでしょうか?
>>764
別に何も考える必要は無いよ。普通にTCPだかUDP投げれば良し。
766デフォルトの名無しさん:03/02/02 15:57
Cで複数の数を比較するマクロはどう書けばいいのでしょうか。
2つの場合:
#define max(a,b) ((a) <= (b)? (b) : (a))
3つの場合:
#define max_in_3(a,b,c) ((a) <= (b)? \
((b) <= (c)? (c) : (b)) : \
((a) <= (c)? (c) : (a)))
とかやってるんですが、これだと数が増えると面倒です。
だれかいい方法知ってたら教えてください。
別に無理にマクロじゃなくてもいいとは思いますが、
気になって。。あとマクロだと便利だし。
767デフォルトの名無しさん:03/02/02 16:17
激しくスレ違い
768デフォルトの名無しさん:03/02/02 16:18
可変長引数とテンプレ使え。
768 名前:デフォルトの名無しさん :03/02/02 16:18
       可変長引数とテンプレ使え。
768 名前:デフォルトの名無しさん :03/02/02 16:18
       可変長引数とテンプレ使え。
768 名前:デフォルトの名無しさん :03/02/02 16:18
       可変長引数とテンプレ使え。
768 名前:デフォルトの名無しさん :03/02/02 16:18
       可変長引数とテンプレ使え。
768 名前:デフォルトの名無しさん :03/02/02 16:18
       可変長引数とテンプレ使え。
768 名前:デフォルトの名無しさん :03/02/02 16:18
       可変長引数とテンプレ使え。

              “と”?
たかだか数個でいいならマクロでも簡単に書ける。

ex.)
#define max3(a, b, c) (max(max((a), (b)), (c)))
#define max4(a, b, c) (max(max((a), (b)), max((c), (d))))

数が多い場合は配列に入れて、qsort()でも掛ければいいんでない?
っていうか、10も20も並べたいとは思わないっしょ。
プロセス間での通信ソケットの良い受け渡しの仕方が
あるのなら教えてください
man sendmsg
773721:03/02/02 22:06
もう少し細かく書きます。

過去にfork()で作った子プロセスAに対して、
親プロセスBがAccept()で取得したソケットのディスクリプタを
既存の子プロセスAに渡すことは可能なのでしょうか?

渡し方知ってる人お願いします。
774771:03/02/02 22:08
721じゃないよ...スマソ
man recvmsg
776766:03/02/02 23:06
>770
なるほど。ありがとう。
でも、gccでマクロの展開のされ方をみてみたら
766に書いたマクロの方が770に書いてくれたものより
少し効率がいいみたいです。
# 770の方gは、max((a),(b))が2回評価されてた。

だからmax3くらいなら、770みたく再帰的に書かないほうが
いいのかな。でも4つを越えると770の方がいいですね。

>768
テンプレートってCじゃ使えないですよね。
C++使えないス。
>>773
fork(2)する前にaccept(2)するのが確実。
linuxだったらAF_UNIXのSCM_RIGHTSで出来そう。
未確認です。・・・移植性ってあるのかな?
778デフォルトの名無しさん:03/02/02 23:42
>>776
おいおい、Cプログラミングスレに行けよ。
それから「副作用」に気をつけろ。>>766は副作用があるとまずい。
gcc依存ならブロッ(以下適当なスレで
779デフォルトの名無しさん:03/02/03 15:47
ご存じの方教えていただけないでしょうか。
XWindowsの現在の解像度ってどうやって取得すれば良いのでしょう?

xlibをベタに使ったアプリケーションを作っていて、
XCreateWindow(disp, RootWindow(disp, vinfo->screen),
0, 0,
x, y, ...); ← 画面サイズ
つまり、
全画面表示の際に、x, yに代入すべき値を知りたいわけです。
#さして深刻な問題でもないのですが、
#できないと気持ち悪くて気持ち悪くて……

当方が現在使っている環境は、
Linux Redhat 7.3, gnome, sawfish, XFree86-4です。
とりあえず、
何でもヒントになりそうなことを教えていただけると助かります。
DisplayWidth(display, screen_number)
781779:03/02/03 16:40
>780
さっさり解決しました。ありがたやありがたや。
つーか、調べが足りなくて申し訳ありませんでした。
782デフォルトの名無しさん:03/02/03 23:04
>767, 768, 769, 770, 778
すんません。別スレに逝きます。
linuxでプログラムを作ってたときの疑問だったんで
このスレかと思ったんですが、違ってました。
ありがとうス。

ところで、780の最後が気になるんですが。。。
>780
それから「副作用」に気をつけろ。>>766は副作用があるとまずい。
gcc依存ならブロッ(以下適当なスレで
783771:03/02/03 23:10
>772,775,777
sendmsg/sendmsg で四苦八苦しながら解決
情報ありがとうございました。
移植性は現在無視の方向でコーディング中
>>783
アレって移植性ないんだっけ?
test ⅞
786773:03/02/04 08:34
bsd,solaris,linux,unixなunix系環境なら問題なく動くかと
ただ動作の違いはある(と日記系の記事で見た)
みたいなんで本当に問題無いかはわかりません。
>>781
だまされるな。>>780はX Window Systemの関数であってXWindowsの関数ではない。
>>787
XWindowsの関数ではないって断言できるのかよw
>>788
次回リリースのXWindowsで追加しまつ。
>>789
>>788は「関数」かどうかを問題にしたいんじゃないだろか。
そう言う意味ではXWindowsの関数ではないし、X Window Systemの関数でもないね。

#私んとこのmanはXLIBとしか言ってないなぁ。w
そうじゃなくて、「『XWindows』なんてウィンドウシステムはない!」
「正式名称は『X』または『X Window System』または…でman Xを見よ」
みたいなことを>>787は言いたかったんだろうなあとは思うんだが。

でも正直そういう話は見飽きた。
>>791
そんなことは全員百も承知と思われ。
>>791
たいがいその手のつまらん指摘で悦に入ってるのはBSD厨なんだよな
794デフォルトの名無しさん:03/02/05 22:58
UNIXでのプログラミングについてわかりやすくまとめたwebページ
ありませんか?
795デフォルトの名無しさん:03/02/06 05:39
>>794
本買えぼけ
>>794
Stevensを買いなさい。教科書です。
Stevensって教科書だったのか?
てっきり人だと。人を買うわけ無いか。
798デフォルトの名無しさん:03/02/06 06:20
>>797
おまえアホだろ(藁
>>798
えっ? 人を買うのか?
800デフォルトの名無しさん:03/02/06 06:33
http://bbs.1oku.com/bbs/bbs.phtml?id=kkgogo
★管理人オススメ★
AI Stevens
>>797
既に死んでるので買えませぬ。
read Stevens とはよくいわれるんだが
804デフォルトの名無しさん:03/02/11 19:44
lseekのlって何を意味しているの?(*^o^*)
805デフォルトの名無しさん:03/02/11 20:14
"アルゴリズムとデータ構造"より使える、アルゴリズムの網羅本みたいな
定番の本はありませんか?
perlでいうラクダ本みたいな感じの。
>>804
根拠はないが、logicalではないかなあ。
>>805
スレ違い。
longっしょ。64bitはlong longだからllseek。ダサい。
大昔のCって関数からlong返せなかったって聞いたことがある。
time()が引数と戻り値の両方に値を返す理由がそれらしい。

想像するに、初期のUNIXのシステムコールだとseekはintを返して、
その後longを返せるseekの名前をlseekにしたんじゃないかな?
なんかllseekの戻り値ってlongなんですが・・・
>>809
どこの OS の話? Solaris の llseek は long long を返すよ。
4.3BSDはlongで、4.4BSDからlong longなんだそうだ。
>>811
それはllseekじゃなくてlseekの話だな。BSD系にはllseekはない。

今時のOSは、
・lseek()が最初から64bit値を返す (Tru64 や BSD 系OS)
・cc に下記のオプションを渡すと lseek() が 64bit を返すようになる
 (上記以外のOS):
 `getconf LFS_CFLAGS` `getconf LFS_LDFLAGS` `getconf LFS_LIBS`
のどちらかの筈。
後者の種類のUNIXの場合は、lseek64()も使えるが、その場合は下記の
オプションをつけるのが礼儀:
 -D_LARGEFILE64_SOURCE `getconf LFS64_CFLAGS` \
    `getconf LFS64_LDFLAGS` `getconf LFS64_LIBS`

後者の仕様の詳細は、ここヨメ:
ttp://ftp.sas.com/standards/large.file/x_open.20Mar96.html
>>812
なんかゴチャゴチャしてるね。近寄りたくないな。
814迷いペンギンちゃん:03/02/17 14:05
次のようなプログラムを組みたいのですが。。。

・自分のPCのIPアドレス(もしくはMACアドレス)を入手
・IPアドレス(もしくはMACアドレス)をキーにファイルAから値BをGET
・ファイルCのとある項目Dの値に、先程の値Bを入力

OSはRedHat7.3、GNU Cを使おうと思っております

ネットワーク関係やってるんですが、
プログラミング、ほとんどやった事無くて・・
何から手を付けたらいいかさっぱりです

(というか、このスレでいいでしょうか? 他行ったほうがいい??
815迷いペンギン:03/02/17 14:06
次のようなプログラムを組みたいのですが。。。

・自分のPCのIPアドレス(もしくはMACアドレス)を入手
・IPアドレス(もしくはMACアドレス)をキーにファイルAから値BをGET
・ファイルCのとある項目Dの値に、先程の値Bを入力

OSはRedHat7.3、GNU Cを使おうと思っております

ネットワーク関係に従事してるのですが、
プログラミング、ほとんどやった事無いんですよ・・
何から手を付けたらいいかさっぱりです

(そもそもこのスレッドでいいですか?
学校の宿題?
818迷いペンギンちゃん:03/02/17 19:24
二度書きスマソ
>>816
いや 恥ずかしい話 社会人です。
selectってひとつずつ調べるのとたくさん調べるのはどちらがいいですか?
沢山が望ましい
というか普通ひとつずつ調べるって使い方はしない
822デフォルトの名無しさん:03/02/18 00:14
社会人にもなって2chで質問て・・・プププ
823迷いペンギンちゃん:03/02/18 00:25
逝ったほうがいいかな?やっぱ
C++で、あるシグナルが送られてきたら終了するっていう感じにしたいのですが、
exit等で終了させるとデストラクタが呼ばれません。
どうすればシグナルハンドラ中でメインスレッドのスタック上のオブジェクトを正常に
破棄させ、かつ終了させる事ができますか?
class system_exit {
 int status;
public:
 system_exit(int s) : status(s) {}
};

int main()
{
 try {
  return hoge();
 }
 catch (system_exit e) {
  return e.status;
 }
 catch (...) {
  return 255;
 }
}
827デフォルトの名無しさん:03/02/18 13:53
>>826
誰がスローするの?

>>825
シグナルハンドラからは無理。
Win32のような++例外との連携がない。
# __catchだっけ?
>>827
> Win32のような++例外との連携がない。

「C++例外」ね
Win32のは構造化例外処理(SEH)ってやつね。
デストラクタをatexit()で明示的に登録できないかな?
・・・ダメか。
>>827
シグナルハンドラから。
>>830
無理。
試したらヘルパールーチンの中でSEGVしてしまった。ダメだなたしかに。
setjmp/longjmp/シグナルみたいなunix由来のトリックは
c++との相性最悪ですがな。
SIGTERM とかで死ぬ場合はデストラクタは呼ばせられないのか。.
デストラクタで開放処理ができないんじゃC++使う意味が減るなぁ。
死ぬときにデストラクタ呼ばなきゃなんないという要件が意図不明なんだけど。
836825:03/02/19 05:31
うーん。どうもシグナルハンドラからメインスレッドに例外を投げるのは無理みたいですね。
deflate(&z, Z_FINISH)しないとファイルが壊れちゃうんで SIGINT, SIGHUPで終了させる際に
処理をしたかったのですが、しかたないので開放する必要があるオブジェクトはvectorを
グローバル変数にしてそこに入れて使うことにします。
シグナルって、完全に非同期に起きるから、しょうがないのよね。
new や delete、malloc や free あたりだって async signal safe
じゃないから、使えないし。

イベントループがあるようなプログラムなら、定期的に timeout で
イベントループに戻ってくるようにしておいて、シグナル・ハンドラ
の方ではフラグ立てるだけ、イベントループの方ではそのフラグが
立ってたら例外を投げる… ってのが常套手段じゃないかなあ。
他になんか安全で良い手ってある?

Windows の構造化例外って、どうやってるんだろ? new や delete
でも安全にしようと思ったら、かなり遅くなりそうなもんだけど。
フラグを立てることでselect/poll可能なオブジェクトにイベントを
送るというのはどうでしょう。つまり、シグナルを受けるためだけの
pipe or socketpairを作って、メインループはpipeをselect/pollで
監視し、シグナルハンドラはpipeに(例えば1byte)writeする、と。
カーネルを介してるので安全だとは思う。良いかどうかは知らないが。

あえてシグナルで行くのであれば、sigsetmaskを見るといいかも。
これをうまく使うとシグナルとイベントとするイベントループができる
らしい。やったことないけど。

とか言ってる俺はwin32専門なワケだが。WaitForMultipleObject好き好き。
でもSEHは知らない。アレはc++の例外とは別枠だし。
>>838
VC++の場合、C++例外はSEHを使って実装されてたんじゃなかったか?
>>839
実現方法は知らないけど、混在はできないそうだ。
841デフォルトの名無しさん:03/02/20 05:02
fork&execで、パイプでつながれた子プロセスを作ってるのですが、
子プロセス側でexecに失敗したときのエラーメッセージと、
親プロセス側で正常に子プロセスと通信できなかったときのエラーメッセージが
ぐちゃぐちゃにまざってしまいます。
fork&execはメジャーな手段だと思うのですが、
この問題について一般的な解決法はありませんか?
forkする前に実行ファイルを探して確認しておくとか。

それでもダメなら子プロセスではエラーメッセージを出さずに、親プロセスに
通知するとか。もう一つ子→親のパイプを作ってFD_CLOEXECしておき、execに
失敗したらそこにerrnoかなんかを送る。そのパイプがEOFになったら、execが
成功したことが親に分かる。
843841:03/02/21 00:39
>>842
対応しようとすると結構めんどくさいんですね。
ふーむ。
ミナカッタコトニスルカナ
上のほうで malloc/freeが signal safeじゃないって話があったけど
シグナルハンドラでexitやって atexitで malloc/freeってのはOKなの?
>>843
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>

int invokeve(const char *filename, char *const *argv, char *const *envp)
{
  int ep[2], err, pid, n;

  if (pipe(ep)) return -1;
  if (fcntl(ep[0], F_SETFD, FD_CLOEXEC) || fcntl(ep[1], F_SETFD, FD_CLOEXEC) || (pid = fork()) < 0) {
    errno = err; close(ep[0]); close(ep[1]); err = errno; return -1;
  }
  if (pid == 0) {
    close(ep[0]); execve(filename, argv, envp); err = errno;
    write(ep[1], &err, sizeof(err)); _exit(-1);
  }
  close(ep[1]);
  if ((n = read(ep[0], &err, sizeof(err))) < 0) {
    err = errno; close(ep[0]); errno = err; return -1;
  }
  close(ep[0]);
  if (n > 0) {errno = err; return -1;}
  return pid;
}
846841:03/02/22 17:16
>>845を見ながら組み込んでみたら、うまくいってしまった。
ほんとにこんな対応しかないのかなぁ?
>>846
俺の思い付いたうちでのベストな方法なんだが、どう不満なのか明確に教えて
もらえれば、改善することもできるかも知れない。
848841:03/02/22 22:13
>>847
fork&execで簡単にぶつかる問題なのに、
「思い付いた」方法で対応しないといけないのが、どうも腑に落ちない。
もっと確立した方法があるような気がしてしまう。
「もっと確立した方法」==「気にしない」
execが失敗する要因って何?
851841:03/02/23 00:38
>>849
かっこわるいなー。
>>850
存在しないファイル名を指定する、とか。
>>833
つーか、その辺まともに実装しているのはAda環境くらい。
OSと言語の壁はまだ高い。
>>851
POSIXでは、シェルがコマンドを実行できなかった場合はステータス127ということになるようだ。
で実際シェルではそれで通常問題にはならない。
>>852
Win32環境はわりかしマトモ。
unixみたいなグローバル変数依存のトリックは少ない。
>>855
fs:0にポインタを保存してるのはグローバル変数依存のトリックとはいわない?
>>856
いや、ユーザーにグローバル変数として
目に見えてるかどうか、という意味なんだけど・・・
858デフォルトの名無しさん:03/02/24 23:53
Kdevelopという開発環境はどうですか?
Linux版のVC++と聞いたのですが本当でしょうか?
859デフォルトの名無しさん:03/02/25 14:17
永久スリープはどうやればいいんでしょうか。
分からないので無限ループの中でnanosleepを使っていますが・・・
あ、言語はCです。
永久に起きないでいいなら
kill(getpid(), SIGKILL);

外部要因をひたすら待てばいいなら
(例えばsignal待ちとして)
select(0, NULL, NULL, NULL, NULL);
>>860
後者の場合です。

> man 2 select
> もし timeout に NULL (時間切れ(timeout)無し) が指定 さ
> れると、 select は無期限に停止(block)する。


これですね。よくわかりました。
ありがとうございました。
シグナル待ち専用システムコールpause(2)を何故使わないのかと(略
863860:03/02/25 17:20
>>862
いやさ、入力の監視もあるかと思ったんだけど説明が億劫になって端折ったのよ。
864デフォルトの名無しさん:03/02/26 02:37
>>863
signalが絡むとselect(2), pselect(2)の方がsigmaskなど考えるべき事が多い。
>>859の要件だけなら、pause(2)がよい。
ただsignalを受けることを考えたら、結局、
for (;;) { if ((pause() == -1) && (ERRNO == EINTR)) { continue; } else { perror("ありえへん"); exit(1); } }
865デフォルトの名無しさん:03/03/02 03:40
-- age [perl-5.6.1]
#!/usr/bin/perl -w

$r = system("ls");
if ($r != 0) {
  die("system(\"ls\"): $!\n");
}

-- sage [gmake-3.79.1]
a:
  perl -w age | cmp f -

この2つのファイルでmakeを実行した時、
cmpで比較する対象のファイルfが存在しない場合に
age中に書いたdieが実行されるのは、なぜですか?
lsがSIGPIPEで落ちるから。
867865:03/03/02 17:59
SIGPIPE: パイプ破壊: 読み手の無いパイプへの書き出し

読んだままですね。
どうもありがとう。
UNIXという考え方 とかいう本に testコマンドを使えば 転送元ファイルの存在確認が
必要ない〜みたいなことがかかれてましたが、あれって何をいってるんでしょうか?

結局 test コマンドの終了コードを調べて条件分岐ってことはしないとだめなわけですよね?

testコマンドってシェルスクリプト用だと思ってましたがCで組む場合も使うんでしょうか?


>>868
その本がボロクソなのか、お前の要約がボロクソなのか、読んでない漏れには判断つかん。
>>868
そんな記述あったっけ?
どうでもいいが、その本の作者は
シェルマンセーだと感じたんだが。
fileとか、soketのディスクリプタを、
他のプロセスにで送るにはどうしたら
いいのでしょうか?
 Win32なら、DuplicateHandleとかあるのですが。
>>871
dup/dup2 ?
>>871
>>771-783
過去ログ嫁や。
>>871
stevens (APUE) に書いてある。
875デフォルトの名無しさん:03/03/21 05:26
UNIXの標準ライブラリのリファレンスは何処にありますか?
もしかしてGNUのglibcのドキュメントがそうですか?
他にありませんか?
>>875
UNIXの標準ライブラリってなんだろう。
manのセクション3にない? man 3 printfとか。
UNIXのAPI標準といったら、
SUSv3 (The Single UNIX Specification Version 3)
http://www.unix-systems.org/version3/
は外せないな。
KDevelopの解説書が和書では一冊も見つからないのです
>>878
洋書を探せば?
880デフォルトの名無しさん:03/03/21 22:39
とあるアプリでログをとりたいのですがsyslog使うメリットってありますか?
それとも自前でファイルに出力したほうがいいですか?

運用者がsyslog.confで出力先をカスタマイズできること、
別マシンにログを飛ばせることがメリットだと思っていますが。

あと別マシンに送る場合UDPになるということですがTCPに変更することは可能ですか?
>876,877
どうもです。LinuxなのですがCのライブラリにある関数のリファレンス一覧が
見たくてどのような資料があるのかと思っています。
WindowsのCコンパイラを買うと関数のリファレンスが付いてきますがUNIXとwindows
の微妙な違いを知るには一番手っ取り早い気がします。最悪*.hやglibcの中身を
見て見る事もありかも知れませんが、、、
やはりmanしかないでしょうか。以前本を見たような気がするのですが、もう少し探してみます。
882デフォルトの名無しさん:03/03/22 06:33
>>881
> やはりmanしかないでしょうか。

manしかないのではなくて、manがある。manを読め。
man -kと'See Also'で必要な物は見つかる。

> もしかしてGNUのglibcのドキュメントがそうですか?

違う。これはANSI Cの標準ライブラリ+α。まるで足りない。

ただ概観したいのなら、適当な本を読めばよい。ナットシェル等で出ている。
まあ、一冊じゃ全然足りないとは思うが。

>>880
> TCPに変更することは可能ですか?

・syslog-ngに置き換える。
・|named-pipe を使って、TCPで送るclientに渡す。serverも別途用意。
>>882
関数リファレンスを見たいだけなのにmanの使い方を
覚えなきゃならないなんて効率悪すぎ。

とりあえず、manで目次の使い方を教えれ。
キーワードを知らない状態でどうやって調べるんだ?
manのCのヘルプって日本語版あるのか?
>>883
MANPATH配下のmanページ(ファイル)をfindして中身をgrepすればいいだろう?
>>883
Unix や Linux でCを使った開発をやりたいのなら、
man コマンドの使い方ぐらいは覚えないときついよ。
というか、他のコマンドはちゃんと使えてるのか?
man on WWWしか使ってませんが何か?
man on MS HTML Helpがあればそれを使いたいけど。
man の使い方って何?

man 3 printf
しか知らんが、他に何かすごい使い方でもあるの?
man -k
>>889
-f、-kとか-wくらい覚えておこうよ。
892デフォルトの名無しさん:03/03/23 12:44
>>883
> とりあえず、manで目次の使い方を教えれ。

man -k ""

> 関数リファレンスを見たいだけなのにmanの使い方を
> 覚えなきゃならないなんて効率悪すぎ。

プログラミングしない方がいいと思う…
$ man -k ""
usage: apropos keyword ...
Error executing formatting or display command.
System command /usr/bin/apropos exited with status 256.
$ man -k ""
BUS_PRINT_CHILD(9) - print information about a device
BUS_READ_IVAR(9), BUS_WRITE_IVAR(9) - manipulate bus-specific device instance variables
BUS_SETUP_INTR(9) - create and attach to an interrupt handler
DECLARE_MODULE(9) - kernel module declaration macro
DELAY(9) - busy loop for an interval
DEVICE_ATTACH(9) - attach a device
DEVICE_DETACH(9) - detach a device
DEVICE_IDENTIFY(9) - identify a device, register it
DEVICE_PROBE(9) - probe for device existence
DEVICE_SHUTDOWN(9) - called during system shutdown
DEV_MODULE(9) - device driver module declaration macro
DRIVER_MODULE(9) - kernel driver declaration macro
IPXrouted(8) - IPX Routing Information Protocol daemon
KASSERT(9) - kernel expression verification macro
MAKEDEV(8) - create system and device special files
(snip)
漏れもman -k ""だと、>>893みたいなエラーになる。
いろいろとぐぐってみたんだけど、どういうワードで探せばいいか曖昧で、
結局のところ、分からずじまいで終わりました。
ただversionが古いとか、そんな話かな。

ゴミくさいけど、せっかく作ったんで上げとく。
http://cgi.members.interq.or.jp/hokkaido/asato/upload/jam3ddr/OB000769.txt
896895:03/03/25 03:04
FreeBSD apropos(1)より:
> keyword は実際には拡張正規表現です。この書式に関する詳細は grep(1) マニュ
> アルページを参照してください。

man -k .
なんかすごくショックだ、今。
Linuxのapropos(1)には書いてなかったのに。
aproposのソースなりマニュアルなり、調べなかった漏れが悪いわけだが。
FreeBSD 4.5-RELEASEはman -k, apropos共に""渡しても平気だよ。

/usr/bin/aproposはshell scriptで、grepを呼び出しているだけだ。
grepの拡張正規表現はもちろん空語(形式言語のいうλあるいはφ)を含むから、
manかaproposの引数の扱い、たぶん引数/変数展開に問題があるのだろう。
Bugだから誰かfixしたら? (わしゃFreeBSD使いじゃないから嫌)

# man -k "file descriptor"とか大丈夫?
898895:03/03/25 04:50
>897
即レスありがとう。
風呂入ってたから気付かなかったよ。

それで、環境を書いてなかった漏れが悪いわけだが、
漏れが使ってるのはLinuxのman-1.5jで、FreeBSDじゃないよ。
なんとなくFreeBSDのmanから検索して、man -k .を試してみたら動いた、と。
# Solarisのdirnameは引数無しだと'.'だけど、Linuxは引数が1つ必要だったりするような、
# そういう環境の違いかなと思って。

> man -k "file descriptor"
どうやら、だめみたい。unsafeが無いって怒られた。
んで、apropos "file descriptor"だと、fileとdescriptorに分割されました。
# /usr/sbin/makewhatisの53行目も怪しいわけで。
# ヘタレだから、恐くて試してないけど。
# 最新版は直ってるといいんだけど、manの入れ換えなんて、やったことないな。
899デフォルトの名無しさん:03/03/25 18:06
最近、gccでLinuxプログラミングをはじめたものです。
DOSのlibファイルに相当するものはLinux・UNIXにもあるのでしょうか?
お願いします。
a
>>899
DOSのlibファイルなんてもうなんだったか覚えてない…
/usr/lib/lib*.a, /usr/lib/lib*.soが相当するのかな?
横からすまんが、
>>901
「おぼえていない」というのはなぜですか?
もうlibなんて使わない?dllでも普通はlibを使うんじゃ?
903デフォルトの名無しさん:03/03/25 18:31
>>900
>>901
ありがとうございます。

続けて質問すみません。
名前さえわかれば検索できるかと思ったんですが、やっぱりわかりませんでした。
.aファイルは何で作るのでしょうか?
>>903
man libtool
.c
↓cc
.o
↓ar
.a
907903:03/03/25 21:17
>>904
>>905
>>906
レスありがとうございます。
これならなんとかなりそうです。がんばります。
908デフォルトの名無しさん:03/03/26 00:08

OS:Solaris8
コンパイラ:Sun WorkShopUP2

上記環境で、UCS4->SJISの変換の関数を作成していますが、どーしてもうまくいきません。
(wcstombs()==-1 になってしまいます。)

具体的には(全然具体的じゃないけど)
setlocale(LC_ALL,"");
wcstombs(sjis,ucs4,sjisLength);

この順番で呼び出しています。
LANG=jp_JP.PCKに設定してあり、setlocale()の返値もnilじゃなく、PCKになっています。
(/usr/lib/locale/にPCKがあるのも確認...)
setlocale(LC_ALL,"jp_JP.PCK")としてもダメでした。

Windowsだと上記手順で動くんですが、Solaris上だとうまく動いてくれません。

どなたか解決策をご存じありませんか?




>>908
まずerrnoを調べよ。全てはそれからだ。
>>908
Solarisのwchar_tってUCS4だっけ?
>>910
違う。だから908がうまくいかないのは当たり前。

>>908
iconv(3) で、まず "UCS-4" を "UTF-8" に変換してから、
次に "UTF-8" を "SJIS" に変換するってのはどうよ?
iconv_open(3c) や iconv_unicode(5) を参照。
>>911
iconv()があるなら直接UCS-4をSJISに変換すりゃーいいだろに。
913911:03/03/27 20:34
>>912

少なくとも Solaris 8 だと、直接変換はサポートされてないんよ。
iconv_unicode(5) にはそう載ってるし、試してもそうなる。
>>913
Solaris 9でもそうだよ。
全ての組合わせ用意するのは辛いわな。/usr/lib/iconv/*.soが爆発しちゃう。
915デフォルトの名無しさん:03/03/28 01:04
助言ありがとうです。ヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノ
無事うまくいきました(UCS4->UTF-8->SJIS)

コードの流用ばっかり考えてました。
iconv()って便利ですね。(恥ずかしながら、今回初めてしりました。
文字コード処理は初めてだったので)



awk '$1 ! /[a-z]/ {}' で syntax error っていわれるんですが、どこがおかしいのでしょうか?
GNU Awk 3.1.2(Cygwin)を使用しています。
激しくスレ違いな気が。
こっちか?
awkについて語るスレ
http://pc2.2ch.net/test/read.cgi/tech/1023556171/

あるいは UNIX/Linux 板か。
>>916です。
スレ違いのようなので >>918 に書き込みました。
どうもすみませんでした。
>>913,914に文句をいうわけではないが。

計算可能なもの直接、できなければUCS-4経由とすればいいと思うが。少なく
ともglibcやFreeBSDのはそうなってたはず。とくにUTF-8からは変換できるの
にUTC-4からはできないというのは、手抜き?
libiconvを使ってみるとか。
http://www.gnu.org/software/libiconv/
922デフォルトの名無しさん:03/03/31 19:23
unix環境でC言語のコンパイルしているんだけど、
socket.hっていうファイルがどこにあるか分かる?
>> 922
/usr/include/sys/socket.h とか?
924デフォルトの名無しさん:03/03/31 19:34
>>923
ありました!ありがとうございます!
C で system() や popen() からバックグラウンドでプログラムを起動した際
そのプログラムのプロセスIDを得る方法ありませんか?
ps | grep hoge | sed 's/ *//' | cut -f1 -d' ' > /tmp/fuga とか
ファイルに一々書き出してる始末なんですが、直接得る方法があったら教えて頂けませんか。
>>925
一般的な方法は無い。pidが欲しけりゃ自分で fork & exec せよ。
>>926
そうですか、わかりました。アドバイスの通り fork して exec することにします。
どうもありがとうございました。
>>925
どうせfileに書くなら、
system("foo & echo $! > /tmp/foo.pid");

psするとしてもfileに書くくらいなら、popen(3)して読め。
>>928
うわ、echo $! なんてできたんですね。これで popen で読む事にしました。
助かりました、どうもありがとうございます。
930デフォルトの名無しさん:03/04/05 13:24
>>929
popen("foo & echo $!", "r")するなら、fooのstdout処理に要注意な。
popen("foo >/dev/null & echo $!", "r")とか
gccでANSI標準のspawn()が使えないのは
どうにかしてほしい
spawnってANSI標準だったのか。初耳だな。
gccってライブラリだったのか。

どうにもしないで下さい。
うわぁぁあん
>>931
ANSI Cの中の人も大変ですね。
glibcの中の人なら、posix_spawn(3)を持ってますが…
ストリーム入出力使ってた場合はゾンビになるには
fclose(stdin); fclose(stdout); fclose(stderr);
になるんですか?
ソンビになるには自殺して親に死亡確認をしてもらわないことになります。
>>936
いわずもがなながら、他殺でもOK。

>>935
もしかして、no controlling terminalな状態になるには、と聞きたいの?
>>937
デーモンになりたいって言いたかったんでは?
>>938
合体しづらいので、ます理性をなくす。
悪魔人間ですな。
SIGCHLD って、子が終了した時だけじゃなくて、とにかく
なにかシグナルを受けた時に呼ばれるんですか?
子に SIGSTOP/SIGCONT とか送っても呼ばれるので
子の終了を知りたいので困ってるんですが、普通は
どのようにするのでしょうか。
>>941
man waitpid
>>942
試してみます、どうもありがとうございます。
>>941
> SIGCHLD って、子が終了した時だけじゃなくて、とにかく
> なにかシグナルを受けた時に呼ばれるんですか?

Q: wait(2)って子が終了した時だけじゃなくて、
とにかくなにかシグナルを受けた時に復帰するんですか?

A: はい、そうです。そのsignalを受けた時の振る舞いが、
processが終了する、あるいはsignal handlerが呼び出される、
の場合、wait(2)は復帰します。SIG_IGNの時は復帰しません。
>>944
Q: waitpid(2)はどうでしょう?

A: 同じです。

Q: 私はどうすればいいのでしょう。

A: 自分の受け入れたい条件になるまでloopしてwait(2)し続けなさい。
946ヽ(´ー`)ノ:03/04/14 15:18
slab allocator について、良く分かるサンプルはありますか?
「良く分かる」がどういうことか良く分からないけど、
http://www.csn.ul.ie/~mel/projects/vm/
948ヽ(´ー`)ノ:03/04/15 15:28
>>947
えと、知りたかったのは「どういう使い方をするか」だったんです。
カーネルのソースを読んでたら何となく分かりました。ありがとう。
949山崎渉:03/04/17 15:42
(^^)
950デフォルトの名無しさん:03/04/17 17:35
アドレスからそのアドレスに割り当てられている変数名(文字列)が
取得したのですがどうすればいいですか?

int a;
int b;
int c;


printf("a=%d",a);
printf("b=%d",b);
printf("c=%d",c); ←こいつらをLOOPさせて1行にできないか?

>>950
くだらない質問を、マルチすんな!詩ね!
952山崎渉:03/04/20 03:48
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
953堕天使:03/04/20 19:32
954デフォルトの名無しさん:03/05/07 14:02
XLIBのイベントの受け取りについて質問させてください。
XNextEvent(display, &event)の代わりに(ブロッキングさせたくないので)
XCheckWindowEvent(display, window, KeyPressMask | StructureNotifyMask | ExposureMask, &event)
を使おうとすれば、

switch(event.type){
case ClientMessage:
……

このClientMessageを拾えなくなるのですが、なんとかする方法はないでしょうか?
やりたいことは、単に
windowの×をクリックしたときに正常終了させたいだけなのですが……。
955954:03/05/07 14:17
書き込んだ後に気がついたのですが、
いろいろ調べていると、webのソースコードのコメントに

ttp://wuarchive.wustl.edu/mirrors/NetBSD/NetBSD-current/xsrc/xfree/xc/programs/ico/ico.c
/*
* Unfortunately we can not use XWindowEvent and XCheckWindowEvent to get
* ClientMessage events, because there is no corresponding event mask. We must
* use XIfEvent and XCheckIfEvent and this function as a predicate. Better if
* Xlib had some kind of XWindowAnyEvent and XCheckWindowEvent. -- Casantos.
*/
XCheckWindowEventの代わりにXCheckIfEventを使えと、書かれてます。
わたしにはユーザー定義のXCheckIfEventは少し敷居が高いっす。
手元のX-Window プログラミング (日刊工業新聞社)には詳しく載ってませんし。

なにかXCheckIfEventの分かり易いサンプルないし、
XCheckWindowEventのまま小細工を施して
終了フラグを拾う方法はないでしょうか?
>>954
その君が探しあてた ico.c が、まさにサンプルになってないかい?
957954:03/05/07 23:37
>956
実は、小細工の仕方を伝授してほしい、と消極的にアピールしたつもりだったのです。

キーボード入力でも終了させられるのに、
マウスのクリックでクローズしたいがためだけに、
XCheckWindowEventから、XCheckIfEvent
へ(あちこちと)変更する気力が湧かなくて……

もしくは、XCheckIfEventのもっと分かり易い(資料の揃った)サイトないっすか?

たしかに、マウスのクリックでクローズできないアプリなんぞは
欠陥品だと自嘲しつつsage。
man -k でエラーが出るやつはrootに頼んでindex作ってもらえ。
catman -? とかそんなかんじ。オプションは忘れた。
http://www.google.com/search?num=50&hl=ja&ie=Shift_JIS&q=catman%81@man%81@-k&lr=lang_ja
>>957
> もしくは、XCheckIfEventのもっと分かり易い(資料の揃った)サイトないっすか?

www.xfree86.orgのドキュメント。英語だけど詳しいよ。

> わたしにはユーザー定義のXCheckIfEventは少し敷居が高いっす。

Xlibはそういう人向けのinterfaceじゃないよ。
Widget作る人のためのinterface。xwininfoとかさ。
>>957
Toolkit(Motifなど)を使わない理由は?
>>959が言うように、敷居が高いならXlibでそこまでやらない方がいいと思うが。
961954:03/05/19 17:15
>957
>www.xfree86.orgのドキュメント。英語だけど詳しいよ。
あ、そういやそうですね。サンクス。

>958
>Toolkit(Motifなど)を使わない理由は?
window枠無しの表示のために、
最初はシンプルにXLIBを使っていたのだけど、
window枠もつけようと、
そのままXLIBで書いていたら、嵌ってしまった。
962ヽ(´ー`)ノ:03/05/19 18:05
Toolkit でも、モノによっては枠無しの window を作れると思うのだが…。
Motifならリソースの設定のみ。<枠なし
枠なしにするなんて、XLIBかToolkitかとは関係ないだろ。
FreeBSD で j と k だけの less みたいのを作ってみたいのですが、
ioctl の使い方がよく分かりません。どうすればよいのでしょうか。
>>965
man 4 tty
967山崎渉:03/05/28 13:07
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
Linux/Sun/BSD ベースで、PDFを生成するライブラリは
あるでしょうか?有償、無償でも構いませんが、ドキュメ
ントの品質に定評があるものを探しています。

用途は、店頭POP/チラシの印刷を考えてます。

スレ違いかなぁ・・・?だったらごめんなさいませ。
>>968
pdflibで検索。
質は作り方によるんじゃない?
970!!!

次スレ?
971デフォルトの名無しさん:03/06/01 13:57
>>970
立てる?
テンプレ案募集。

<タイトル>
UNIXプログラミング質問すれ (2)
</タイトル>

<1>
UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド。

前スレ:
UNIXプログラミング質問すれ
http://pc2.2ch.net/test/read.cgi/tech/992057422/
</1>
973デフォルトの名無しさん:03/06/06 16:22
unistd.hはwinのwindows.hみたいなもの?とりあえずインクルードしておけという・・・
>>973
そう思うなら取り敢えずunistd.hの中を見てみればいいだろ?
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。