5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :970:2006/05/18(木) 18:56:16
UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド

前スレ
Part7 http://pc8.2ch.net/test/read.cgi/tech/1127373405/
Part6 http://pc8.2ch.net/test/read.cgi/tech/1116908090/
Part5 http://pc8.2ch.net/test/read.cgi/tech/1105723117/
Part4 http://pc5.2ch.net/test/read.cgi/tech/1095843584/
Part3 http://pc5.2ch.net/test/read.cgi/tech/1085930894/
Part2 http://pc5.2ch.net/test/read.cgi/tech/1055110889/
Part1 http://pc2.2ch.net/tech/kako/992/992057422.html

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


2 :970:2006/05/18(木) 18:58:40
関連スレ
Cygwin使っている人いますか? その14 (UNIX板)
http://pc8.2ch.net/test/read.cgi/unix/1107587275/
Cygwin使っている人いますか? 3 (Windows板)
http://pc8.2ch.net/test/read.cgi/win/1090131123/
ネットワークプログラミング相談室 Port13
http://pc8.2ch.net/test/read.cgi/tech/1109793931/
マルチスレッドプログラミング相談室 その3
http://pc8.2ch.net/test/read.cgi/tech/1098268137/
プログラミング質問すれ Part1(Unix板)
http://pc8.2ch.net/test/read.cgi/unix/1127388574/
XWindowプログラミング 質問箱
http://pc8.2ch.net/test/read.cgi/tech/1127340315/

関連板
http://pc8.2ch.net/unix/
http://pc8.2ch.net/linux/

3 :970:2006/05/18(木) 19:00:56
【POSiX】
The Open Group Base Specifications Issue 6
IEEE Std 1003.1, 2004 Edition
http://www.opengroup.org/onlinepubs/009695399/toc.htm

【必読書】
Advanced Programming in the UNIX(R) Environment
http://www.amazon.com/exec/obidos/tg/detail/-/0201563177/

Unix Network Programming
Vol. 1: The Sockets Networking API, Third Edition
http://www.amazon.com/exec/obidos/tg/detail/-/0131411551/

UNIX Network Programming
Volume 2: Interprocess Communications (2nd Edition)
http://www.amazon.com/exec/obidos/tg/detail/-/0130810819/

man on www
http://www.linux.or.jp/JM/#Search

GNU Make 日本語リファレンス
http://www.ecoop.net/coop/translated/GNUMake3.77/make_toc.jp.html

Unix Programming Frequently Asked Questions 日本語訳
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html

4 :デフォルトの名無しさん:2006/05/18(木) 19:57:54
>>1


5 :デフォルトの名無しさん:2006/05/18(木) 20:03:08
萌え

6 :デフォルトの名無しさん:2006/05/18(木) 22:03:46
相変わらず質問を強要するスレだな

7 :デフォルトの名無しさん:2006/05/18(木) 22:08:01
いいから質問すれ。

8 :sage:2006/05/19(金) 01:56:58
C10K Problemの話題はここでいいですか?
http://www.kegel.com/c10k.html

9 :デフォルトの名無しさん:2006/05/19(金) 02:04:13
そのページに「まずこれを読め」と書いてあるのを読んでからどうぞ。

10 :デフォルトの名無しさん:2006/05/23(火) 10:04:49
俺的おすすめ入門書

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道
http://www.amazon.co.jp/exec/obidos/ASIN/4797328355/

Linuxプログラミング―例題で学ぶUNIXプログラミング環境のすべて
http://www.amazon.co.jp/exec/obidos/ASIN/4797308192/

11 :デフォルトの名無しさん:2006/05/26(金) 01:07:40
共有ライブラリ形態のlog出力ライブラリを作っていたのですが
ついつい、排他処理をさぼっていました。同期しない排他処理をするなら
spin_lock()
write_log()
spin_unlock()
こんな感じでOKですよね?

12 :デフォルトの名無しさん:2006/05/26(金) 06:33:35
syslog

13 :デフォルトの名無しさん:2006/05/27(土) 01:22:54
syslog遅くてだめです。プロセス3つに対して共通のファイルにログを
吐かせたいんですけどこうゆう場合の実装ってどうすればいいのでしょうか?

14 :デフォルトの名無しさん:2006/05/27(土) 02:10:18
syslogが遅いってどんな環境なんだか

15 :デフォルトの名無しさん:2006/05/27(土) 02:15:45
ttp://tnetio.sourceforge.jp/cgi-bin/WalWiki2/wiki.cgi?99syslog
ここでかかれている問題と、案件上の問題で
ログの誤差は1000時間で1msec以内なので実装するしかないのですよ

16 :デフォルトの名無しさん:2006/05/27(土) 07:23:00
Linuxのことは全然知らんが、spin_lock()ってカーネルの外で使えんの?

17 :デフォルトの名無しさん:2006/05/27(土) 07:34:28
大事なログってハングアップして消えたら困るだろ?
だからログメッセージを記録する度に fsync() するんだよ。
遅いのは我慢汁。

18 :デフォルトの名無しさん:2006/05/27(土) 07:44:50
>>15
とても参考になりました。
ありがとう。

19 :デフォルトの名無しさん:2006/05/27(土) 09:00:34
いや、fsyncするから遅いとは言え、ボトルネックを解消
するためにsyslogを再発明ってDJBじゃあるまいし・・・
それにそのシステム、遅延は許されないけどログのロスト
は許されるの? だったらsyslogからネットワークに出せば
いいのでは。

あとlinuxのsyslog.confのmanを見ると
http://www.linux.or.jp/JM/html/sysklogd/man5/syslog.conf.5.html
「マイナス記号 ``-'' を接頭すると、記録の際のファイルシステム
バッファのフラッシュ動作を抑制する。」とあるがこれじゃだめなの?

20 :デフォルトの名無しさん:2006/05/27(土) 09:10:09
同期しない=spin_lock()
ってのが意味分からないんだが。

CPUをyieldしたくないって意味で言っているの?

21 :デフォルトの名無しさん:2006/05/27(土) 09:25:45
>ログの誤差は1000時間で1msec以内なので実装するしかないのですよ

なんかよくわからないけど、ものすごいこと言ってる気がする。

22 :デフォルトの名無しさん:2006/05/27(土) 09:49:23
>>19
ttp://tnetio.sourceforge.jp/cgi-bin/WalWiki2/wiki.cgi?99syslog

syslogd は、ログサーバにログメッセージを送る際、相手に時間を送りません。
syslogd のソースを解析した所、個人的には、ちょっと信じられないのが正直な感想なのですが、
syslogd が、別のログサーバに UDP を通じてログメッセージを送る際、
syslog() 呼び出しの時に埋め込んだ日付時刻を送信していない事が分かりました。

 

