UNIXプログラミング質問すれ Part8at TECH
UNIXプログラミング質問すれ Part8 - 暇つぶし2ch200:デフォルトの名無しさん
06/07/12 20:52:42
C++, Perl, C, sh, Ruby, Fortran

201:デフォルトの名無しさん
06/07/12 20:54:59
C, Java, C#, Common Lisp

202:デフォルトの名無しさん
06/07/12 21:09:10
C# って、もしかして MONO 使ってるの?

203:デフォルトの名無しさん
06/07/12 21:23:33
日常的なスクリプティングは Scheme or CL でこなしたいんだけど、
いかんせん力量不足だなぁ...

204:デフォルトの名無しさん
06/07/12 21:43:13
なんでそんなにつかえるんだよー
英語すら使えない漏れはモウダメポ..._〆(゚▽゚*)ですね

205:デフォルトの名無しさん
06/07/12 22:35:30
>>202


206:デフォルトの名無しさん
06/07/13 01:09:43
>>204
yacc/lex。最狂のスクリプト言語「日本語」を開発すべく技術者募集(嘘)

207:デフォルトの名無しさん
06/07/13 11:07:35
2ch語でプログラムできればどんなにいいかw

米 プログラムテスト
米 コメント
表示 "こんちわ世界"
ゴルァ 米 割り込み
糸冬 了

208:デフォルトの名無しさん
06/07/13 11:36:27
>>207
kwsk

209:デフォルトの名無しさん
06/07/13 15:25:31
OpenMotifとMotifのちがいってなんですか?
MotifのコードはOpenMotifでもコンパイルできますか?

210:デフォルトの名無しさん
06/07/13 21:41:06
ライセンス

211:デフォルトの名無しさん
06/07/19 00:43:18
質問なのですが、pipeを使って実際のパイプラインのような処理をする場合
どのように繋いでいけばいいのでしょうか?
例えば標準入力から ls | grep a | cat という入力が入ってきた場合はスペース毎に
区切り argmv[0]=ls、argmv[1]=|、argmv[2]=grep...と格納し、
最初の処理でargmv[0]の標準出力をパイプに置き換え、次の処理でargmv[2]と
argmv[3]の標準入力、標準出力をパイプに置き換え、最後の処理でargmv[5]の
標準入力をパイプに置き換えるという感じです。


212:デフォルトの名無しさん
06/07/19 00:45:43
オナニーはひとに頼らずに自分一人でやれよ

213:デフォルトの名無しさん
06/07/19 00:53:57
再帰的に処理すればいいじゃん。

214:デフォルトの名無しさん
06/07/19 01:12:11
>>211
Q&Aかよ!

215:デフォルトの名無しさん
06/07/19 02:00:42
>>211
「俺コード」で説明するのはやめてくれ。

まずパイプを二個作り、
・lsの標準出力をpipe1のfd[1]
・grepの標準入力をpipe1のfd[0]
・grepの標準出力をpipe2のfd[1]
・catの標準出力をpipe2のfd[0]
に繋ぎ変えればOK。

216:215
06/07/19 02:03:19
あっと、それからその手のコードを書くときは
・何かを標準出力に出力するだけのプログラム
・標準入力をそのまま標準出力にするプログラム
を作って、それを使ったほうがいろいろ便利。デバッグプリントとか入れやすいし。

217:デフォルトの名無しさん
06/07/19 03:20:38
shellでも作ろうとしてるんだろうか?

218:デフォルトの名無しさん
06/07/19 03:33:44
宿題らしい。

219:デフォルトの名無しさん
06/07/19 04:02:29
最近の大学生は「特殊化-一般化」の概念も知らないんだろうか。

220:デフォルトの名無しさん
06/07/19 04:29:47
一人の特殊なサンプルで最近の大学生は~と一般化してしまうのもどうかと思う


221:デフォルトの名無しさん
06/07/19 07:34:40
一人のサンプルが、特殊なのか一般なのかを問うている疑問なのでは?


222:デフォルトの名無しさん
06/07/19 10:06:18
揚げ足とりしてる暇あったら回答してあげようよ

223:デフォルトの名無しさん
06/07/19 12:10:24
やだ。なんかこいつむかつくもん。

224:デフォルトの名無しさん
06/07/19 13:03:19
実際 csh とか tcsh とかは

hoge | fuga | hage

みたいなコマンドライン受け取ったら
>>211 の処理をするんでしょうか?
(違う方法で実現してる気がするけど)


あと

hoge -o hage | ukiki -e `echo *` | fuga -p 'kuso' | puka

みたいになってるとややこしいね

225:デフォルトの名無しさん
06/07/19 13:10:01
>>224
ソース見れば?

226:デフォルトの名無しさん
06/07/19 13:35:36
本物がどうやってるかはおいといて・・・

1.まず区切り( ; とか | とか & とか・・・)で分ける
・hoge -o hage
・ukiki -e `echo *`
・fuga -p 'kuso'
・puka

2.空白で区切ったそれぞれを評価
・hoge    ←そのままでおけ
・-o     ←そのままでおけ
・`echo *` ←バッククォート内を評価した結果に置き換える

3.それぞれパイプで繋げて実行

みたいな感じやろ。

227:デフォルトの名無しさん
06/07/19 14:05:54
今、『OS自作入門』を読んでる途中で、ちょっと興味があるので実験してみました。
書いたコードは、URLリンク(kansai2channeler.hp.infoseek.co.jp) です。
このコードは次のことを行います。
・親プロセスがpipeを二つ作る
・lsの結果をmycat(自作)を二回通す
・起動するアプリは、パイプでつなげながらfork-exec

ここで質問なんですが、
・一番最後のclose(fd[0][1])を実行しないと、子プロセスが終了しないのですが、
 それはなぜでしょうか?
・なんか、もっと簡単にできないでしょうか。
 今の方針だと、n個のプロセスを起動する場合は、n-1個のpipeが必要で、
 それぞれfork後、関係ないpipeを全部closeしなければなりません。

なお、maycat.cは以下です。
#include <unistd.h>
int main()
{
char buf[1];
while (read(0, buf, 1) > 0) {
write(1, buf, 1);
}
return 0;
}

228:デフォルトの名無しさん
06/07/19 16:43:51
>>227
>  今の方針だと、n個のプロセスを起動する場合は、n-1個のpipeが必要で、
>  それぞれfork後、関係ないpipeを全部closeしなければなりません。

それはプログラムの書き方が悪いから。
pipeとforkをサンドイッチにして。

229:デフォルトの名無しさん
06/07/19 17:20:36
>>228
コメントありがとうございました。
アドバイスを受けて、書き直してみました(ループ化もした)。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
何かコメントがありましたら、またお願いします。

230:デフォルトの名無しさん
06/07/19 19:13:39
apacheには、AcceptMutexというディレクティブがあるみたいだが

231:デフォルトの名無しさん
06/07/19 19:14:00
ごめん誤爆

232:デフォルトの名無しさん
06/07/19 21:01:15
>>229
ええんとちゃいますの。(実行してみてないけどw)
lだとコマンドごとに引数可変長にできないからvにしてみて。

233:211
06/07/19 21:47:07
URLリンク(kansai2channeler.hp.infoseek.co.jp)
一応それらしい形にはできたのですが、パイプで命令を繋いでいっても
なにも出力されません。パイプの部分をコメントアウトするとそれぞれの
命令を実行していくので、繋ぎ方がおかしいと思うのですが、どこが
間違っているか分かりますでしょうか?

↑のは元のが長いので命令を固定して繋ぐところだけやってます。


234:デフォルトの名無しさん
06/07/19 21:58:48
$ grep grep a
grep: a: そのようなファイルやディレクトリはありません


235:デフォルトの名無しさん
06/07/19 22:38:02
質問させて下さい。

引数に ~/hoge/ を指定されたら~/hoge/の中身を配列にいれたのですが
それはどうするればいいんでしょうか?

236:デフォルトの名無しさん
06/07/19 22:40:34
>>235
入れた後どうするかは君次第。

237:デフォルトの名無しさん
06/07/19 22:56:55
UNIXプログラムができて、納品も済みました。この後どうすればいいでしょう?

238:デフォルトの名無しさん
06/07/19 22:59:35
取り敢えず給料を見越してサラ金で金借りて風俗

239:デフォルトの名無しさん
06/07/20 00:06:04
小便を済ませて神様にお祈りして部屋のスミでガタガタふるえて命ごいをする心の準備をする。

240:デフォルトの名無しさん
06/07/20 00:42:51
>>233
>>229のコード参考にしたら?

241:デフォルトの名無しさん
06/07/20 11:55:58
コードが書けないので、書いてくださいとお願いしても誰も書いてくれない。
しかたないので自分で書いてみて、動かないのでどこがわるいのか聞いても誰も教えてくれない。

なんなの!ここ。もう二度とこんなとこ来るもんか!

>>233は思ってるに違いない。
でもね、それは違うよ。質問のやり方が悪いんだよ。

242:234
06/07/21 01:14:29
答えてるやん!


243:デフォルトの名無しさん
06/07/21 23:04:18
>233
forkしてからpipeしない、順序逆。

244:デフォルトの名無しさん
06/07/22 17:46:59
Linuxスレッドプログラミングの良い書籍ないか?

245:デフォルトの名無しさん
06/07/22 19:00:30
>>244
俺はこれを読んで学んだ。
英語だけど意外とわかりやすかった。

URLリンク(www.advancedlinuxprogramming.com)
URLリンク(www.advancedlinuxprogramming.com)

246:デフォルトの名無しさん
06/07/22 20:08:23
>245
thx!
やっぱpthreadなんだ
オライリーで一冊日本語の本あったけど、どうしようかな。

247:デフォルトの名無しさん
06/07/22 23:15:28
UNIX板のpthread地獄スレに推薦図書あるよ。
この板のマルチスレッドプログラミングスレにも。

248:デフォルトの名無しさん
06/07/22 23:25:08
>>247
イッテミルお

249:デフォルトの名無しさん
06/07/23 02:35:56
基本的な質問かもしれないですけど
プログラム上からカレントディレクトリを変更する方法ってありますか?
あるなら教えてください・・・・

250:デフォルトの名無しさん
06/07/23 03:33:39
chdir(2)

いっとくけど、cdコマンドは原理的に単独のプログラムとしては作れないからね。

251:デフォルトの名無しさん
06/08/17 19:43:41
Red Hat Enterprise Linux 3 はBSD系ですか?SVR4系ですか?

252:デフォルトの名無しさん
06/08/17 19:45:53
>>250
何を言ってるのだ、お前は。

253:デフォルトの名無しさん
06/08/17 20:00:59
>>251
SVR4

>>252
お前こそ何を言ってるんだ。

254:デフォルトの名無しさん
06/08/17 20:50:20
>>253
どうやって識別できるの?

255:デフォルトの名無しさん
06/08/17 21:39:13
>>254
LinuxはSVR4、*BSDはBSD

256:デフォルトの名無しさん
06/08/17 21:46:12
LinuxはSytemV系かBSD系かといえば、どちらかというとSysemV系という感じ。
詳しくはURLリンク(ja.wikipedia.org)

257:デフォルトの名無しさん
06/08/17 21:46:56
>>255
utmpファイルの場所がBSD系と同じなんだが

258:デフォルトの名無しさん
06/08/17 21:48:16
>>257
>>256

259:256
06/08/17 22:05:56
>>255
ようわかったわ

260:256
06/08/17 22:22:10
>>259
誰ディスカ?

261:デフォルトの名無しさん
06/08/18 00:48:44
>>256
そこの UNIX 系統図は酷いな。
ここ(URLリンク(www.levenez.com))までしろとは言わんけどさ、
もうちょっと、ねぇ。

262:デフォルトの名無しさん
06/08/18 00:55:44
>>261
耐えられないほどひどいのなら、書き換えていいんですよ。

263:デフォルトの名無しさん
06/08/18 01:12:33
>>262
貧乏人を見るのが小金持ちの楽しみなのさ。

264:デフォルトの名無しさん
06/08/18 01:29:44
>>261の関係図はGraphvizを使ってるのかな

265:デフォルトの名無しさん
06/08/18 14:25:44
>263
悪趣味……

266:デフォルトの名無しさん
06/08/18 23:59:52
宗教の勧誘は最高に素敵な趣味だよな。

267:デフォルトの名無しさん
06/08/20 21:26:23
詳解UNIXプログラミングで勉強してます
なかなか難しいっす

268:デフォルトの名無しさん
06/08/21 05:06:48
なんかUNIXのdaemonてマルチプロセスが多いみたいだけどなんででしょう?
全部マルチスレッドでやったらいいと思うんですけど

269:デフォルトの名無しさん
06/08/21 09:51:42
スレッドが簡単に使えるようになる前からあるコードが多いから。

270:デフォルトの名無しさん
06/08/21 12:35:49
・ひとりがこけたらみなこけた、にならないように
・再起動しやすいように

271:デフォルトの名無しさん
06/08/21 21:48:34
>>270
スレッド間グローバル変数みたいなアホなテクが使えないので結果的にコードがすっきりする。

272:デフォルトの名無しさん
06/08/21 23:35:06
そんなの全部後付けの理由だろ。

本当の理由は>>269の言うように
Unixにまともなスレッドが実装されたのがかなり後だから。

で、それまでの資産(書籍やサンプル等も含めて)が多数あり
マルチプロセス向きの機能や性能が常に強化の目標になっていたからさ。

273:デフォルトの名無しさん
06/08/21 23:39:06
>>271


274:デフォルトの名無しさん
06/08/21 23:40:47
>>272


275:デフォルトの名無しさん
06/08/21 23:49:41
>>273


276:デフォルトの名無しさん
06/08/21 23:53:49
>>274


277:デフォルトの名無しさん
06/08/21 23:59:54
>>275


278:デフォルトの名無しさん
06/08/22 00:16:18
まともでポータブルなスレッドの実装なんて、今でもあるのかどうかw

279:デフォルトの名無しさん
06/08/22 00:19:06
商用Unixであれば、ポータブルなんて考えなくていいから

280:デフォルトの名無しさん
06/08/22 00:44:17
そういうのでスレッドが利きそうなのは、スレッド化されてるんじゃないの?
nfsがらみとかさ。

281:デフォルトの名無しさん
06/08/22 20:21:13
スレッドってエンドユーザが扱いにくいだろ
プロセスなら扱いやすい。

エンドユーザのことを考えろよ

282:デフォルトの名無しさん
06/08/22 21:10:46
UNIXのエンドユーザーなんて大規模サーバの管理者だったりするわけで
多少の扱いやすさより効率うpの方がうれしいと思うけど

283:デフォルトの名無しさん
06/08/22 22:18:22
>>281
子プロセス一個殺せたところで嬉しくも何ともない。

284:デフォルトの名無しさん
06/08/22 22:19:48
>>283
シグナルを気軽に送れるところに意味がある。

285:デフォルトの名無しさん
06/08/22 22:24:33
>>268
マルチスレッドでやったらいいと思うのは、具体的にはどのdaemonのこと?

286:デフォルトの名無しさん
06/08/22 22:42:04
>>285
init

287:デフォルトの名無しさん
06/08/22 22:57:02
犬板にお引き取りください

288:デフォルトの名無しさん
06/08/22 23:18:27
>>284
つprocess group
つPOSIX 1003.1b

289:デフォルトの名無しさん
06/08/23 00:46:29
>>288
何が言いたいの?

290:デフォルトの名無しさん
06/08/23 01:07:58
BIND はマルチスレッドじゃなかったっけ?

>>268
歴史的な理由:スレッドが普及する前から UNIX は存在したとか、古い OS でも動かしたいとか
実装的な理由:移植性が必要とか、デバッグし辛いとか、排他が面倒とか
管理上の理由:スレッド単位で kill 出来ないとか、プロセスの方が監視し易いとか

古い環境を無視出来るなら、もっとマルチスレッドにして良いと思うよ

291:デフォルトの名無しさん
06/08/23 01:16:33
configureまたはコンパイルオプションで、マルチプロセスかマルチスレッドを
選べる奴も増えてるよね。

292:デフォルトの名無しさん
06/08/23 08:06:32
ほんとうに並列性が必要ならマルチプロセスだよね。マルチスレッドはお手軽だけど制限が多い

293:デフォルトの名無しさん
06/08/25 01:19:09
MPIとか

294:デフォルトの名無しさん
06/09/11 08:18:14
スーパー破瓜ーになりたいんですがどうすればいいですか?!!!!11!!

295:デフォルトの名無しさん
06/09/11 23:40:06
>>294
大根でも突っ込んでしまえ。

296:デフォルトの名無しさん
06/09/12 14:24:14
共有メモリをマップ中に、万一、
プロセスが 9 番受けてデタッチできずに死んでしまっても、
また起動すれば共有メモリ自体はまた正しくマップできますか?
共有メモリ自体が残っていることは問題ないとします。

297:デフォルトの名無しさん
06/09/12 14:27:29
mmapだよね?
出来ますよ。共有ファイルの権限が変わってない限り。

System V IPCの共有メモリも同様。

298:296
06/09/12 14:32:02
>>297
ありがとうございましたー!!


299:デフォルトの名無しさん
06/09/15 19:08:21
おねがいします。

自分のファイル名(x.exe)を読み込んで
xの部分がAすなわちA.exeだったらaを実行して
xの部分がBすなわちB.exeだったらbを実行する
っていうようなCのプログラムを教えてください。

300:デフォルトの名無しさん
06/09/15 19:54:46
宿題は宿題スレで

301:デフォルトの名無しさん
06/09/15 20:32:44
UNIXなのに、A.exeなんて名前をつける香具師は死んでしまえ

302:デフォルトの名無しさん
06/09/15 21:15:31
>>299
マルチ乙

35 名前: デフォルトの名無しさん 投稿日: 2006/09/15(金) 19:06:52
おねがいします。

自分のファイル名(x.exe)を読み込んで
xの部分がAすなわちA.exeだったらaを実行して
xの部分がBすなわちB.exeだったらbを実行する
っていうようなCのプログラムを教えてください。


303:デフォルトの名無しさん
06/09/15 21:37:30
busyboxのソースが参考になるかと思うんだけど

304:デフォルトの名無しさん
06/09/15 21:58:35
ヒント argv[0]

ヒント以上だな。

305:デフォルトの名無しさん
06/09/15 22:01:41
>>281
同意。
apacheで異常暴走したCGIをとめる時とか
スレッドよりマルチプロセスのほうが
気軽にkillできるということで・・

スレッドのほうがコストが低いとかスティーブンス本には
書いて歩けど中身がスレッドで見た目マルチプロセス
みたいな解はないもんかね。

スレッド単位でkillできる方法とかあれば
topをカスタマイズするとか
チャレンジしてみたいけどねーけどねー・・

306:デフォルトの名無しさん
06/09/15 22:53:13
>スレッド単位でkillできる方法とかあれば

共有してるコンテキストがボロカスになりそうだ。



307:Motif?はぁ?
06/09/15 23:01:32
ぜっっっっっっっっってーウインドウ物のプログラムなんか書いてたまるか!
て、思っていたが…書く羽目になりますた。orz


もち~ふの処女用教科書とか、ありましたら教えてくだしあ
とりあえず今は、ここ↓で勉強中でし
URLリンク(home.soka.ac.jp)

308:デフォルトの名無しさん
06/09/15 23:03:59
よりによって今からもちーふかよ。

309:デフォルトの名無しさん
06/09/15 23:32:02
>>307
茨の道にようこそ。今時のLinuxに載っているようなMotifはVer2になっているから
ComboBoxやTabPageが使えたりして便利な反面、その辺りを説明している資料は殆どない罠。

310:デフォルトの名無しさん
06/09/15 23:35:55
>>309
これからも訓練頑張って下さい。

311:デフォルトの名無しさん
06/09/16 11:25:27
>>309
私ゃ素人でアレなんでつが、あの、開発環境っぽい
ぐれーど てえのは、皆さん普通に使いますか?

312:デフォルトの名無しさん
06/09/16 19:40:20
おそらくここにはXで何か作ってる人間はいないと思われ

313:デフォルトの名無しさん
06/09/16 22:07:52
>>312
かつて作ったが、今は(そのプロジェクトは終わっているので)作っていない。

>>311
私ゃ皆さんじゃないよ~

>>310
何の訓練?

314:デフォルトの名無しさん
06/09/17 00:23:18
ぐれーどというのがgladeのことなら、
それはGtk+というツールキットを使ったアプリのUI(ウィンドウ内の部品配置)
定義を対話的に作って、それをXMLで出力するもの。Motifには無縁の存在。

315:デフォルトの名無しさん
06/09/17 00:30:41
>>314
そのXMLをパースしてmotifのウィジットを配置する関数を生成するジェネレータを作ればいい。

あなたは頭が固すぎる。


316:デフォルトの名無しさん
06/09/17 02:11:51
>>315
仕事で似たようなことやってるが、不毛だぞ。

317:デフォルトの名無しさん
06/09/20 21:24:01
シェルのプログラムのBASHを使って、

九九の表を作成したいのですが、記述例を教えてください。

お願いします。

Whileとか使った方がいいようです。。。

できれば、説明もお願いします。

318:デフォルトの名無しさん
06/09/20 21:43:32
>>317
$ for n in `seq 9`; do for m in `seq 9`; do echo -n `expr $n '*' $m` ""; done; echo ;done

man seq
man expr


319:デフォルトの名無しさん
06/09/20 21:56:35
どーせ質問者Linux使ってるだろうからあるだろうけど、
seqって可搬性あるんだっけ?

yes '' | cat -n | head -9 とか書けばいい?

320:デフォルトの名無しさん
06/09/20 22:13:45
そっか、可搬性か。bash限定だから
s/`seq 9`/{1..9}/g
かな?