UDP で待受ける syslogd は、受け取ったメッセージ内部に時間情報が存在しない場合、
自分の時間を書き込みます。従って、 *syslog() 発生時の時間ではなく、
ログサーバの syslogd が受け取った時の時間* が書き込まれますので、
もし、サーバー間で時間がズレている場合、そのズレが直接影響しますし、
また、UDP 送信のタイムラグによってもズレます。


23 :デフォルトの名無しさん:2006/05/27(土) 09:58:51
1msecのズレがあるかどうかはどうやって測定して検収する気なんだろう。
syslog()を呼んでから時刻情報を付加してI/Oシステムコールを
呼び出すまでの間にプロセスのスイッチや他の処理のせいで
1msecの遅延が出たらどうするんだろう。
それ絶対仕様書いた奴が馬鹿だよね。真面目に実装しようとする奴も馬鹿だけど。

24 :デフォルトの名無しさん:2006/05/27(土) 10:06:13
Linuxのsyslogdが全て悪いってことでしょ?
全てのディストリビューションで同じものを使っているのかどうかも知らないけど、
syslogdを変更するとか、syslogdのふりをして>>22の問題点を解消した
パケットを自分で投げるとか、syslogdのつける時刻に頼るのをやめて
時刻情報を自分で取得してメッセージに含ませるとか、
やりようはあるんじゃないの。

もっとも、自分で再発明するのを含めて何をどうやっても

> ログの誤差は1000時間で1msec以内なので実装するしかないのですよ

というのは(いまいち意味不明ではあるが)保証するのは難しいと思うけど。



25 :デフォルトの名無しさん:2006/05/27(土) 10:18:18
GPS時刻同期型のNTPサーバから直接シリアルで同期を取っているので
大丈夫なのですが
問題は、syslog() 発生時の時間ではなく ログサーバの syslogd が受け取った時の時間
になってしまうことが嫌なんですよ。


26 :デフォルトの名無しさん:2006/05/27(土) 10:22:07
>>25
問題はそこじゃないだろ。悪いこと言わないから別の人に代わってもらった方がいいよ。


27 :デフォルトの名無しさん:2006/05/27(土) 10:23:29
別に無理にsyslogを使わなくても、最初に言ってる>>11のようにすりゃいいんじゃないの?
spin_lock()というのが妥当かどうかは別として。

28 :デフォルトの名無しさん:2006/05/27(土) 10:26:36
ふつうプリンタにログを直書きだよね

29 :デフォルトの名無しさん:2006/05/27(土) 10:39:07
write_log(を囲むクリティカルセクション)が1msecで終わる保証はあるのかとか、
根本的な問題としてはログを書くということが必要になってから>>11
クリティカルセクションに入るまでの間に割込み等があったら
ロギング機構がつける時刻がいくら完璧正確でも>>15の要求は満たせないんだがとか、
そのへんはいいんかいな。


30 :デフォルトの名無しさん:2006/05/27(土) 10:39:52
>ログの誤差は1000時間で1msec以内なので実装するしかないのですよ
ひどい仕様だな

31 :デフォルトの名無しさん:2006/05/27(土) 10:53:01
>>24
> Linuxのsyslogdが全て悪いってことでしょ?

違うだろ。

> syslogdのつける時刻に頼るのをやめて
> 時刻情報を自分で取得してメッセージに含ませるとか、

程度の知恵もないヤツが悪いだけ。

今回の場合は、syslogで十分かどうか、仕様も曖昧だから良く分からないけれど。

32 :デフォルトの名無しさん:2006/05/27(土) 10:54:19
>>30
というか日本語として意味が成立してない。

33 :デフォルトの名無しさん:2006/05/27(土) 10:55:16
>>31
>> syslogdのつける時刻に頼るのをやめて
>> 時刻情報を自分で取得してメッセージに含ませるとか、
>
>程度の知恵もないヤツが悪いだけ。

いや、 syslogd は自分で付けた時刻情報も取り去ってリモートに送信すると書いてあるが

34 :デフォルトの名無しさん:2006/05/27(土) 12:17:52
( ゚д゚)ポカーン

35 :デフォルトの名無しさん:2006/05/27(土) 12:18:21
国語力のないアホがやってまいりました


36 :デフォルトの名無しさん:2006/05/27(土) 12:52:23
$ logger -p local0.notice -t 'ボクちゃん' '今日は僕の誕生日です。'

メッセージが全文削除されるのですが何故でしょうか?
syslogdの仕業ですか?

37 :デフォルトの名無しさん:2006/05/27(土) 12:54:03
RTM

38 :デフォルトの名無しさん:2006/05/27(土) 14:39:27
汎用OSじゃ無理ってことでOK?

39 :デフォルトの名無しさん:2006/05/29(月) 12:46:55
いいえ

40 :デフォルトの名無しさん:2006/06/02(金) 08:29:17
もっとも高速なRAMへのアクセス方法を教えてください

41 :デフォルトの名無しさん:2006/06/02(金) 08:45:13
キャッシュに載る大きさだけ使う

42 :デフォルトの名無しさん:2006/06/02(金) 08:58:13
>>41
自分のプロセスだけでキャッシュを占められるわけじゃないから、
正解は「可能な限りメモリ使用量を減らす」だな。

43 :デフォルトの名無しさん:2006/06/02(金) 11:03:15
>>42
どういう想定してるんだか知らないが、他プロセスの存在や種類を任意とすると
コンテクストスイッチしたらキャッシュの中身は入れ替わらざるを
得ないだろうから>>41で正解。
むしろ>>42は不正解。メモリ使用量ではなく局所性に着目すべき。


44 :デフォルトの名無しさん:2006/06/02(金) 23:54:25
gcc -Os

45 :デフォルトの名無しさん:2006/06/03(土) 12:38:55
ファイルを標準入力にリダイレクトしたあとキーボードからの入力も受け付けたいのですが、openシステムコールでキーボードを開いたりって出来ませんか?
ちなみに最初からリダイレクトせずにファイルのほうをopenして読むというのは意図から外れてしまうのであしからず
どなたかご存知でしたらよろしくお願いします

46 :45:2006/06/03(土) 12:40:18
書き忘れていましたが環境はWindows2000をホストとしてVMWare Player上で動かしているVine Linux 3.2です

47 :デフォルトの名無しさん:2006/06/03(土) 12:48:48
/dev/tty

48 :デフォルトの名無しさん:2006/06/03(土) 13:02:19
>>45
ls | less のlessは、やっているよな。>>47の方法で。

49 :デフォルトの名無しさん:2006/06/03(土) 16:15:38
おお、、これはよさそうなものが
>>47,48 さんありがとうございました

50 :デフォルトの名無しさん:2006/06/13(火) 19:59:12
MTAにpostfixを使っている環境で、C言語のプログラムでメールを受信したいです。

はじめ、スプールファイルを直接読んで処理しようと思ったのですが、エンコード
やら、文字コード変換やら色々とややこしく、簡単な方法を模索しています。

POP3のライブラリとかあればと思ったのですが、ググッてみても出てきませんでした。
何かよいライブラリがありましたら、おしえてください。


51 :デフォルトの名無しさん:2006/06/13(火) 20:03:12
何やりたいのかよくわからんけど、簡単にやるなら C でわなく perl あたりだと思う今日この頃。

52 :50:2006/06/13(火) 20:47:20
訳あってC言語なんですが、やりたいことはメールの内容を解読して、DB(ポスグレ)に
書き出すというプログラムです。
常に起動していて、スプールファイルにデータが書き込まれたときに処理を行います。

文字コード変換は、iconv()という関数で出来るらしいという情報は得ましたが、
デコード(ISO-2022JP/BASE64)処理ができる関数というのがまだみつかっていません。

POP3のライブラリとかあれば、自動的にやってくれると思っているんですが、
ないでしょうか・・・

53 :デフォルトの名無しさん:2006/06/13(火) 22:37:43
base64くらい簡単なんだから取り敢えず自分で書いちゃえば?

54 :デフォルトの名無しさん:2006/06/13(火) 23:34:47
このプログラムを高速化する方法を教えてください。よろしくお願いします。
#include<stdio.h>
main()
{
int i, j;
i=0;
while( i < 100){
j=2;
while( j < i){

if( i % j == 0)
break;
j++;
}
if( i == j)
printf("%d\n", i);
i++;
}
}



55 :デフォルトの名無しさん:2006/06/14(水) 01:00:00
#include <stdio.h>
int main()
{
printf("2\n3\n5\n7\n11\n13\n17\n19\n23\n29\n31\n37\n41\n43\n47\n53\n59\n61\n67\n71\n73\n79\n83\n89\n97\n");
exit(0);
}

56 :デフォルトの名無しさん:2006/06/14(水) 01:03:56
>>52
metamailのソースを窃盗しろ。

57 :デフォルトの名無しさん:2006/06/14(水) 02:05:28
>>52
あえてbase64のためだけにglib

58 :デフォルトの名無しさん:2006/06/15(木) 03:08:55
Segmentation faultなどで、プログラムが停止すると、
コアが吐かれますが、あれはどのように活用すればよいのでしょうか?


59 :デフォルトの名無しさん:2006/06/15(木) 03:14:56
乱数表

圧縮率評価用サンプル


60 :デフォルトの名無しさん:2006/06/15(木) 03:45:48
コアってのは、プロセスが死んだときのそのプロセスが使っていたメモリの内容。
デバッガに、死んだプログラムの実行イメージとともに与えることで、プロセス
死亡時の状況
・どういう経路でどの関数の何行目に到達して死んだのか
・そのときの各変数はどんな値だったか
が再現でき、死因を調べるのに使える。

61 :デフォルトの名無しさん:2006/06/15(木) 08:06:02
素人でも出来ますか?

62 :デフォルトの名無しさん:2006/06/15(木) 08:44:56
Unix系なら最低限adb程度のデバッガがある。
adbがあるなら、coreのあるディレクトリでadb <実行モジュール> として起動、
$c を入力すればスタック履歴が出るのでどの関数から呼ばれたどの関数から吐いたコアか判る(事も多い)。
但し、実行モジュールのシンボルが剥がされていると関数名が出ない。
#詳しくは手元のデバッガの使い方を調べてくれ。

63 :デフォルトの名無しさん:2006/06/15(木) 09:25:43
>>60
> コアってのは、

コアダンプってのは、


64 :デフォルトの名無しさん:2006/06/15(木) 09:46:21
>>60
> コアってのは、

ヨーグルト

65 :デフォルトの名無しさん:2006/06/15(木) 12:06:43
>>63(笑)

66 :デフォルトの名無しさん:2006/06/15(木) 12:21:32
pascalの文法には、変数名とか関数名の非終端記号があるらしんだけど
これはすべて名前(識別子)であって文法を簡単にするものであると。

原始プログラム中のその名前をみただけではどの名前であるか
判別できない。これの解決策はなにですか?


67 :デフォルトの名無しさん:2006/06/15(木) 12:25:45
>>66
Ruby

68 :デフォルトの名無しさん:2006/06/15(木) 13:57:12
>>62
Linuxとか*BSDならgdbもあるだろうしな。

69 :デフォルトの名無しさん:2006/06/15(木) 14:05:32
>>66
冷たいようだが「宿題スレに行け」。

70 :デフォルトの名無しさん:2006/06/15(木) 16:33:56
UNIX なら dbx!!

71 :デフォルトの名無しさん:2006/06/15(木) 18:35:45
Linux上でブロードキャストメッセージを受信するプログラムを作成している者なのですが、
PCなどから送信したブロードキャストメッセージの信号にのってるMACアドレスを取得したく考えてます。

recvfromを使用しても、UDPデータ部しか見れなくて、困っているんですが、この場合、
RAWソケットを使用しないと、見れないものなのでしょうか?
また、RAWソケットを使用して、特定のポートのみをチェックすることって可能なのでしょうか?



72 :デフォルトの名無しさん:2006/06/15(木) 18:52:15
>>71
IPレイヤから物理層レイヤのヘッダを把握してはいけません。
そもそもloやtunやpppやslipだったりしたらmacaddressなんて存在しないが?

73 :71:2006/06/15(木) 19:06:42
>>72
そのとおりですね。。。
想定として、LAN内のPCから受信するUDPメッセージのみを意識していたので、この書き方になってました。
もう少し、書くべきでした。

UDPメッセージの送信元MACアドレスを引く場合には、何か方法があるんでしょうか?
(MACアドレスを使用して認証みたいなことをしたいんで。。。)

74 :デフォルトの名無しさん:2006/06/15(木) 19:53:12
linuxならPF_PACKETとか。libpcapのソース嫁

75 :デフォルトの名無しさん:2006/06/16(金) 00:09:51
>>74
まあraw socketってことだよね。

MACアドレスは、NICによっては簡単に詐称する事できるので、
まじ認証をやらないように。

76 :50:2006/06/16(金) 09:43:06
みなさん、色々と情報ありがとうございます。
その後、nkfというコマンドがソース公開されてたので、これで出来ないかと
思っています。
サブジェクトのiso-2022-jpが変換できるか微妙ですが試してます。
ありがとうございました。


77 :デフォルトの名無しさん:2006/06/16(金) 13:42:43
ちゃんとMIMEの仕様も読んだ方がいいよ。

メールをメールフォルダに取り込むのと、
メッセージを解析するのは全然別の仕事なんだけど、
その辺ちゃんと整理して理解出来ているのかね?


78 :50:2006/06/16(金) 14:32:55
>77
thx
今回は、一般的なメールクライアントではなく、特定業務のクライアントで、
送られてくる文字コードとかも決まっているし、メールをユーザに見せるわけ
でもないから、違うエンコードでメール本文解析できなかったらエラーにする
だけっす。

nkfでサブジェクトも本文も文字コード変換できますた。
あとは、こいつをファイルからではなく文字列を渡して変換かましてくれる
ようにするだけだだだ。


79 :デフォルトの名無しさん:2006/06/16(金) 14:36:18
>>78
何故libiconvなりiconvプロセスなりを使わない?
OSによっては標準で入っているのだけれど。

80 :デフォルトの名無しさん:2006/06/16(金) 15:07:16
>>79
一般論で横レススレ浮けど、iconv は不正な文字があると変換に失敗
してしまうから、いろんなクライアントから送られてくる怪しげなものを
処理するには向いていないと思う。

ある程度適当にやってくれる nkf の方がより向いているというか。

81 :デフォルトの名無しさん:2006/06/16(金) 15:39:10
Structured fieldはQ encodingだからiconv()だけで解決するのは無理ざんしょ。

82 :71:2006/06/16(金) 16:31:09
>>72,>>74-75
レス有難うゴザイマシタ。

諦めて、UDPデータ内にMAC入れる事で合意を取る方向にします。

83 :デフォルトの名無しさん:2006/06/16(金) 16:50:33
>>82
いや、だから MAC アドレスで認証したら駄目だって。


84 :デフォルトの名無しさん:2006/06/16(金) 19:17:01
>>83
暗号化したデータ部に入れる方向(に変換)なので、大丈夫かなぁと。
心配オカケシマシタ。

85 :デフォルトの名無しさん:2006/06/16(金) 19:55:33
認証*みたいな*ことならOKでしょ
疑いだしたらきりがない

86 :デフォルトの名無しさん:2006/06/16(金) 19:59:35
>>55
ありがとうございます
ソースで10分の1、実行速度で6000分の1に短縮することが出来ました

87 :デフォルトの名無しさん:2006/06/16(金) 22:28:59
というか、MACアドレスは常に外に晒されているわけで。
*みたいな*ことにも不適格。

88 :デフォルトの名無しさん:2006/06/16(金) 22:40:18
いいじゃん。君が仕様決めるんじゃないんだし。

89 :デフォルトの名無しさん:2006/06/16(金) 23:04:58
不適切なことをする自由は誰にもあるわな。

90 :デフォルトの名無しさん:2006/06/16(金) 23:06:55
MACアドレス査証によるリスクと、MACアドレスを使わない場合の開発コストを天秤にかけて
妥当なほうを取ればええ。

91 :デフォルトの名無しさん:2006/06/16(金) 23:15:26
どんな天秤だよ!
まずパスワード認証その他の認証方法と天秤だろw

92 :デフォルトの名無しさん:2006/06/16(金) 23:26:51
MACアドレスを使いたいってことは、使用できる機器を制限したいってことじゃないか?
ID形式だとそれこそ詐称しまくられるリスクがある。
まぁ質問者じゃないから、なんともいえんが

93 :デフォルトの名無しさん:2006/06/16(金) 23:40:06
>>92
君のレベルは問題外

94 :デフォルトの名無しさん:2006/06/17(土) 00:07:08
>>93
批判するなら具体的にやりましょう。

95 :デフォルトの名無しさん:2006/06/17(土) 00:29:17
> MACアドレスを使いたいってことは、使用できる機器を制限したいってことじゃないか?
「認証したい」って言ってるんだから明らかに自明なことを、
なんでそんなにしたり顔で言えるのか理解に苦しむ。

96 :デフォルトの名無しさん:2006/06/17(土) 00:59:56
>>95
質問者は認証したいとはひとことも言ってないが。

97 :デフォルトの名無しさん:2006/06/17(土) 01:05:01
それに質問者がどのようなものにMACアドレスを使いたいのかわからないが、例えばWebアプリケーションや、
クライアントサーバ型アプリケーションなら当然パスワード認証等も考慮するだろうし、それをしないとも
書いていない。

98 :デフォルトの名無しさん:2006/06/17(土) 01:12:04
DRM関連じゃないの?<MACアドレス
コンテンツのmove不可とか。

99 :デフォルトの名無しさん:2006/06/17(土) 02:05:56
なんか必死な奴は、どこかから仕入れた知識で、MACアドレスの偽装方法を知っていることを
自慢したいのでしょう。

100 :デフォルトの名無しさん:2006/06/17(土) 02:59:26
まぁ認証といっても、使用者の認証、ライセンスの認証、使用機器の認証といろいろとあるからな。

101 :デフォルトの名無しさん:2006/06/17(土) 03:03:37
>>96
>>73

102 :デフォルトの名無しさん:2006/06/17(土) 03:07:06
認証みたいなことをしたいんだろ。
つか、お前何が言いたいの?

103 :デフォルトの名無しさん:2006/06/17(土) 03:09:56
>>101
つか、この程度のニュアンスも汲み取れないんじゃ、プログラマやめたほうがいいよ。

104 :デフォルトの名無しさん:2006/06/17(土) 03:16:06
変なことで盛り上がるなよw

105 :デフォルトの名無しさん:2006/06/17(土) 03:20:20
からまれたもんで。

106 :デフォルトの名無しさん:2006/06/17(土) 03:26:07
まぁ>>91を見る限り、相手がNIU固定のファームかもしれないなんて想像もできないんだろうけど。

107 :デフォルトの名無しさん:2006/06/17(土) 03:26:55
お前しつこいよw

108 :デフォルトの名無しさん:2006/06/17(土) 03:27:56
うるさい。俺は徹底的にやるよ。
ガキは叩きのめす主義なんで。

109 :デフォルトの名無しさん:2006/06/17(土) 03:29:38
頓珍漢なこと言って諌められたからって切れなくてもいいのに

110 :デフォルトの名無しさん:2006/06/17(土) 03:30:42
具体的に指摘しなされ

111 :デフォルトの名無しさん:2006/06/17(土) 03:31:42
ひょっとして>>90のことか?
これが頓珍漢なことに見えるんなら、マジ相手にならんわ。

112 :デフォルトの名無しさん:2006/06/17(土) 03:32:58
必死だな

113 :デフォルトの名無しさん:2006/06/17(土) 03:33:56
まぁお前が.>>91なんだろうけど、逃げたいなら何も書かずにほっとけよ。追いかけないから。

114 :デフォルトの名無しさん:2006/06/17(土) 03:38:20
>>112
お前が>>91なら>>106に対するコメント書いとけ。俺もう寝るから。書かなくてほっといてもいいぞ。

115 :デフォルトの名無しさん:2006/06/17(土) 03:40:01
起きて監視しているんだろw

116 :デフォルトの名無しさん:2006/06/17(土) 11:53:51
教えて下さい!

finde ./ の結果が

AAA
AAA/BBB
AAA/BBB/hoge1.txt
AAA/BBB/hoge2.txt
AAA/BBB/hoge3.txt
AAA/BBB/CCC/hoge4.txt
AAA/BBB/CCC/DDD
AAA/BBB/CCC/DDD/EEE
AAA/BBB/FFF/GGG/hoge5.txt
AAA/BBB/FFF/GGG/hoge6.txt
AAA/BBB/FFF/GGG/HHH
AAA/BBB/FFF/III/hoge7.txt
AAA/BBB/FFF/III/JJJ
AAA/BBB/FFF/III/JJJ/KKK
AAA/BBB/FFF/III/JJJ/KKK/LLL
AAA/BBB/FFF/III/JJJ/KKK/LLL/MMM

となっていて、ツリーにファイルを持たないフォルダのみを
抜き出したいです。



117 :デフォルトの名無しさん:2006/06/17(土) 11:55:38
↓こんな感じです。

AAA/BBB/CCC/DDD
AAA/BBB/CCC/DDD/EEE
AAA/BBB/FFF/GGG/HHH
AAA/BBB/FFF/III/JJJ
AAA/BBB/FFF/III/JJJ/KKK
AAA/BBB/FFF/III/JJJ/KKK/LLL
AAA/BBB/FFF/III/JJJ/KKK/LLL/MMM

先輩は、find . -type d -emptyと言い残して旅に出ましたが
動きませんでした…

OSはこれです。シェルがどうこうはよくわかりません。。。
SunOS devcvs01 5.9 Generic_118558-05 sun4u sparc SUNW,UltraAX-i2


118 :デフォルトの名無しさん:2006/06/17(土) 12:38:14
動くよ。

それに、それプログラミングじゃないだろ。
それから、その結果欲しければ、find AAA (ryだろ。

119 :デフォルトの名無しさん:2006/06/17(土) 12:50:31
シェルプログラミングスレどっかにあったな。UNIX板か?
実はSolarisのfindには-emptyオプションがないとか?
GNUとMac(BSD)にはあった。

120 :デフォルトの名無しさん:2006/06/17(土) 13:25:45
そのとーりSolarisには-emptyないよ

>>118
ぷw

121 :デフォルトの名無しさん:2006/06/17(土) 13:41:01
いかなる環境でも安定して動作し、
複数の計算機、複数の別プロセスから同時にアクセスされても安全が保障され、
複数プロセス間で、ロックを試みた順番で確実にロック権が回ってくる

そんな「完璧な」ファイルロックというのは可能でしょうか?
それとも、日本語の文字コードを完全には自動識別できないのと同じように、
ファイルのロックにも「完全」というのは存在しないのでしょうか?

ヒントやキーワードだけでいいから教えて下さい

122 :デフォルトの名無しさん:2006/06/17(土) 14:05:27
>>121
ヒント: スレ違い

123 :デフォルトの名無しさん:2006/06/17(土) 16:49:41
>>116
空のディレクトリを抜き出したい理由は?
カレント配下の空のディレクトリを消したいだけなら
find . -depth -type d -exec rmdir {} \;
でできるけど。
#-depthを指定しないと、例えばDDDを消そうとして失敗してからEEEを消すことになる。

124 :デフォルトの名無しさん:2006/06/17(土) 17:02:27
AAA/BBB/CCC/DDD/EEE
がファイルなのかディレクトリなのか区別出来ないけど

125 :デフォルトの名無しさん:2006/06/22(木) 05:41:18
pthread使用していてgdbでデバッグしてるとepoll_waitが割り込みで何度も止まってるのよ
何のシグナル受け取ってるのか判別する方法ないかな

126 :ゆーき:2006/06/26(月) 00:07:54
ハイパー初心者ですが、octaveでsubplotをファイルに保存したいのですが、print -depsや
gset term postscript enhancedではできません。。。
だれかやりかたを教えて下さい。お願いします。

127 :デフォルトの名無しさん:2006/06/26(月) 00:18:58
>>125
OSを書け

128 :デフォルトの名無しさん:2006/06/26(月) 03:54:31
epoll_waitと書いている以上、Linuxだろ?
straceで追っかけてみるのはどーだろ?

129 :デフォルトの名無しさん:2006/06/26(月) 12:59:50
LinuxならSIGALRMじゃないの?

$(GLIBC)/nptl/*eintr*辺り読んでみて。

130 :デフォルトの名無しさん:2006/06/30(金) 03:23:01
>>121
ありとあらゆる環境上でなんて事実上不可能

> 複数プロセス間で、ロックを試みた順番で確実にロック権が回ってくる

「ロックを試みた順番」という単語一つとっても

- ロックマネージャーに届いた順番?
- ロックにあたるFunctionを呼び出したとき?

など曖昧かと..
PostgreSQLなどのDBMSのソースとかがヒントになるかもしれない。

131 :デフォルトの名無しさん:2006/06/30(金) 14:01:44
Linuxの一般のユーザーwatashiとtaninがいて、
watashiがtaninさんの/home/tanin/workのオーナーになりたいので、
こんなプログラムを作って、
int main()
{
int uid = 509;// watashiのuid
int gid = 100;// watashiのgid
chown("/home/tanin/work", uid, gid);
}
gccでコンパイルしたあと、ルートになって
chmod ug+s a.out
して、watashiユーザーで実行してみたのですが、失敗しました。
この方法では、watashiはtaninさんのディレクトリのオーナーになることはできませんか?


132 :デフォルトの名無しさん:2006/06/30(金) 14:25:35
chown root a.out
したか?
setuidされたプログラムは、そのプログラムファイルの所有者
の権限で動くのであって、自動的にroot権限で動く訳ではない。

133 :デフォルトの名無しさん:2006/06/30(金) 14:28:01
>chown root a.out
>したか?
ああ、その通りでした。忘れてました。
rootにchownしらた無事動きました。お騒がせしました。

134 :デフォルトの名無しさん:2006/06/30(金) 15:09:49
>>131
chown()の返り値を調べてエラー処理をするように。

int result = chown(〜);
if (result != 0) {
perror("/home/tanin/work");
exit(1);
}

135 :デフォルトの名無しさん:2006/07/01(土) 23:34:34
fork() で子プロセスを立ち上げるプログラムを書いてるのですが
(親プロセスは走り続けてイベントを待ち、時々 fork() して子プロセスに仕事をさせる)
子がシグナルを受けたときの親の wait() (wait4()) を呼ぶタイミングがわかりません。

親プロセスに SIGCHLD のハンドラをインストールしてその中で wait4() してみたの
ですが、 それだと子プロセスがゾンビになる場合があるようです。(うまくいく場合もある)
なお wait4() には WNOHANG をセットしてそこで親がハングしないようにしています。

シグナルハンドラ内の wait4() で駄目なときは、どうやらもっと後で wait4() を呼ぶと
うまく子プロセスが刈られるようです。
ただ、それは実験的に親のプログラムのいろんなところに wait4() を埋め込んだ
らゾンビが出ないのがわかっただけなんで、それでいいとは思えません。

こういうプログラムの場合 wait() ってどういうタイミングで呼べばいいんでしょうか。
あるいはタイミング以外に問題があるでしょうか。(ソースコードがないと厳しいかな?)
ちなみに OS は Mac OS X 10.4.6 です。

136 :135:2006/07/01(土) 23:43:08
あ、ちなみに wait4() を呼ぶときは WNOHANG かつ pid に -1 をセットして
ループで全てのプロセスを処理するようにしています。

137 :デフォルトの名無しさん:2006/07/01(土) 23:51:23
ハンドラ内で、signalがブロックされているうちに、
たくさん子プロセスが終了するけど、
ハンドラ終了のタイミングなどでループで全部処理しきれてない、
くらいしか想像付かない。

138 :デフォルトの名無しさん:2006/07/02(日) 00:05:12
>>135
waitは基本的にSIGCHLDのシグナルハンドラで呼ぶ。
同タイミングで大量の子プロセスが死ぬ場合は問題になるのかも
しれないけど、俺はそんな経験nothing。

親プロセスが、子プロセスの死亡時に、プロセスを成就させる以外の
仕事をしないなら、forkを二回行って子プロセスを親プロセスのグループから
切り離すという手もある。
詳しくはUNIX Programming FAQ参照。

139 :135:2006/07/02(日) 02:38:11
どうも、早速のフォローありがとうございます。
>>137 >>138
そうですよね、基本はSIGCHLDのハンドラ内で wait() すればいいんですよね。

すいません、書き込みしたあともう少し調べてみたら、どうも状況によってシグナル
ハンドラが呼ばれない場合があるようです。なんとなく、子プロセスが大量にメモリを
使う処理をした後はハンドラが呼ばれていないような...
子プロセスは、同時に起動するのは1つだけです。
ps で見ると子プロセスのステータスは Z になっているんですが。

ちなみに sigaction() を使っているんですが、これって、一回ハンドラが呼ばれたら
また再インストールする、なんて必要はないですよね?
フラグは SA_RESTART だけを設定しています。

もしかして OS のバグ?
とりあえず動くものを作らないといけないので、さしあたり新たに fork() する前に
wait4() するようにしてゾンビの増殖は防げるようになりましたが... 気持ち悪い。

140 :デフォルトの名無しさん:2006/07/02(日) 03:21:20
wait4が-1を返した時のerrnoもちゃんとチェックしてる?
死んだ子がいないと判断できるのはerrno==ECHILDの時だけだよ。
wait4が-1返しても、errnoがEINTRの時なんかは、まだ子が取り残されてる場合がある。

141 :デフォルトの名無しさん:2006/07/02(日) 09:07:35
> もしかして OS のバグ?

こう思うときの99%は自分の理解不足が本当の原因。


142 :プログラミング:2006/07/03(月) 15:16:08
誰かほんとにすいませんっ↓この問題分かる人教えてください!!
お願いします!(>△<)
言語はdelphiです。

?モンテカルロ法を使って1/3を求めるプログラムを作くれ。
 モンテカルロ法を試行する回数をプログラム実行時に選べるようにせよ。

?2分法を使って188の5乗根を求めよ。途中経過を分かりやすく画面に表せ。

143 :デフォルトの名無しさん:2006/07/03(月) 15:22:12
問題がunix固有ではまるでない感じなので、Delphiのスレに行ったほうが
回答が得られやすいと思われるが、宿題は自分でやろうな。


144 :デフォルトの名無しさん:2006/07/03(月) 15:26:16
>>143
作くれなんて問題の宿題があるか?

と思ったがあるみたいだ。

145 :プログラミング:2006/07/03(月) 15:30:08
はいっありがとうございます!
delphiの掲示板いってみます(>▽<)☆

146 :デフォルトの名無しさん:2006/07/05(水) 15:47:29
この質問はここでいいのかな?
pathName = "/home/guest/"
fileName = "*.txt"

として、文字列

"/home/guest/*.txt"

にマッチしたファイルのみ削除する関数を作りたいのですが、opendir()関数だと、
指定したパス内の全ファイル名を取得することはできたのですが、
特定のパターンにマッチしたファイルのみ取り出すにはどうしたらよいでしょうか?

remove_files(char *pathName, char *fileName)
{
...
...

}
こんな関数を作りたいのです。
良い方法はありますか??

147 :デフォルトの名無しさん:2006/07/05(水) 15:53:55
つ fnmatch(3)
つ glob(3)

148 :デフォルトの名無しさん:2006/07/05(水) 15:55:44
Cでやりたいの?
bashのsourceにlibglobってのがあるからそれ使って。

shell scriptでやるのが簡単だとおもうけれど。
"/bin/ls home/guest/*.txt"をpopen(2)するとか。

149 :デフォルトの名無しさん:2006/07/05(水) 16:06:29
みなさんありがとうございます。
そうですCでやりたいです。
普段windowsのVCで書いているのですが、10年ぶりくらいに
Linuxのgccで少し作業することになりまして、難儀してます。

150 :デフォルトの名無しさん:2006/07/05(水) 16:23:04
>>149
system("/bin/rm /home/guest/*.txt");
Unix系だからこそ、適材適所で書くべきだと思う。

151 :デフォルトの名無しさん:2006/07/06(木) 03:56:05
>>150

>>148 の言ってる popen の方が良いと思う


152 :デフォルトの名無しさん:2006/07/06(木) 07:33:33
削除するのにls?

153 :デフォルトの名無しさん:2006/07/06(木) 18:03:37
そのツッコミは想定内です

154 :デフォルトの名無しさん:2006/07/06(木) 19:27:54
>>147を無かったことにしたい流れに萎え

155 :デフォルトの名無しさん:2006/07/06(木) 22:42:47
>147か>150の二択でいいんでね?

156 :デフォルトの名無しさん:2006/07/06(木) 23:53:55
シェルを通すやり方の場合、もしユーザーの任意のパターンを受け付けるのであれば、
"; /bin/rm -rf /"
なんていうパターンが与えられても大丈夫でないといけない。

157 :デフォルトの名無しさん:2006/07/07(金) 01:12:25
頭のおかしい人登場

158 :デフォルトの名無しさん:2006/07/07(金) 02:41:02

漏れなら

" & /bin/rm -rf / "

にする


159 :デフォルトの名無しさん:2006/07/07(金) 03:13:57
俺のお気に入りの削除方法おしえちゃう

zip -rm /tmp/.zip *


160 :デフォルトの名無しさん:2006/07/07(金) 03:23:46
俺は

chmod -R a-x * .*

161 :デフォルトの名無しさん:2006/07/07(金) 13:39:05
すんません、シェルスクリプトをCに置き換えたいのですが
システムコマンドって使えるですか?

たとえば

/usr/bin/aumix -v $VOL

この$VOLを可変したいのですが
Cってのがこのaumixコマンドを扱えるのかな?と・・・・・・・・・・・・・ヒントキボン

162 :デフォルトの名無しさん:2006/07/07(金) 14:47:48

int callsumix(char *vol)
{
  char *buf = (char *)malloc(適当);
  sprintf(buf, "/usr/bin/aumix -v %s", vol);
  system(buf);
  free(buf);
  return 適当;
}

163 :デフォルトの名無しさん:2006/07/07(金) 14:49:20
>>162 おお!(゚∀゚)神のヨカーン 

なるほどね、printfで!
echo "aumix -....

ありがd!!

164 :デフォルトの名無しさん:2006/07/07(金) 14:55:44
int callsumix(char *vol)
{
return execl("/usr/bin/aumix", "/usr/bin/aumix", "-v", vol);
}

165 :デフォルトの名無しさん:2006/07/07(金) 14:58:22
null terminate するの忘れた。

return execl("/usr/bin/aumix", "/usr/bin/aumix", "-v", vol, NULL);

166 :デフォルトの名無しさん:2006/07/07(金) 15:03:48

int callsumix(char *vol)

次の人 ↑ ここ直してね

167 :デフォルトの名無しさん:2006/07/07(金) 15:11:01
>>165-166 ちょwww! なんかいろいろと方法があるんすね?!
execl ですかそうですか

ちょっとGoogleも見てきます

つーか、Bashで書いたものをコンパイルできればいいっすねw

168 :デフォルトの名無しさん:2006/07/07(金) 15:21:08
baka

169 :デフォルトの名無しさん:2006/07/07(金) 15:24:02
その昔、商用でシェルスクリプトのコンパイラってあったよね?

170 :デフォルトの名無しさん:2006/07/07(金) 15:44:03
>>168  つД`)・゚・。・゚゚・*:.。..。.:*・゚
>>169  ヽ(`Д´)/それだ!( ゚д゚)ホスィ…でもCshだけだったり

main関数ってなんだよぉ〜
Cなんてわかんねぇよぉ〜
逝ってきますorz
でも、CでUNIXコマンドがいじれることがわかったのはテラウレシス!

171 :デフォルトの名無しさん:2006/07/07(金) 20:29:39
>>167

exec*系は成功したら帰ってこないからな。
ついでにforkもペアで調べるんだ。

172 :デフォルトの名無しさん:2006/07/07(金) 21:53:35
nix はその最初の敷居が高すぎる

#define exec fork() ? wait() : execl

exec("sh", "-c", "/usr/bin/aumix -v $VOL")

もうfork はこれでよくね?うごかねえかな?

173 :デフォルトの名無しさん:2006/07/07(金) 22:44:15
お前それ以前にCわかってないやん

174 :デフォルトの名無しさん:2006/07/08(土) 19:12:31

 ; を忘れてるのは見逃すとして、

とりあえず

fork() ? wait() : execl("sh", "-c", "/usr/bin/aumix -v $VOL");

になるのか。
pid == 0 の方が実行される方か。



175 :デフォルトの名無しさん:2006/07/08(土) 19:17:04
(;´Д`)

176 :デフォルトの名無しさん:2006/07/08(土) 22:48:40
fork()が-1返した時は?

177 :デフォルトの名無しさん:2006/07/08(土) 22:51:50
wait() へ行くから大丈夫なん?

178 :デフォルトの名無しさん:2006/07/08(土) 23:37:01
execlが返ってきたら危険だね


179 :デフォルトの名無しさん:2006/07/09(日) 00:41:54
orz わかんねぇよ フォークだかボークだかエクセルだかワードだか・・・・

180 :デフォルトの名無しさん:2006/07/09(日) 00:46:28
素直にif - else ifで書くがよろし。

181 :デフォルトの名無しさん:2006/07/09(日) 01:14:59
>>179
ああぁぁぁぁ!!!! 先を越されたorz それは俺が言おうと(ry

182 :デフォルトの名無しさん:2006/07/09(日) 02:03:38
マニュアル嫁よ

183 :デフォルトの名無しさん:2006/07/09(日) 13:07:51
すんません、「おはよう世界」から出直します

184 :デフォルトの名無しさん:2006/07/09(日) 16:37:56
printf("Good morning world.\n");

185 :デフォルトの名無しさん:2006/07/09(日) 17:39:22
こんにちわ世界でしたね ̄|_|・・・..●ゲヴォルガァ

186 :デフォルトの名無しさん:2006/07/09(日) 19:34:36
printf("Welcome to HELL WORLD.\n");

187 :デフォルトの名無しさん:2006/07/09(日) 20:04:09
char *p = NULL;

while(1){
 printf("%02x\n", *p++);
}

188 :デフォルトの名無しさん:2006/07/10(月) 20:14:34
>>169
漏れシェルのコンパイラって使ったことあるよ。
「これでシェルスクリプトが100倍速く走るぜ!」
と思って感動にうち震えながら試したが、軽くも速くもならなかった。
漏れがボンクラプログラマ−たから? ええ。それも、そうなんですけどね

189 :デフォルトの名無しさん:2006/07/11(火) 00:42:55
システムコールってわかんねぇよww
もういいや、Shellscriptで書きつづけるよ
どうせ100行以上のプログラムなんて書けないしヲ
チマチマプログラマーでいいっすヲ

190 :デフォルトの名無しさん:2006/07/11(火) 00:48:35
man 2に入ってるのがシステムコール
man 3に入ってるのがライブラリ

191 :デフォルトの名無しさん:2006/07/11(火) 19:35:29
man coに入ってるのがチソポ


192 :デフォルトの名無しさん:2006/07/11(火) 19:49:08
ハァッ、ハァッ、ハァッ、ハァッ!

193 :デフォルトの名無しさん:2006/07/11(火) 20:52:46
>>189
ヒント:http://www.linux.or.jp/JM/INDEX/ldp.html

194 :デフォルトの名無しさん:2006/07/12(水) 11:03:43
そもそも、ぽまえらの使用言語は何でつか?

195 :デフォルトの名無しさん:2006/07/12(水) 11:10:34
C, C++, perl, sh, Java, BeanShellといったところ。

196 :デフォルトの名無しさん:2006/07/12(水) 11:26:38
C, C++, java, python, Haskell, scheme, bash, zsh, emacs lisp

197 :デフォルトの名無しさん:2006/07/12(水) 11:32:08
Brankfuck, INTERCAL, HQ9+

198 :デフォルトの名無しさん:2006/07/12(水) 11:46:12
C

199 :デフォルトの名無しさん:2006/07/12(水) 14:27:58
書く頻度でRuby, Java, sh, Cってとこか。

200 :デフォルトの名無しさん:2006/07/12(水) 20:52:42
C++, Perl, C, sh, Ruby, Fortran

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

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

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

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

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


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

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

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

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

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

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

211 :デフォルトの名無しさん:2006/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 :デフォルトの名無しさん:2006/07/19(水) 00:45:43
オナニーはひとに頼らずに自分一人でやれよ

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

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

215 :デフォルトの名無しさん:2006/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:2006/07/19(水) 02:03:19
あっと、それからその手のコードを書くときは
・何かを標準出力に出力するだけのプログラム
・標準入力をそのまま標準出力にするプログラム
を作って、それを使ったほうがいろいろ便利。デバッグプリントとか入れやすいし。

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

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

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

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


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


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

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

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

hoge | fuga | hage

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


あと

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

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

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

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

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

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

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

みたいな感じやろ。

227 :デフォルトの名無しさん:2006/07/19(水) 14:05:54
今、『OS自作入門』を読んでる途中で、ちょっと興味があるので実験してみました。
書いたコードは、ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2397.txt です。
このコードは次のことを行います。
・親プロセスが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 :デフォルトの名無しさん:2006/07/19(水) 16:43:51
>>227
>  今の方針だと、n個のプロセスを起動する場合は、n-1個のpipeが必要で、
>  それぞれfork後、関係ないpipeを全部closeしなければなりません。

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

242 :234:2006/07/21(金) 01:14:29
答えてるやん!


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

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

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

http://www.advancedlinuxprogramming.com/
http://www.advancedlinuxprogramming.com/alp-folder/alp-ch04-threads.pdf

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

259 :256:2006/08/17(木) 22:05:56
>>255
ようわかったわ

260 :256:2006/08/17(木) 22:22:10
>>259
誰ディスカ?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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


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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

302 :デフォルトの名無しさん:2006/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 :デフォルトの名無しさん:2006/09/15(金) 21:37:30
busyboxのソースが参考になるかと思うんだけど

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

ヒント以上だな。

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

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

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

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

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



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


もち〜ふの処女用教科書とか、ありましたら教えてくだしあ
とりあえず今は、ここ↓で勉強中でし
http://home.soka.ac.jp/~unemi/Motif/example.html

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

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

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

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

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

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

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

>>310
何の訓練?

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

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

あなたは頭が固すぎる。


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

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

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

お願いします。

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

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

318 :デフォルトの名無しさん:2006/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 :デフォルトの名無しさん:2006/09/20(水) 21:56:35
どーせ質問者Linux使ってるだろうからあるだろうけど、
seqって可搬性あるんだっけ?

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

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

321 :デフォルトの名無しさん:2006/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 :デフォルトの名無しさん:2006/09/21(木) 21:07:18
皆さん考えてくださってありがとうございます。

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

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

記述は、

#!/bin/bash

while [ ]
do
done

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

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

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

324 :デフォルトの名無しさん:2006/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 :デフォルトの名無しさん:2006/09/21(木) 22:07:03
正直、宿題です orz

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

339 :デフォルトの名無しさん:2006/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 :デフォルトの名無しさん:2006/10/05(木) 10:21:44
マイナスになることはないので、0)と*)でいいのではないか?

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


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

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

単純に、こういうことなんじゃないのか?
http://www.google.co.jp/search?hl=ja&q=%22math.h%22+log&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja


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

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

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

347 :344:2006/10/08(日) 02:27:22
>>346
入門書読め

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

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

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

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

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

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

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

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

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

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


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

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

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

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

359 :デフォルトの名無しさん:2006/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 :デフォルトの名無しさん:2006/10/09(月) 13:22:35
警告出したくないだけなら/dev/nullにパイプしろ

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

388 :デフォルトの名無しさん:2006/10/21(土) 23:03:29
>387
ロケールを設定。
ttp://www.google.co.jp/search?q=C%2B%2B+locale

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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



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

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

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

getpeeraddr(2)



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

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

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

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

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

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

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


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

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

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

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


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


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

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


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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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


463 :デフォルトの名無しさん:2006/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 :デフォルトの名無しさん:2006/12/05(火) 13:08:49
>>463
宿題スレ行けよ


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

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



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

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

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

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


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

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

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

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

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

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

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


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

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

476 :471:2006/12/12(火) 14:44:05
>>475
申し訳ないです。

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

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

477 :デフォルトの名無しさん:2006/12/12(火) 14:50:00
これでも読んだら?
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man5/proc.5.html

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

491 :デフォルトの名無しさん:2006/12/16(土) 10:58:01
http://pc8.2ch.net/test/read.cgi/tech/1164951094/298
> 分かりやすくMakefileの書き方が載ってるサイトがあれば教えてください

GNU makeのinfoがいいと思います。入門にも、リファレンスにもできる。
↓まずはこの節から。
Makefile入門
http://www.ecoop.net/coop/translated/GNUMake3.77/make_2.jp.html#SEC4

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

493 :466:2006/12/19(火) 07:45:47
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3218.txt

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

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

495 :デフォルトの名無しさん:2006/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 :デフォルトの名無しさん:2006/12/19(火) 09:34:13
whileを知らんのか

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

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

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

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

501 :デフォルトの名無しさん:2006/12/23(土) 14:39:44
http://support.microsoft.com/kb/148505/ja
windowsだとこうみたいだね。

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

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

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


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

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

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

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

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

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

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

すみません。(;。;)

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

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

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

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



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

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










ウソ

110 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)