321:デフォルトの名無しさん
06/09/21 07:58:39
# cat seq
#! /bin/sh
if [ $# -lt 1 ]; then
echo missing operand 1>&2
exit 1
elif [ $# -gt 3 ]; then
echo extra operand 1>&2
exit 1
elif [ $# -eq 1 ]; then
FIRST=1
INC=1
LAST=$1
elif [ $# -eq 2 ]; then
FIRST=$1
INC=1
LAST=$2
elif [ $# -eq 3 ]; then
FIRST=$1
INC=$2
LAST=$3
fi

n=$FIRST
while [ "$n" -le "$LAST" ]; do
echo "$n"
n=`expr "$n" + "$INC"`
done


322:デフォルトの名無しさん
06/09/21 21:07:18
皆さん考えてくださってありがとうございます。

考えてくださっているのですが、

IFやFOR等は使っちゃだめみたいなんです。

記述は、

#!/bin/bash

while [ ]
do
done

のような記述のみでつくれっていわれてるんです。

whileは自動的に表示結果に改行が入ってしまいますよね?
その改行をなくすにはどうしたらいいんでしょうか?

323:デフォルトの名無しさん
06/09/21 21:38:47
宿題ですか。

324:デフォルトの名無しさん
06/09/21 22:00:28
$ n=1;while test $n -le 9; do m=1;while test $m -le 9; do echo -n `expr $n '*' $m` ""; m=`expr $m + 1`; done; echo; n=`expr $n + 1`; done

echo -nを使う

325:デフォルトの名無しさん
06/09/21 22:07:03
正直、宿題です orz

326:デフォルトの名無しさん
06/09/21 22:33:04
echo -nを使っている状態で、改行させるにはどうしたらいいですか?

327:デフォルトの名無しさん
06/09/21 23:03:53
echo -n "hoge" "
" "hage"


328:デフォルトの名無しさん
06/09/23 10:16:53
>>326
-nを付けない。

329:デフォルトの名無しさん
06/09/23 10:50:33
\n

330:デフォルトの名無しさん
06/09/26 13:16:41
ありがとうございました。
無事、宿題を終えました。

色々と教えてくださった方々感謝します。

331:デフォルトの名無しさん
06/10/02 23:08:27
だれか教えて。
Makefileで環境変数(PATH)を変更したいのです。
現在設定されているPATHの先頭に/aaaを追加するには
どう記述すればよいですか

332:デフォルトの名無しさん
06/10/02 23:52:36
>>331
PATH=$(PATH):/aaa

333:デフォルトの名無しさん
06/10/02 23:55:44
PATH=/aaa:$PATH

334:331
06/10/03 00:18:02
ありがとう^^
試してみます。

335:デフォルトの名無しさん
06/10/03 09:41:22
>>333
括弧つけろよ。

336:デフォルトの名無しさん
06/10/04 01:51:39
>>321って何?

337:デフォルトの名無しさん
06/10/04 01:59:02
>>336
動かしてないけど、連続した数の列を吐くスクリプトだな。

その上にある質問(>>317)への回答(>>318)に出てきたGNUのseq(やBSDの
jotだっけ?)は移植性がないので、スクリプトとして作ったわけ。

スクリプトのはじめの長いif文は引数の数によって、開始値・終了値・刻みを
セットしている。(case $# in...のほうが見やすいかも)

338:デフォルトの名無しさん
06/10/04 16:02:10
esac だけはいまだに慣れない

339:デフォルトの名無しさん
06/10/04 16:12:40
caseだとこうか。

case $# in
1) FIRST=1; INC=1; LAST=$1;;
2) FIRST=$1; INC=1; LAST=$2;;
3) FIRST=$1; INC=$2; LAST=$3;;
*)
[ $# -lt 1 ] && echo missing operand 1>&2
[ $# -gt 3 ] && echo missing operand 1>&2
exit 1;;
esac

340:デフォルトの名無しさん
06/10/05 10:21:44
マイナスになることはないので、0)と*)でいいのではないか?

341:デフォルトの名無しさん
06/10/08 01:31:24
すみません、突然なんですけど
昨日プログラミングの講義で課題を出されて
eのx乗を求めるプログラムを作れと言われて
困ってます。昨日からずっと考えてるんですが
全くわかりません。
どなたか教えてもらえませんか?


342:デフォルトの名無しさん
06/10/08 01:48:32
pow関数使ってもいいのか?

343:デフォルトの名無しさん
06/10/08 01:49:04
昨日からずっと考えてるって…
何を、どんな知識をベースに考えてたんだ?

単純に、こういうことなんじゃないのか?
URLリンク(www.google.co.jp)


344:デフォルトの名無しさん
06/10/08 02:08:30
>>341
UNIX関係あるのか?
math.h使わないとして普通に考えても
0乗なら 1
1条なら e
x乗なら e^x
をしたらいいだけじゃないのか?

345:デフォルトの名無しさん
06/10/08 02:16:04
xが整数とは限らないとちょっと面倒かも
つか宿題スレ池

346:デフォルトの名無しさん
06/10/08 02:22:40
>>344
LINUXでやってます。
プログラミングの知識が乏しくて
プログラミングをかけないんです。
#include <math.h>
double log(double x);
って感じで書くんですけど・・・
その後がいまいちわからなくて・・・

347:344
06/10/08 02:27:22
>>346
入門書読め

乗算以前にC言語の構文が理解できてない

348:デフォルトの名無しさん
06/10/08 02:41:50
eが自然対数の底ならlog(x)じゃなくexp(x)でそのものずばりだろ。

349:デフォルトの名無しさん
06/10/08 03:13:13
exp(x)関数使わせるだけの演習なの?

350:デフォルトの名無しさん
06/10/08 03:16:42
構文が理解できてないようだから、構文の勉強中じゃないの?

351:デフォルトの名無しさん
06/10/08 05:41:59
金払ってまで勉強する領域で講義もろくに聞いてないとは。

352:デフォルトの名無しさん
06/10/08 06:06:21
俺も思う。

金払って勉強してるのに、なぜ答えてくれるかどうかもわからない2chなんかで聞くのか。
金払ってるんだから講師にでも聞けよ

353:デフォルトの名無しさん
06/10/08 10:22:06
勉強でも遊びでも、学生時代の経験ってのは大切だ。

市民権のある立場を買ってると考えればよい。

354:デフォルトの名無しさん
06/10/08 13:26:51
留学生には市民権はないぞ。
市民権というのは、citizenshipの訳語で、
政治参加の権利を持っている人のことだぞ。
ギリシャのポリス市民から来ている。


355:デフォルトの名無しさん
06/10/08 17:01:33
>>354
どうでもいいよ。定義なんて。

356:デフォルトの名無しさん
06/10/08 17:07:05
>>355
どうでもいいよ。お前の意見なんて

357:デフォルトの名無しさん
06/10/08 17:11:18
>>356
じゃあわざわざwikipedia書くような労力払わんで下さいよ。

358:デフォルトの名無しさん
06/10/08 17:11:39
キミタチキモイヨ

359:デフォルトの名無しさん
06/10/09 13:21:17
GCCとMakeの質問です。

Apacheモジュールからpostgresへつなげる処理を
作っているのですが、
Makeしたときに"closesocket"関数がpostgres.hとport.h内で再定義(redefined)された
という警告が出力されます。
こういう場合、何か回避するよい方法がありますでしょうか?

今のところpostgres側のヘッダ(port.h)に
#define closesocket pg_closesocket
とかすればよいのだろうかと考えていますがどのような影響があるかわからず躊躇しています。

・Make時のログ
In file included from /usr/local/include/postgresql/server/c.h:822,
from /usr/local/include/postgresql/server/postgres.h:48,
from mod_blog.c:9:
/usr/local/include/postgresql/server/port.h:273:1: warning: "closesocket" redefi ned
In file included from /usr/local/include/apache/httpd.h:29,
from mod_blog.c:2:
/usr/local/include/apache/ap_config.h:1084:1: warning: this is the location of t he previous definition
・ソースファイル(ヘッダ部)
#include <string.h>
#include "httpd.h"
#include "http_config.h"
#include "http_protocol.h"
#include "ap_config.h"
#include "http_log.h"
#include "libapreq/apache_request.h"
#include <postgres.h>
#include <libpq-fe.h>
<略>

360:デフォルトの名無しさん
06/10/09 13:22:35
警告出したくないだけなら/dev/nullにパイプしろ

361:359
06/10/09 13:29:00
訂正です。
X Makeしたときに"closesocket"関数がpostgres.hとport.h内で再定義(redefined)された
○ Makeしたときに"closesocket"関数がap_config.hとport.h内で再定義(redefined)された

>>360
いやそれだと意味が...;

362:デフォルトの名無しさん
06/10/09 13:40:11
>>359
自作モジュールでclosesocketを使わなければうまく行く。
(と言うか問題があればリンク時にこけるので取りあえず無視して良い)

363:デフォルトの名無しさん
06/10/09 13:40:14
>>361
どう回避したいのかいってないから、警告を表示したくないと思われても仕方ない罠

364:デフォルトの名無しさん
06/10/09 13:41:04
>>363
知らんのなら出てくんなや。と言う正論。

365:デフォルトの名無しさん
06/10/09 13:51:04
知った上で書き込めるのはエスパーだけ!

366:デフォルトの名無しさん
06/10/09 13:53:03
>>365
そこそこ回答が上がってるわけですがw


367:デフォルトの名無しさん
06/10/09 13:56:45
じゃぁ、それで満足しておけよw

368:359
06/10/09 13:57:12
>>362
>>と言うか問題があればリンク時にこけるので取りあえず無視して良い)
なるほどー
今のところ、モジュール自体は動いているし
Makeがエラーを吐いてとまることもないので
実用上問題はないかも・・・と
とりあえず
postgresの関数の内部(PQfinishとか接続を切る系?)
などの中で該当関数が使われてないかをみて影響範囲を絞り込んでみます。
ありがとうございます。

>>363
そうですねー
重複しているclosesocket関数が、内部的に衝突・上書きされずに共存する回避の仕方
がないかということです。

369:デフォルトの名無しさん
06/10/09 14:17:22
#ifndef __WIN32__
#define closesocket close
#endif

みたいな感じだと思うけどねー。


370:デフォルトの名無しさん
06/10/10 14:59:06
任意の長さの文字列データをファイルから読み込み、辞書順に並び替えて最終結果のみを表示するプログラミングを作成せよ。ただし、データは改行で区切られており、文字列の最大長を64、データの最大個数を1000とする。
っていう問題が学校で出たんですけど、誰か教えてくれませんか。

371:デフォルトの名無しさん
06/10/10 15:00:13
>>370
先生に聞け

372:デフォルトの名無しさん
06/10/10 15:20:36
辞書順の定義が謎だね。出題者(センセ)は分かってるんだろうか。
アルファベットだけでも aAbBなのかAaBbなのかabABなのか
ABabなのかはロカールによって違う。

ロカール指定で済むなら、strcmpの代わりにstrcollを使えば
LC_COLLATEを見てくれるので話ははやいが。

373:デフォルトの名無しさん
06/10/10 16:01:45
UNIX関係ない質問に答えている人って馬鹿なんでしょうか?

374:デフォルトの名無しさん
06/10/10 16:04:31
関係ない上に重箱の隅w

375:デフォルトの名無しさん
06/10/10 22:22:53
釣りだろ。373に答える奴は馬鹿かとも言ってるわけだから。

376:デフォルトの名無しさん
06/10/11 02:34:40
>>370
system("sort");

377:デフォルトの名無しさん
06/10/11 04:56:51
>>376おそれいった。

378:デフォルトの名無しさん
06/10/11 23:15:38
>>文字列の最大長を64
ぬるい。
どうせなら文字列は可変長、リストに格納しつつソートとか
のほうが実践的

379:デフォルトの名無しさん
06/10/11 23:51:43
>>378
実戦で底までせなあかん局面がない。

380:デフォルトの名無しさん
06/10/12 01:00:06
メモリ資源の乏しい計算機でも実行できるというメリットがある

381:デフォルトの名無しさん
06/10/19 11:41:06
コマンド実行で誤って*******(アスタリスク7文字)を入力したら
subjectの入力となりました。

mailコマンドを実行したわけでもなく原因がわかりません。

ご教授よろしくお願いします。


382:デフォルトの名無しさん
06/10/19 11:46:27
echo ******* とかやってみ。たぶん先頭にMailがいるんじゃないか?


383:デフォルトの名無しさん
06/10/19 11:53:58
>>381
鼬害。シェルにおける'*'の意味を考えれば、何が起きたか判るはず。

384:デフォルトの名無しさん
06/10/19 22:05:28
>>383
それを説明しろ
できねんだろ?

385:デフォルトの名無しさん
06/10/20 00:17:47
ありゃりゃ?そこにからむのか?w

386:デフォルトの名無しさん
06/10/21 22:48:10
すみません。どなたか教えてください。

cout << "こんにちは" << endl;

を含むコードをコンパイルし、実行したところ、"こんにちは"の部分が文字化けして、読めません。
OSはCent OS4.3です。

387:386
06/10/21 22:49:39
どうしたら、日本語の出力ができるようになるんでしょうか?

388:デフォルトの名無しさん
06/10/21 23:03:29
>387
ロケールを設定。
URLリンク(www.google.co.jp)

389:デフォルトの名無しさん
06/10/22 11:34:31
常にウインドウを最前面に配置したいのですが、
それはどのようにして実現できるのでしょうか?

390:デフォルトの名無しさん
06/10/22 12:06:50
>>389
ウィンドウ環境によって異なります。

391:デフォルトの名無しさん
06/10/22 12:42:58
>>390
汎用的な方法は無いのでしょうか?


392:デフォルトの名無しさん
06/10/22 13:00:05
>>391
window managerにそう指定する。

393:デフォルトの名無しさん
06/10/22 13:19:10
>>392
どこが汎用的なんだ?

>>391
やったことないけど、Windowが隠されたら最前面にマップするようにしたら?


394:デフォルトの名無しさん
06/10/22 13:54:08
> Windowが隠されたら最前面にマップ
2つのアプリがそれやり出したらとっても楽しいことになりそうだな

395:デフォルトの名無しさん
06/10/22 13:54:25
そもそもXWindowかどうかさえ判らないのに汎用的な方法なぞあるわけがない。

396:デフォルトの名無しさん
06/10/22 13:57:40
>>394
重なったWindowのプロパティ見れば?

397:デフォルトの名無しさん
06/10/22 14:01:27
>>396
素朴な疑問だが、どんなウインドウシステムを仮定している?

398:デフォルトの名無しさん
06/10/22 14:10:56
>>397
汎用的な方法なんだから何も仮定してるわけないだろ。
それでプロパティってのが何のことなのかはさっぱりわからんが

399:デフォルトの名無しさん
06/10/22 14:16:43
XならWMに対してポリシーのヒントみたいのん設定するんじゃないっけ
あとはWM次第みたいな

400:デフォルトの名無しさん
06/10/22 14:22:38
>>399
それ>>392じゃないの?
違いは「Xなら」と「あとはWM次第」って予防線?

401:デフォルトの名無しさん
06/10/22 14:26:03
ああ、そうなんだけど、なんか妙な方向に流れてるから多少具体的に言ってみました

402:デフォルトの名無しさん
06/10/22 17:50:02
環境がわからないのに汎用的な方法もクソも無いだろうに…

403:デフォルトの名無しさん
06/10/22 20:27:21
>>402
環境を選んでる時点で汎用ではないだろ

404:デフォルトの名無しさん
06/10/23 23:08:26
ウィンドウのない環境まで想定したら汎用的な方法などありえない、で終わってしまうな

405:デフォルトの名無しさん
06/10/26 05:06:24
cursesならキャラクタ端末でもウィンドウが

406:デフォルトの名無しさん
06/10/26 07:44:01
質問した奴はげんなりしてるだろうなw

407:デフォルトの名無しさん
06/10/26 15:31:08
Xのプログラムで質問です。

外部からの指示により、スクリーンサイズと同じサイズの背景透
過なウィンドウを作成したいのですが良い方法はありませんか?

やりたいことは、画面上は他のウィンドウが表示されているけど
画面をクリックしたらそのイベントを他のウィンドウに渡さず透
過なウィンドウで受けとって座標位置にあった処理をしたいので
す。

デプス1のピクスマップをつくってXShapeCombineMask()を使
用したら透明なウィンドウはできたのですが、画面クリックする
と透過された他のウィンドウがイベント拾っちゃいました(TT

408:386
06/10/29 15:15:49
>>388
レスが遅くなりましたが、ありがとうございます。
なお、ロケール設定後も文字化けして表示してしまって
いました。その後、SSHクライアントが日本語に対応して
いなかったためだと分かり、やっと解決しました。

409:デフォルトの名無しさん
06/10/29 18:07:23
>>407
xwininfoのソース嫁

410:デフォルトの名無しさん
06/11/01 16:26:12
>>409
それは XGrabPointer使えってことだよね。>>407 が考えていることとは微妙に違う気がする。


411:デフォルトの名無しさん
06/11/01 19:49:03
>>407
XShapeで作成したウィンドウは、下のレイヤのウィンドウを透過しているのではなくて、ビットマスクによって自身の
ウィンドウの形状を変更(クリッピング)している。ウィンドウが無いとみなされているので、下のレイヤのウィンドウに
イベントが通知される。

参考になりそうなのはkinput2等、IMのソース。
・class=InputOnly, override_redirect=True なウィンドウを作成すると、非表示のウィンドウでマウス入力が取れる。
・非表示のウィンドウはフォーカスを持たないため、キー入力を取るためには別途 XGrabKeyboard すれば桶。


412:デフォルトの名無しさん
06/11/02 22:15:24
TCP サーバーソケットで、受信メッセージからDestination IP addressの取得するのは、どうすればよいでしょうか?
一応今までは、UDPだったので、RAWソケットを使ってIPパケットを見ていたのですが、
今度、TCPでもやることになってしまいました。
RAWソケットを使わず、取得する方法は無いでしょうか?



413:デフォルトの名無しさん
06/11/02 22:26:55
>>412
Packet Socket

414:デフォルトの名無しさん
06/11/02 22:30:26
acceptのときに得られるんでない?

415:デフォルトの名無しさん
06/11/02 22:41:49
>>412
×受信メッセージから
○受信ソケットから

getpeeraddr(2)



416:デフォルトの名無しさん
06/11/02 23:35:44
getsockname

417:デフォルトの名無しさん
06/11/04 10:27:33
>>412
質問を明確にしたほうがいいんじゃない?
受信パケットのDestinationってことは、自ノードのアドレスってことだよね
複数アドレスがある場合に特定する方法があれば俺も知りたい(以前調べてわからんかった)

418:デフォルトの名無しさん
06/11/04 11:08:42
>>417
ギャグですか?

419:412です
06/11/04 14:18:42
すみません。レス遅れました。
getsocknameで、自分の情報(受信ソケットの場合Destination IPを取得)ということですね。
どうもありがとうございます。

>>417
そうです。受信パケットのDestinationってことです。もう少しこの部分を強調すれば
良かったですね。

>>413
パケットソケットだと、RAW ソケットになるとおもいますが、私の勘違い?

420:デフォルトの名無しさん
06/11/05 12:20:08
ファイルやディレクトリが存在するかどうかを調べるにはどうしたらよいでしょうか?


421:デフォルトの名無しさん
06/11/05 12:40:52
stat

422:デフォルトの名無しさん
06/11/05 12:55:23
>>421
ありがとうございます。やってみます。

423:デフォルトの名無しさん
06/11/09 14:50:43
close(2)が失敗した場合、ファイルデスクリプタはまだ有効なんでしょうかね?
つまりもう一度closeを呼ぶべきかということですが。
EBADF, EINTRの場合は自明として、それ以外の場合は?

424:デフォルトの名無しさん
06/11/09 23:12:35
中のワークエリアを開放するのは一番最後だろうから、
生きてるんじゃないかい。


425:デフォルトの名無しさん
06/11/09 23:20:26
stat(2)が正統だろうけど、ENOENTが返るならなんでもOKかも。access(2)とか。


426:デフォルトの名無しさん
06/11/10 00:18:02
>>424,425
複数のプロセスがopenしてる可能性を考えたことはないのか?
システムリソースとプロセスリソースは別物だって考えたことはないのか?

Unix系前提で話をすれば...
o closeすればプロセスリソースは破棄.
o 該当資源を最後にcloseしたやつは待たされるかもしれんが
プロセスリソースは破棄されている(システムコールから戻ってくれば)
o 残ったI/O処理は破棄される(ドライバが正常/以上完了すれば)
o ドライバの作りによっては, プロセスはゾンビになってkillすらできない
o 最悪の場合システムダウン


427:デフォルトの名無しさん
06/11/10 07:18:21
おちんぽ^^

428:デフォルトの名無しさん
06/11/10 12:16:43
>>426
複数のプロセスがopenしていても、close したプロセスでは
ファイルディスクプリタは無効になるんじゃない?
だから>>425は別に問題ないように思うけど。


429:デフォルトの名無しさん
06/11/10 12:21:40
お前ら流れよく読め。425は423じゃなく420への回答だろ。

430:デフォルトの名無しさん
06/11/10 12:23:53
>>423
もう一度呼ぶべきかどうかは俺にはわからんが、気になるなら
成功かEBADFのどちらかになるまでリトライすりゃいいんじゃね?


431:デフォルトの名無しさん
06/11/10 12:24:10
>>426>>424,425にまとめて説教してるのが謎

432:デフォルトの名無しさん
06/11/15 20:35:50
>>426
しらんぷりしてりゃいいんだよ

433:デフォルトの名無しさん
06/11/18 18:51:54
close(2)が失敗するような状況で何ができるの?

434:デフォルトの名無しさん
06/11/18 21:33:25
警告メッセージを吐いておくくらいかな

435:デフォルトの名無しさん
06/11/19 00:32:14
ファイルデスクリプタは放置?

436:デフォルトの名無しさん
06/11/19 02:17:14
ファイルデスクリプタが間違ってたらclose(2)は失敗するけど
間違ったファイルデスクリプタはどうしようもないやん

437:デフォルトの名無しさん
06/11/23 09:53:13
デーモンとか常駐するプログラムの終了処理ってどうすればいいんでしょう?
シグナルを受け取ったら終了処理、っていう感じでいいんでしょうか

438:デフォルトの名無しさん
06/11/23 10:26:44
SIGTERMのハンドラで正常終了処理。

例えば、Debian GNU/Linuxだと、
start-stop-daemonコマンドで--stopすることになっているけれど、
この時の送られるシグナルはディフォールトだと、SIGTERM。

FreeBSDでshutdownする時も、SIGTERMが送られる。

kill(1)のディフォールトがSIGTERMだかね。

439:デフォルトの名無しさん
06/11/23 10:32:11
ありがとうございます!

440:デフォルトの名無しさん
06/11/24 08:29:20
シグナルは非同期なので、ハンドラでフラグを立てて
適切な時にフラグをチェックすると楽

441:デフォルトの名無しさん
06/11/24 09:41:33
デバッグ時には、コントローリングターミナルを切り放さずに、
フォアグラウンドで実行することが多いから、
Ctrl-Cで止めた時の、SIGINTも同じハンドラにしておくと便利。

442:デフォルトの名無しさん
06/11/27 08:46:54
>>440
シグナルが非同期、というのは
メインスレッドでハンドラが実行される
ということですよね?

443:デフォルトの名無しさん
06/11/27 09:03:23
>>442
どのスレッドがシグナルを受け取るかはOSにより異なる

444:デフォルトの名無しさん
06/11/27 15:34:27
シグナルマスクで制御できんじゃね?

445:デフォルトの名無しさん
06/11/27 19:15:05
それではpthread_createからpthread_sigmaskまでの間が危険。

普通はメインスレッド以外ではpthread_killでメインスレッドにシグナルを
ルーティングするだけにして、そちらで処理する。
SEGVとかは原因となったスレッドに通知されるのでその限りではないが。

446:デフォルトの名無しさん
06/11/27 19:28:59
スレッド作るまえに全部ブロックしといて、そのあと専用スレッドでsigwaitしてりゃいんじゃね?

447:デフォルトの名無しさん
06/12/02 00:39:35
今開発中の環境でディスクに書き込む速度を調節したいのですが
RAID5の書き込みで、400MB/secも速度が出てしまいちょっと
長い時間データの読み書きを1プロセスが行うだけでIOを占拠してしまいます。

そこで1プロセスで使用できるディスクの速度を75MB/sec固定にしたいのですが
どうやってやればいいのかご存知の片いませんか?

448:デフォルトの名無しさん
06/12/02 01:32:53
OS が何だか知らないけど、複数プロセスで書き込めば勝手に分散されるでしょ。

449:デフォルトの名無しさん
06/12/02 01:33:23
>>447
で、あんたの使っているOSは?

450:デフォルトの名無しさん
06/12/02 01:55:54
HPです

451:デフォルトの名無しさん
06/12/02 02:00:53
>>448
それだと平均75MB/sec出ないのですよ
Readだけで合わせても、30MBと150MBとか
わかれてしまって困ってます。均一に資源を割り当てたいが
どうすればいいのかさっぱりわかりません

452:デフォルトの名無しさん
06/12/02 02:23:06
dd で同じオプションで2並列で書き込んでも大きな差が出るの?

453:デフォルトの名無しさん
06/12/02 08:14:13
流れ切ってすいません…。
設定ファイルを読み込み、解析するためのライブラリはないでしょうか?

454:デフォルトの名無しさん
06/12/02 08:58:22
>>453
あります。
うちのプロジェクトではみんなが好き勝手に設定ファイルを作りたがるので、
切れて共通で使えるようなライブラリを提供してフォーマットを固定にしました。

455:デフォルトの名無しさん
06/12/02 12:45:51
>>453
XMLで書けばいいじゃん
最終的にノード単位で結合すればいいんだし
もし設定ファイル読むのに遅いとかいいだしたら
勝手にやって暮れだが

456:デフォルトの名無しさん
06/12/04 09:32:42
手で書くのが前提の設定ファイルならXMLはお勧めできない。
YAMLあたりで。



457:デフォルトの名無しさん
06/12/04 18:18:36
手で書くのだって、XML扱えるテキストエディターの方が多い。

458:デフォルトの名無しさん
06/12/05 05:23:11
>>453
C なら libConfuse とかってライブラリがあるよ。
あとは Boost の program_options とかどうよ?

459:デフォルトの名無しさん
06/12/05 12:08:08
質問です。
普段Microsoft Visual C++を使って数値演算をしているのですが、
演算サーバーの方が処理が早いということで、UNIXを使い始めたところ、
Visual C++で走るプログラムがUNIXとなると実行結果に『NaNQ』が出てきてしまいます。
ソースは同じものを使っているはずなのに。。。
UNIXでのコンパイルは成功しています。

原因としては何が考えられるのでしょう??

460:デフォルトの名無しさん
06/12/05 12:26:53
OS の名前もコンパイラの名前もプログラミング言語の名前も処理の内容も書いてないから
当てずっぽうだけど、改行コード/バイトオーダー/データモデルの何れかじゃない。

取り敢えず改行コードを LF のみに変換してみては?

461:デフォルトの名無しさん
06/12/05 12:42:58
スマソ。言語は C++ だったか。

462:デフォルトの名無しさん
06/12/05 12:54:12
>>459
普通にどっかで桁落ちしてるんじゃねぇの?


463:デフォルトの名無しさん
06/12/05 13:06:31
このような事ができるようなプログラムを1時間以内で教えて下さい。お願いします

1:4個の1桁の数字からなる順列を乱数で生成
(4個の数字は全て異なる)
2:4個の数字の順列を入力
3:生成した順列と入力の順列を比較
(数と位置があっている「hit])
(数はあるけれど位置が違う「blow])
4:hit数とblow数を表示
5:順列があたるまで入力を繰り返す

実行例
Number?:0123
Hits:0,Blows:1
Number?:0124
Hits:0,Blows:0
Number?:3567
Hits:3,Blows:0
Number?:3568
Hits:3,Blows:0
Number?:3569
Hits:4,Blows:0
Trials:5

464:デフォルトの名無しさん
06/12/05 13:08:49
>>463
宿題スレ行けよ


465:デフォルトの名無しさん
06/12/05 14:09:51
>>459
そういうときはFPUのCWを再設定しろ。
ってばっちゃがいってた。

どうでもいいけどQNaNじゃないの?



466:デフォルトの名無しさん
06/12/09 16:31:42
WindowsのGDI+並に高機能で、主にUNIXで動く、
画像ファイルの読み書き・描画などを行うライブラリはありますか?(GDよりも高機能で
できればC/C++等で使えるものでありたいのですが、GIMPのスクリプトとかになるのでしょうか。

467:デフォルトの名無しさん
06/12/09 17:11:33
UNIX板でいきなりGDI+といわれても…

468:467
06/12/09 17:13:10
ごめん。UNIX板ではなかった。
で、なにそれ?

469:デフォルトの名無しさん
06/12/09 17:48:10
>>466
cairoとかになるのかなぁ


470:デフォルトの名無しさん
06/12/09 17:53:05
何やりたいかによるんでわ?
画像開いてちょっと加工するならImageMagickとか・・・

471:デフォルトの名無しさん
06/12/12 13:17:21
linux上でプロセス情報を取得するプログラムを作成したいと思っています。

検索して調べたところ
task_structという構造体にプロセス情報が格納されているということは分かったのですが、
検索したサイト先であげられているヘッダファイル "include/linux/sched.h" 内に
task_structに関する記述が無いのです。

上記構造体を利用するためには、
何か別の手段をとらないといけないのでしょうか?

カーネルバージョンは"2.4.21-20.EL"です
分かる方いましたらよろしくお願いします。

472:デフォルトの名無しさん
06/12/12 13:24:27
Linuxの事は良く知らんけど、それってカーネル内のデータ構造と違うの?
/procとか見ただけじゃいかんの?

473:デフォルトの名無しさん
06/12/12 13:36:11
ユーザーレベルでそういう情報が見られるように procファイルシステム
というのがあるわけだが。


474:471
06/12/12 14:03:15
>>472-473
レスありがとうございます。
プログラム中からカーネルのプロセス情報を取得するのはムリなのでしょうか?

475:デフォルトの名無しさん
06/12/12 14:07:55
>>474
お礼だけ言って内容は無視するのかよ!

476:471
06/12/12 14:44:05
>>475
申し訳ないです。

やりたいことなのですが
psコマンドで表示されるプロセスのプロセス名を全て取得し、
指定したプロセス名が存在したらそのプロセス開始時間を取得する。
という処理をC言語で実装したいのです。
なので>>471の内容で質問をしました。

>>472-473さんの仰るように/procを参照しようとすると
何らかの手段で全プロセスのプロセス番号を取得する必要があると思うのですが
c言語でそのようなことは可能なのでしょうか?

477:デフォルトの名無しさん
06/12/12 14:50:00
これでも読んだら?
URLリンク(www.linux.or.jp)

478:デフォルトの名無しさん
06/12/12 14:50:49
/proc/[0-9]*/cmdlineを全てfopenして読め。

該当するのが見つかったら、
/proc/該当するPID/statを読んで、start_timeを調べろ。
/usr/src/linux-*/fs/proc/array.cを読めばどれか分かる。

479:デフォルトの名無しさん
06/12/12 17:27:38
>>476
psのソース嫁

480:デフォルトの名無しさん
06/12/12 19:01:17
psの出力を使ったほうが。

481:デフォルトの名無しさん
06/12/12 19:07:45
Linuxなら/proc覗くのが普通なんじゃないの?

482:デフォルトの名無しさん
06/12/12 22:55:57
>>476
> >>472-473さんの仰るように/procを参照しようとすると
> 何らかの手段で全プロセスのプロセス番号を取得する必要があると思うのですが
> c言語でそのようなことは可能なのでしょうか?
それが/procを参照するってことだ。
opendir() & readdir()

483:デフォルトの名無しさん
06/12/13 05:48:39
readdir()するくらいならlsの出力でも……
と書き掛けて気付く。それだったらpsでいいね。

484:デフォルトの名無しさん
06/12/14 22:29:15
UNIXでは標準コマンドの出力加工して使うのって
WindowsでDLL呼び出すのと同じくらいふつーに使う気がする

485:デフォルトの名無しさん
06/12/14 22:35:46
proc読もうがps呼ぼうが、どっちでもいいけど、
見に行ったときにそのプロセスがまだある保証はないから気をつけよう。


486:デフォルトの名無しさん
06/12/14 23:04:57
それは当たり前だろう

487:デフォルトの名無しさん
06/12/15 01:31:34
>>484
しかしそれを意図して書式化されていない場合とかlsのようにオプションに
気をつけないと情報ロスが存在しうる場合は注意が必要だったりするし、
やっぱあまり普通には使わないな。
スクリプトなんかでそれで済んじゃう場合はそれでもいいけど。

特にpsの出力なんかパースするくらいなら素直に/procを読むか
kvm_なんたらを使う方が変なところで悩まなくてよい。

488:デフォルトの名無しさん
06/12/15 02:03:35
>psの出力なんかパース
もしかして、フォーマットを木目細かく指定できることをご存知内のだろうか。

489:デフォルトの名無しさん
06/12/15 07:27:53
ここもtips自慢大会か

490:デフォルトの名無しさん
06/12/15 09:30:27
NGワーオ:バッドノウハウ

491:デフォルトの名無しさん
06/12/16 10:58:01
スレリンク(tech板:298番)
> 分かりやすくMakefileの書き方が載ってるサイトがあれば教えてください

GNU makeのinfoがいいと思います。入門にも、リファレンスにもできる。
↓まずはこの節から。
Makefile入門
URLリンク(www.ecoop.net)

492:デフォルトの名無しさん
06/12/16 14:08:41
>>491
ありがとうございます。
今から挑戦してきますね。

493:466
06/12/19 07:45:47
URLリンク(kansai2channeler.hp.infoseek.co.jp)

これを理解しないと次の授業からついてこれなくなるといわれたのですが、
何をしているのかが全くわかりません。どなたかコメントで解説つけていただけないでしょうか。

494:デフォルトの名無しさん
06/12/19 08:02:04
二進木の操作

495:デフォルトの名無しさん
06/12/19 09:23:16
UNIX関係ねーし。

LOOP1:
fprintf(stdout," followed by any nonnumeric character:");
if(scanf("%d",&x) != 1){ goto LOOP1END; }
Insert(&root, x);
goto LOOP1;
LOOP1END:

ワロタ

496:デフォルトの名無しさん
06/12/19 09:34:13
whileを知らんのか

497:デフォルトの名無しさん
06/12/23 05:50:37
fopenを使って書かれたプログラムを、ofstreamを使って書き換えています。
ファイル記述子の必要な関数fsyncを使いたいのですが、ファイル記述子は
どのように取得すればよいのでしょうか?

498:デフォルトの名無しさん
06/12/23 10:34:36
fileno (3)

499:デフォルトの名無しさん
06/12/23 11:05:58
こうかな?
stream.rdbuf()->fd()

500:デフォルトの名無しさん
06/12/23 11:35:47
↑いやうそです。どこでもつかえるわけじゃないらしい。

501:デフォルトの名無しさん
06/12/23 14:39:44
URLリンク(support.microsoft.com)
windowsだとこうみたいだね。

502:デフォルトの名無しさん
06/12/24 23:34:32
ところで、
 /proc/<pid>/stat/utime
 /proc/<pid>/stat/stime
ってどの関数がどのくらいの周期で
書き込んでいるのでしょうか?

503:デフォルトの名無しさん
06/12/24 23:50:09
スケジューラが、CLOCK_TICK_RATEで。

504:デフォルトの名無しさん
06/12/25 00:00:32
>>503
scheduler_tick でしょうか?それとも schedule ?
それらしき箇所が見あたりません。
できれば、何という関数で書き込んでいるのか教えてください。


505:デフォルトの名無しさん
06/12/25 01:04:11
そういうのって、読み出すときに値(カウンタ)を取得して返すんじゃないのか?

506:デフォルトの名無しさん
06/12/25 11:30:47
ほんとにファイルがあるわけじゃないしねぇ・・・

507:デフォルトの名無しさん
06/12/25 11:33:27
カウンタが更新されるタイミングを聞いていると思ったが、
/procを勘違いしている可能性もあるのか。

508:デフォルトの名無しさん
06/12/25 12:45:24
procfsのソース嫁

509:502です
06/12/25 12:46:56
■505さん
>そういうのって、読み出すときに値(カウンタ)を取得して返すんじゃないのか?
cat /proc/<PID>/stat を実行した時に cat が値を読み込むと言うことでしょうか?

■506さん
>ほんとにファイルがあるわけじゃないしねぇ・・・
たぶん、その辺が理解できていないのだと思われます。
#自分で書くのもなんですが。

■507さん
>/procを勘違いしている可能性もあるのか。
勘違いしています。もし、その辺のことが詳しく記載されている
書物があればご教示下さい。

すみません。(;。;)

510:デフォルトの名無しさん
06/12/25 12:54:16
>>509
/procは本当のファイルじゃなくて、カーネル内の情報を取り出すための仕組み。
それらを読もうとすることはカーネル内のデータを取り出す事に相当する。
そこらへんはドライバレベルでうまいことやってるので、
読み込んでるプログラムからは本当のファイルなのか、
/procのような仮想的なファイルなのかは見分けがつかない。

511:デフォルトの名無しさん
06/12/25 12:55:48
/proc以下のファイルは、(procファイルシステムは)
ファイルじゃなくて、ファイルのように振る舞うもの。

ファイルだって実際ファイルがあるんじゃなくて、
ファイルシステムがあるかのようにdisk I/Oしてるんだしね。

512:502です
06/12/26 00:36:31
■510さん、511さん
有り難うございます
もう少し修行を積んで再度出直します。



513:デフォルトの名無しさん
06/12/28 20:16:54
iconv の変換ディスクリプタが指している converter が保持している
変換の状態 (shift の状態など) を,丸々コピー (clone) して
新しいディスクリプタを作成することってできないですよね?できないですよね……

514:デフォルトの名無しさん
06/12/28 20:26:49
iconv_duplicate関数があるよ










ウソ

515:デフォルトの名無しさん
07/01/03 02:08:18
自前の暗号処理をしようと思って
crypt_des.c
を見てるんですが export されているのは crypt_des だけなんですけど
do_des とか des_chipher とかを export しなおして
自分のプログラムから使っても大丈夫ですか?
コメントには輸出規制が云々と書かれているのでちょっと心配です。


516:デフォルトの名無しさん
07/01/03 02:47:38
北朝鮮とかリビアに輸出する予定がなければ大丈夫

517:デフォルトの名無しさん
07/01/03 10:22:49
輸出規制のほうもexportと出てくるからややこしいな。


518:デフォルトの名無しさん
07/01/03 19:33:54
crypt_desは実際にはDESそのものを使っているとは言えないところを
グレーゾーンにして上手く逃げているんじゃないかな
だからdo_desを勝手に使うとまずいと思うよ
export禁止なのが輸出禁止なのか文字通りexport禁止なのかが良く分からないね
対象は米国外輸出だったと思うから北朝鮮とかリビアは関係ないんじゃないかな


519:デフォルトの名無しさん
07/01/03 19:48:16
法律が変わって同盟国には輸出OKになったんじゃなかったっけ?
IE5.01あたりで暗号強度が128bitになったのはそのおかげだし

520:デフォルトの名無しさん
07/01/04 08:23:13
くだらない質問ですいませんlll
親プロセスに対するシグナルは全ての子プロセスにも送られるんでしょうか?

521:デフォルトの名無しさん
07/01/04 19:45:11
送られない。送りたいなら「シグナル プロセスグループ」でぐぐれ。

522:デフォルトの名無しさん
07/01/04 20:03:00
送られない

523:デフォルトの名無しさん
07/01/04 20:05:12
送りたいなら

524:デフォルトの名無しさん
07/01/05 01:02:15
親が子プロセス生成時にid全部残しておいて
自分でシグナルハンドリングしてしまえばいい

525:デフォルトの名無しさん
07/01/05 04:38:32
ありがとうございます!

526:デフォルトの名無しさん
07/01/11 00:53:23
デーモンについて質問です。
デーモンプロセスを作ろうと思って
childをforkして親プロセスを終了させたりとか
詳解UNIXプログラミング通りにやりました。
どうやらうまくいったっぽいのですが、
できたプログラムがすぐにExitして終了してしまいます。

while(1)
とかでループしたりとかすると、cpu使用率が90%以上になってしまいました。

目標としては、STDINからの入力を待って、いろいろ処理した後
STDOUTに結果を返して再び入力待ちに移行するデーモンを作りたいのですが、
SIGIOを感知するまでpauseするというところまではなんとなくわかった
(つもり)なのですが、
参考になるソースコードや何かヒントだけでもいただけませんでしょうか
よろしくお願いします。

527:デフォルトの名無しさん
07/01/11 01:03:58
sleep(1)とか呼ぶと100%にはならないかな


528:デフォルトの名無しさん
07/01/11 01:23:41
select(2)は?


529:デフォルトの名無しさん
07/01/11 01:43:08
STDINから読もうとしたらブロックする(止まる)でしょ
非同期IO使ってるんじゃなければSIGIOは関係ないんじゃないの

530:デフォルトの名無しさん
07/01/11 02:17:38
>>526
> 参考になるソースコード

tail -f とかどうよ。


531:デフォルトの名無しさん
07/01/11 11:53:54
デーモンだから標準入出力閉じてるに7300スティーブンス

532:デフォルトの名無しさん
07/01/11 20:14:52
ぽまえらどこで髪切ってんの?
俺は当然ここだぜ。URLリンク(www.unix.co.jp)

533:526
07/01/12 00:32:43
どうもです。

>>527
pause()でどうやらcpu使用率0%で静止してくれました。
sleep(1)だと一瞬でsleepがとかれるみたいで・・

>select(2)
manをよんでみましたーまだよく理解できてませんが試してみます。

>tail -f
ううむなるほど、ありがとうございます。srcをあさってみます

>>529
そうですね...
なんとなくソケットのListenみたいなもののほうが近い気がしてきました。
スティーブンス本のネトワク2巻、IPCあたりを読み込んでみます。

ありがとうございましたー





534:デフォルトの名無しさん
07/01/12 06:06:30
関係ない横レスですいませんが
他のスレッドの終了を待つような処理は
while(スレッドの終了フラグ){
 sleep(1);
}
とかいう感じで待つしかないんでしょうか?

535:デフォルトの名無しさん
07/01/12 06:11:06
pthreadならjoinとか状態変数で合図するのを待つとか

536:デフォルトの名無しさん
07/01/12 06:34:33
pthreadです
ちょっと調べてみましたがデタッチについても理解していませんでした
とりあえず上の質問はナシということでお願いします

537:デフォルトの名無しさん
07/01/20 02:55:58
日本語を使えるcursesで標準のものってあるんでしょうか?

538:デフォルトの名無しさん
07/01/22 00:04:02
UNIX上で稼動するCのプログラムを作っていますが、その際
C言語のソースをWindows PCにてCVS管理しています。
下記のような段取りでやっているのですが、初心者のため、
詳しい皆さんはどんな手順で行っているのか知りたいと思います。
効率よくできる方法、一般的な方法(下記のような手順はおかしい、etc)等、
もしあればご教授いただきたく。

①必要なソースをチェックアウトし、Windows PCにて修正(エクリプス使用)
②修正したファイルをFTPでUNIXサーバにアップロード
③UNIX上でmakeを使用しコンパイル
④UNIX上で稼動確認し、問題なければソースをチェックイン

使用している環境は。。。
CVS用マシン ・・・     Windows XP
ソース修正用マシン ・・・  Windows 2000
実際に稼動するサーバ ・・・ HP-UX 11i v2

539:デフォルトの名無しさん
07/01/22 00:18:43
漏れなら5分で不機嫌になって15分でブチ切れそう。

540:デフォルトの名無しさん
07/01/22 00:19:04
>>538
・Unix上で編集しない理由は?
・稼動確認前にコミットしない理由は?
・最終確認をexport版で行なわない理由は?

541:デフォルトの名無しさん
07/01/22 00:26:47
全部秀丸を遣っているオレにはなんともいえん

542:デフォルトの名無しさん
07/01/22 00:39:23
>>540
稼動確認前にコミットはしねぇだろ。
複数人で開発しているのならなおさら。
チェックアウトしてテストしようとして担当外のところが問題で
うごかなかったら普通きれるぞ。

後なんだexport版って?

543:デフォルトの名無しさん
07/01/22 00:44:24
とりあえず、HP側のビルドするディレクトリをWin2kにマウントしとけば、
いちいちftpする手間がなくなってストレスがかなり減るぜ。

544:デフォルトの名無しさん
07/01/22 00:46:37
>>542
>export版
cvs exportで取り出したもの。CVSディレクトリがつかないから、リリース用に使うのに都合がいい。
>稼動確認前にコミット
何のためにブランチがあるとお思いで?
稼動確認を行なった版が管理されないとしたら、稼動確認のエビデンスをどうやって残すの?
#まぁ、コンパイルが通るかどうか位は当然コミット前にやるとして。

545:デフォルトの名無しさん
07/01/22 00:49:10
全部viを遣ってるオレにはなんとも言えん

546:デフォルトの名無しさん
07/01/22 00:53:16
544はあまり相手にしないほうがよさげ

547:デフォルトの名無しさん
07/01/22 01:00:06
わざわざcvs exportして確認する必要ないだろ。

ブランチはなんの関係があるんだ?
コミットの度にブランチ切ってんのか?笑


548:デフォルトの名無しさん
07/01/22 01:15:05
>>547
安定するまではブランチで作業するし、他人はそのブランチを使わない。
それだけのこと。

最終版をexportでやるのは、開発機とリリース機が違うときに便利。
それ以外では、リリース版をアーカイブするときにCVSディレクトリが邪魔にならずに済む程度のメリット。

549:デフォルトの名無しさん
07/01/22 01:17:56
そういう豆知識が求められてる場面じゃないからw

550:デフォルトの名無しさん
07/01/22 08:59:05
マメ知識だったのかw

551:デフォルトの名無しさん
07/01/22 15:04:08
CentOS 4.4 x86_64で以下のようなプログラムを走らせると、
errno=22(Invalid argument) のエラーになってしまいます。

#include <errno.h>
#include <sys/quota.h>
int main( void ) {
int result;
struct dqblk quotaStatus;
result = quotactl( QCMD(Q_GETQUOTA,USRQUOTA), "/dev/hda8", 500, (caddr_t)"aStatus );
printf("result: %d, errno: %d: %s¥n", result, errno, strerror(errno));
return 0;
}

/dev/hda8(/home) に /home/aquota.user /home/aquota.group は存在します。
UID 500のユーザも存在します。repquota -a や edquota admin も問題ありません。
quotaの設定は以下のような手順で行いました。

/etc/fstab の /home のところに defaults,noatime,usrquota,grpquota を記述
mount -o remount /home
touch /home/aquota.user
touch /home/aquota.group
chmod 600 /home/aquota.*
quotacheck -mugv /home
quotaon -auvg

どなたか原因分かりませんか?

552:デフォルトの名無しさん
07/01/22 15:32:42
納品するシステムのコンパイル時に、単純にコピーされるのを防止するため
ハードウェアIDなどを組み込んでコンパイルしたいのですが、
ハードウェア依存で、できるだけ高速で取得でき、
、呼び出し時間の短いシステムコールなどはありますでしょうか?

553:デフォルトの名無しさん
07/01/22 18:28:00
>>552
激しく環境依存なので OS 次第じゃないかな。
dmesg とか sysctl とかの出力は使えそうですか?


554:デフォルトの名無しさん
07/01/22 18:49:07
HDのmbrのシリアル番号を見ているソフトがある
他にはNICのMACアドレスとか
替えられない訳じゃないけど

555:デフォルトの名無しさん
07/01/22 19:23:27
>>552
機械の故障でユーザが代替品を使用せざるを得ない場合などに備えて、
マシン側で変更できるものが望ましい。
たとえばNICのMACアドレスなんかはそれを見てるものが昔からあるので
ほとんどのもので変更可能になっている。

556:デフォルトの名無しさん
07/01/22 19:38:59
コピー防止だけどそのレベルで大丈夫?

557:デフォルトの名無しさん
07/01/22 20:16:09
ドングルでもつけてioctlで叩けば~

558:デフォルトの名無しさん
07/01/22 21:44:19
>>553-557
どうもありがとうございます。
システムが飛んだら再コンパイル必須の使い切りシステムなので、HDDのmbrから調べてみます。

559:デフォルトの名無しさん
07/01/22 21:46:18
ディスクまるごとコピーするツールがあるけど大丈夫?

560:デフォルトの名無しさん
07/01/22 21:50:51
>>559
まずいです
通常は変更不能のものってありますか?

561:デフォルトの名無しさん
07/01/22 21:54:00
CPUID

562:デフォルトの名無しさん
07/01/23 00:18:55
>>560
そこまで厳密に制限したいのであれば、ハードウェアの
色々な情報をまとめて md5 してみるとかどうでしょう?
もちろん md5 の値をさらに可逆の暗号処理すると良いですね。


563:デフォルトの名無しさん
07/01/23 00:44:37
md5sumで十分でしょ。

cat /proc/cpuinfo とか
lspci -vs 00:00.0 とか

そんなのをmd5sumすれば?


564:562
07/01/23 01:35:14
まぁ md5 で十分とは思うのですが、strings(1) とかを使うと
色々と漏れちゃうので、ちょっとした計算式でシフトできたりすると
良いかなぁと思ったのです。気にしすぎかな?


565:デフォルトの名無しさん
07/01/23 02:45:20
そのくらいしたほうがいいと思います

566:デフォルトの名無しさん
07/01/23 04:22:37
MD5をわざわざ文字列にしたりしなけりゃ、少なくともstringsで出てきたりはしないと思うんだけど。

567:551
07/01/23 06:07:52
自己解決しました。

#include <sys/quota.h> の前に
#define _LINUX_QUOTA_VERSION 2 を付けてやればOKでした。

568:デフォルトの名無しさん
07/01/23 07:32:24
>>562
もしLAN常時接続が可能ならサーバー側にDB用意して
アクティベーションしないと使えないようにするとか

569:デフォルトの名無しさん
07/01/23 08:27:05
つ[LisenceManager]

570:デフォルトの名無しさん
07/02/04 17:49:07
execl()と、execlp()の違いを教えてください。
初心者ですまそ

571:デフォルトの名無しさん
07/02/04 17:55:13
URLリンク(www.linux.or.jp)

URLリンク(www.paw.hi-ho.ne.jp)


572:デフォルトの名無しさん
07/02/04 17:55:19
p付はPATHから探してくれる。


573:デフォルトの名無しさん
07/02/04 17:55:24
>>570
pがつくかつかないか。つまり、path探索をするかしないか。

574:570
07/02/04 17:58:16
>>572
>>573
つまり、pが付いたらコマンドライン引数だけでいいってことでしょうか?

575:デフォルトの名無しさん
07/02/04 18:02:37
第1引数をフルパスで書く必要があるか、PATHにあるから名前だけでいいか、
てこと。


576:570
07/02/04 18:04:19
>>575
なるほど~分かりました。
ありがとうございます

577:デフォルトの名無しさん
07/02/04 18:27:35
おまえら優しいな

578:デフォルトの名無しさん
07/02/07 18:16:19
gcc(g++)にはVC++におけるReleaseビルドとDebugビルドのような概念はないんでしょうか?

579:デフォルトの名無しさん
07/02/07 18:25:52
VC++のリリースビルドとデバッグビルドの違いを理解してからおいで。


580:デフォルトの名無しさん
07/02/07 18:26:41
オプションに-O2(とかそのほか最適化オプション)つければReleaseビルド。

581:デフォルトの名無しさん
07/02/07 18:29:04
デバッグ/リリースごとの条件コンパイルのためのプリプロセッサ
シンボルもあるだろうね。
あと、-gオプション。


582:デフォルトの名無しさん
07/02/07 19:09:40
最近のVCはReleaseでもデバッグ情報ついてるよ。

583:578
07/02/07 20:53:56
ありがとうございました!

584:デフォルトの名無しさん
07/02/07 22:37:33
sspとか

585:デフォルトの名無しさん
07/02/09 05:26:16
セッションを大量に張るアプリケーションのソケットの処理にAIOを使うってのはどうなんでしょう?
スレッドベースのハンドラを使うとたくさんのソケットがある分スレッド生成にコストがかかりそうですし
シグナルベースよりはepoll()やkqueue()の方が効率的なのかなーと思ってはいるんですが
最近AIOに興味を持ってこんなことを妄想してたんですが皆さんはどう思われます?

586:デフォルトの名無しさん
07/02/09 20:31:47
aioってkqueueで待てた気がするけど。

587:デフォルトの名無しさん
07/02/10 05:05:17
確かにEVFILT_AIOってのがありますねぇ。
便利でいいなぁ。Linuxにもこんなシステムコールあればいいのに。

588:538
07/02/10 07:00:49
>>539-550
アドバイスありがとうございます。
特に、マウントするというやり方は、当方まったく気がつきませんでした。
いろんなご意見いただいてありがたかったです。

今後も効率いい作業方法を意識していろいろtryしてみます

589:デフォルトの名無しさん
07/02/15 06:14:56
どうもaio_read()呼ぶと内部でpthread_create()が呼ばれてる感じ
スタック使い切って死にそうなので大量のセッション管理には向かないのかな

590:デフォルトの名無しさん
07/02/15 08:06:43
内部で、て……。aio_readはシステムコールだぞ。
なんでユーザプロセスのスレッドなんか生成しなきゃならん。

591:デフォルトの名無しさん
07/02/16 16:07:36
>>589
それはWin9xのWinsock2-overlappedI/O実装

592:デフォルトの名無しさん
07/02/20 00:48:16
fifo と unix ドメインソケット、どう使い分けたらいいのかを教えてください。

593:デフォルトの名無しさん
07/02/20 01:30:34
fifoは親子関係のないプロセス間で使うのに便利

594:デフォルトの名無しさん
07/02/20 01:53:08
unixドメインソケットも親子関係のないプロセスで使うと便利!

595:デフォルトの名無しさん
07/02/20 15:17:14
fifoはunixドメインソケットを使って実装されている 事もある

596:デフォルトの名無しさん
07/02/21 00:39:37
whileとforの違いがよくわからないんでお願いします。
あと、最後に;(セミコロン)をつけるのは何のときで、つけないのが何のときか教えてください。

教科書見てもイマイチよくわからなくて・・・

597:デフォルトの名無しさん
07/02/21 00:50:04
>>596
とりあえず使おうとしてる言語はなんなのか言ってみ
シェルのことか?

598:デフォルトの名無しさん
07/02/21 00:54:39
あ、すんません。C言語です。
めっちゃ基礎的なことだけどおねがいします。

599:デフォルトの名無しさん
07/02/21 01:08:32
whileもforも繰り返し行う処理(ループ)を行わせるものだが、

while (式) 文
「式を評価(値を求めること)し、それが0でない場合は 文を実行」
を繰り返し行う。

for (式1; 式2; 式3) 文
式1を評価する。
そのあとは、
「式2を評価し、それが0でない場合は 文 を実行。ついで式3を評価」
を繰り返し行う。

つまりは、
式1;
while (式2) { 文; 式3; }
とほぼ同じ意味。

なお、文とは
- 式に;を付けたもの
- { 複数の文 }
のどちらか。forもwhileも文は1つしかかけないので、複数の文を
繰り返し処理したい場合は { } で囲む。

(実際には1つであっても囲んで構わないし、ヒューマンエラーを避ける
意味ではそのほうが好ましい)


600:デフォルトの名無しさん
07/02/21 01:10:09
C言語なら俺に聞け(入門篇) Part 8
スレリンク(tech板)

こっち向きだろうね。


601:デフォルトの名無しさん
07/02/21 01:11:29
>>599
ありがとう!なんとなくわかったような・・・わからないような・・・
もっかい教科書見直してみるわ。
>>600
あ、そんなスレあったのか。こんどからはそっちで。

602:デフォルトの名無しさん
07/02/21 01:12:40
訂正

式1;
while (式2) { 文; 式3; }

式1;
while (式2) { 文 式3; } まぁ空文が1つあるかないかだけど。

あと「それが0でない場合」しか書かなかったが、0になったら
繰り返しを終えて次に進む。


603:デフォルトの名無しさん
07/02/21 20:12:39
forは式を省略できるが、whileはできないってのも。
永久ループを作るときに、forなら
for(;;)文
で大丈夫だけど、whileだと
while(1)文
の様に書かないといけない。
これは1を評価するという冗長な意味を持つので、for(;;)の方がよく使われてる。
(;;) <- これが顔文字みたいでかわいいし。

604:デフォルトの名無しさん
07/02/21 21:31:32
>>603
最後の2文はおまいの思いこみだw
面白いけどw

605:デフォルトの名無しさん
07/02/21 21:41:24
while (1)はイデオム化しているので、読むほうも「1が0でない限り」
などとは読まないから問題ない。

生成されるコードも大差ない。
MacOSX 10.4.8, gcc 4.0.1 (Intel) でやってみたら、
while (1) { puts("hello"); } / for (;;) { puts("hello"); } いずれも
「文字列のアドレスをスタックに積んでputsをcallしてループの頭にジャンプ」
という全く同じコードになった。


606:デフォルトの名無しさん
07/02/21 21:49:27
for(;;)は無限ループを表すためだけにANSIが規格化した代物。

607:デフォルトの名無しさん
07/02/21 22:37:36
FreeBSD6.2だと
grep -R 'for *(;;)' /usr/src | wc -l
2322
grep -R 'while *(1)' /usr/src | wc -l
883
だから、やっぱりfor(;;)の方が優勢と思う。
確かにwhile(1)はイデオム化してるから問題はないと思うけど、
もしも、全く最適化をしないコンパイラがあれば、少しだけ無駄なコードになるはず、、
まぁそんなことは重要じゃないので、見た目のいい方を選べばいいと思います。

608:デフォルトの名無しさん
07/03/01 19:42:26
以下のMakefileの
$(OBJS): $(HEADS) Makefile
行は何をしているのでしょうか?

URLリンク(www-or.amp.i.kyoto-u.ac.jp)

609:デフォルトの名無しさん
07/03/01 21:02:27
>>608
スレ違い。

610:デフォルトの名無しさん
07/03/01 21:25:06
>>608
make makes many problems
スレリンク(tech板)
あたりか?

一応答えておくと、
$(OBJS)内のファイルに依存性を追加しているだけ。
この行自体は何もコンパイルしたりしない。
「$(HEADS)のファイルいずれかかMakefileが書き換えられたら
$(OBJS)のすべてのファイルはコンパイルし直しとなる」という宣言。


611:608
07/03/01 21:52:57
>>610
良くわかりましたありがとうございます
教えて頂いたスレにも書き込もうか迷ったのですが
過疎っており、都合上解答をできるだけ早めに頂きたかったので
こちらで質問させていただきました
助かりました

>>609
死ねカス
代替案出せないなら黙ってろ

612:デフォルトの名無しさん
07/03/01 22:51:45
カスにカス呼ばわりされてもなぁ。makeスレは過疎ってたって巡回している人は沢山いると思うのだが。

613:デフォルトの名無しさん
07/03/01 22:58:01
>>612
ごめんなさい
core吐きまくっててイライラしてて言い過ぎた
次は教えてもらったスレで紳士的に質問しますね

614:デフォルトの名無しさん
07/03/02 22:03:55
gccのプリプロセッサだけを使いたかったので、子プロセスでcppを起動して
パイプで出力を受け取ったのですが、EOFが来ません。
メインのプロセスはboost::iostream::file_descriptor_sourceで子プロセスの
出力を読み込んでいます。
どなたかお知恵を…

615:デフォルトの名無しさん
07/03/02 22:13:13
入力を閉じる

616:デフォルトの名無しさん
07/03/17 01:01:16
ヘタレ組込みPGです。
下記のようなプログラムが既存のものであるんだけど、sigactionをセットした上でスレッドをぼこぼこ作り、各スレッドにシグナル待ちをさせるコードがあるんだけどシグナルハンドらの関数は処理を何もしていません。
これってどういうことを狙ってるとき、処理なしハンドラを設定してるかわからないんですが、教えてもらえませんか?

void main(void)
{
act_SIGINT.sa_handler = funcA;
act_SIGINT.sa_mask = *sigset;
act_SIGINT.sa_flags = SA_RESETHAND;

sigaction(SIGUSR1,&act_SIGINT,NULL)

for(int i=0;i<5;i++)
{
pthread_create();
}

funcB(); // 実処理

}

funcA{
// 処理なし
}

funcB{
// 何か処理
pthread_kill(スレッドID,SIGUSR1);

}


617:デフォルトの名無しさん
07/03/17 01:33:49
どっか別の場所でsigactionしなおしてるんじゃね?

618:デフォルトの名無しさん
07/03/18 13:12:48
自作のshared objectを作って、その中の関数を呼ぶ別のプログラムを書いたんだが
どうやらshared objectの中にバグがあるようで、落ちる。
shared objectの中でgdbを使ってどこで落ちたのか調べたいのだから
shared objectを呼び出してるプログラムにgdbを適応してrunしてもshared objectの中まで
入ってくれない。
shared objectの中身をgdbでデバッグしたい場合はどうすればいいんでしょうか?
教えてください

619:デフォルトの名無しさん
07/03/19 00:37:58
>>618
> 自作のshared object
のコンパイルオプションは???


620:デフォルトの名無しさん
07/03/29 06:38:54
プログラムが現在使用しているトータルメモリ量を取得する方法を教えてください

621:デフォルトの名無しさん
07/03/29 07:40:28
先ずはあなたの言う、「プログラムが現在使用しているトータルメモリ量」を定義してください。

622:デフォルトの名無しさん
07/03/29 08:40:48
>>620
/procを使う
perlならProc::ProcessTable::Process

623:デフォルトの名無しさん
07/03/29 11:38:11
>>621
プログラムが確保したヒープとスタックと
内部でmallocしようとしてるサイズでいいんじゃね?
まあmallocで100ギガ確保しても使わなければ
メモリは使われないからそれを消費量というかどうかは
定義しなきゃだなぁ

624:デフォルトの名無しさん
07/03/29 14:10:03
mallocした量とmalloc用のヒープ量(sbrk次第?)はまた違うかもしれない。
管理用のデータもあるだろうし。


625:デフォルトの名無しさん
07/03/29 19:24:14
>>620
getrusage(2)

626:デフォルトの名無しさん
07/04/10 21:53:49
Windowsきたねえ!UNIXきれい!
でもWindows使いたい!UNIX使いたくない!
ふしぎ!!

627:デフォルトの名無しさん
07/04/11 08:11:21
エロゲがみんなUNIXで動いたらどうでしょう。

628:デフォルトの名無しさん
07/04/12 13:02:39
あるプログラムをFORTRANからCに書き換えています。
FORTRAN内の配列(かなり大きい)を、Cで同じサイズで確保しようとすると、
実行時に確保できない旨のエラーが出てしまいます。
両方とも同じマシン上で動かしているので、空き領域自体はあると思うのですが、
何か良い方法はないでしょうか?


629:デフォルトの名無しさん
07/04/12 13:05:23
↑エスパー専用

630:デフォルトの名無しさん
07/04/12 13:13:58
>>628
newをつかってみたら?

631:630
07/04/12 13:14:49
動的に確保した方が、大きな値を取れたはず

632:デフォルトの名無しさん
07/04/12 13:17:36
エスパー登場

633:デフォルトの名無しさん
07/04/12 13:23:25
>>628
ソースコンバータで事は足りないの?

634:デフォルトの名無しさん
07/04/12 14:01:29
スタック上に確保しようとして溢れてるってことか。
それならmalloc()とかでヒープに確保しないと。

635:デフォルトの名無しさん
07/04/12 14:38:50
んな面倒なことしないでも、staticで宣言すりゃいいんでないかい。


636:デフォルトの名無しさん
07/04/12 20:37:23
ulimit でスタックのサイズをでかくする

637:デフォルトの名無しさん
07/04/13 21:25:10
limitで制限かけてあると思うけどな。
環境変数でも貼ってくれ。

638:デフォルトの名無しさん
07/04/17 18:44:13
64bitマシンで32bitの整数を扱いたいのですが、int寄りも小さくshortよりも大きい整数はないのでしょうか?
C99を使うしかないのでしょうか?


639:デフォルトの名無しさん
07/04/17 19:17:07
OSとコンパイラは?
gccのx86_64版でsizeof(int)は4だよ。

640:デフォルトの名無しさん
07/04/17 19:24:49
>>638
LP64,LLP64,ILP64あたりでググれ。

641:デフォルトの名無しさん
07/04/18 04:41:26
intってマシン長じゃないの?

642:デフォルトの名無しさん
07/04/18 05:12:16
>>641
違うこともあるお⊂二二二( ^ω^)二⊃。x86_64とか。

643:デフォルトの名無しさん
07/04/18 06:55:21
>>641
そうじゃない例はいくらでもあるが。

644:質問。
07/05/02 03:01:44
あるプログラムから別のプログラムを立ち上げて、
その標準入出力を掴むプログラムをC言語で作りました。

forkで子スレッドを作って呼び出し先プログラムを実行、
パイプでそのstdin,stdoutを呼び出し元から読み書きするまでに至ったのですが、

呼び出し先としてsshやftpを立ち上げてみると、ログインパスワード要求時の
「Password:」 の表示が標準出力じゃないみたいで、
呼び出し元プログラムを通さず、画面に出てきてしまいます。
一体何故でしょうか? またこれの解決手段は何かありますか?

645:デフォルトの名無しさん
07/05/02 03:13:03
stderrじゃね?

646:質問。
07/05/02 03:25:07
>>645
いや、それもしっかり呼び出し元に送ってるんですが・・・。

647:デフォルトの名無しさん
07/05/02 04:27:16
>>644
ssh などは /dev/tty にプロンプトを書いてる。


648:デフォルトの名無しさん
07/05/02 04:31:39
>>644
たぶん君のやりたいことには、
ttyrecやscriptのソースが参考になる。

649:デフォルトの名無しさん
07/05/02 05:25:13
>>644
> あるプログラムから別のプログラムを立ち上げて、 
> その標準入出力を掴むプログラムをC言語で作りました。 

そしてこの仕様に(ry

650:質問。
07/05/02 07:27:32
ネットでいくらか調べてみたけど。。。
sshの自動ログインのパスワード入力突破はみんな悩んでるみたいね。
専用の鍵を作るだとかとても面倒なことになりそうな勢い。

さて、そろそろ寝るかorz

651:デフォルトの名無しさん
07/05/02 07:31:36
そんなもん誰も悩んでないよ。
ssh-agent使えばいいんだから。
プログラミングですらない。

652:デフォルトの名無しさん
07/05/02 07:33:58
マウスを操作して自動的にアプリのボタンをクリックするプログラムを作成するくらい不毛な話だ

653:デフォルトの名無しさん
07/05/02 07:50:53
それだってtcl/tkのtestsuitsにあるけどなw

654:648=651=653
07/05/02 17:01:00
そこでexpectですよ、となるわけかな?

655:デフォルトの名無しさん
07/05/03 00:29:57
そこでExpectですよ
→ そしてTclが嫌になる
→ Perl/Ruby/Pythonとかのexpect風モジュールに逃げる
→ 本家本元のexpectほどのエレガントさや機能がなくてガクーリ
→ でもTclの糞さにInline::Tclに逃げたりRuby+Expectとかのハイブリッドコードを書き出す
→ 他人には理解不能に

いやほんとRubyのシンタックスならTclなみにエレガントにExpectできると
思うんだけどね。ベタなコマンドライン的記法にマッチしてるから。

656:デフォルトの名無しさん
07/05/04 01:17:02
マジアフォだな。
マウスカーソルを横取りして駆動するドライバとか変な苦労しそう。
キーボードコントローラを乗っ取ってキー入力してみたりとか、GPUプログラミングして表示内容を取得とか。

657:デフォルトの名無しさん
07/05/10 21:52:44
 質問をさせていただきます。
 UNIX上で動く簡単なftpデーモンを作っています。

 アクティブモードでクライアントとデータをやり取りするデータコネクションを繋ぐために、
FTPのPORTコマンドで受け取ったクライアントのIPアドレスとポート番号をsocket関数に渡して
ソケットを作り、connect関数でコネクションを繋ぎました。
 ここで20番ポートを使ってデータコネクションを繋ぐように本に書いてあったのですが、
サーバー側のポート番号はどこかで指定するのでしょうか?

 制御コネクションの接続の時にはbind関数で21番ポートを指定しましたが、それにあたるような
処理がconnect側にも必要なのでしょうか?

 どこかで根本的な勘違いをしてるのか、調べても解答を探すことができませんでした。
 お手数ですが、どなたがご助言をいただけないでしょうか?

658:デフォルトの名無しさん
07/05/11 00:03:42
>>657
アクティブモードのデータコネクションは、FTPサーバからクライアントにコネクションを張りに行くわけだから
制御コネクションとは接続方向が逆って辺りは理解している?
まぁ、詳しくはネットワークスレを読めばリンクが出てくると思うけど。

659:デフォルトの名無しさん
07/05/11 01:19:45
RFCちゃんと読んでる?

660:デフォルトの名無しさん
07/05/11 06:09:45
>>657
サーバー側のポート番号を指定するのはPASVの場合

661:デフォルトの名無しさん
07/05/12 00:25:23
PORTとかEPRTのばあいは黙ってconnectすればいい。
PASVとEPSVの場合は、bind-listen-acceptして待ち受けてればいい。

662:デフォルトの名無しさん
07/05/12 01:19:48
>>658
その時のsrc portの話だと思われ。

>>657
制御コネクションを21番でbindしてlistenしたように、
データコネクションは20番でbindしてconnectすればいい。
bindせずにconnectすると適当なportが使われる。

663:657
07/05/12 01:27:58
>>658-662
たくさんのご助言、ありがとうございました。
bindはacceptする側だけだと思い込んでいて、データコネクション側では20番ポートでbindしていませんでした。
さっそく、bindしてみます。
それでは失礼いたします。

664:デフォルトの名無しさん
07/05/14 21:30:04
javaファイルをpostscriptに変換して印刷しようとして
a2ps test.java
と入力したのですが、印刷されませんでした。
なぜですか?

665:デフォルトの名無しさん
07/05/14 21:47:58
>>664
今時の a2ps は, 出力をかってに lpr あたりに食わしてくれるのか?


666:デフォルトの名無しさん
07/05/15 00:27:25
はい


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch