トップページ⇒tech
988コメント267KB

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
00019702006/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
00029702006/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/
00039702006/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
0004デフォルトの名無しさん2006/05/18(木) 19:57:54
>>1
乙
0005デフォルトの名無しさん2006/05/18(木) 20:03:08
萌え
0006デフォルトの名無しさん2006/05/18(木) 22:03:46
相変わらず質問を強要するスレだな
0007デフォルトの名無しさん2006/05/18(木) 22:08:01
いいから質問すれ。
0008sage2006/05/19(金) 01:56:58
C10K Problemの話題はここでいいですか?
http://www.kegel.com/c10k.html
0009デフォルトの名無しさん2006/05/19(金) 02:04:13
そのページに「まずこれを読め」と書いてあるのを読んでからどうぞ。
0010デフォルトの名無しさん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/
0011デフォルトの名無しさん2006/05/26(金) 01:07:40
共有ライブラリ形態のlog出力ライブラリを作っていたのですが
ついつい、排他処理をさぼっていました。同期しない排他処理をするなら
spin_lock()
write_log()
spin_unlock()
こんな感じでOKですよね?
0012デフォルトの名無しさん2006/05/26(金) 06:33:35
syslog
0013デフォルトの名無しさん2006/05/27(土) 01:22:54
syslog遅くてだめです。プロセス3つに対して共通のファイルにログを
吐かせたいんですけどこうゆう場合の実装ってどうすればいいのでしょうか?
0014デフォルトの名無しさん2006/05/27(土) 02:10:18
syslogが遅いってどんな環境なんだか
0015デフォルトの名無しさん2006/05/27(土) 02:15:45
ttp://tnetio.sourceforge.jp/cgi-bin/WalWiki2/wiki.cgi?99syslog
ここでかかれている問題と、案件上の問題で
ログの誤差は1000時間で1msec以内なので実装するしかないのですよ
0016デフォルトの名無しさん2006/05/27(土) 07:23:00
Linuxのことは全然知らんが、spin_lock()ってカーネルの外で使えんの?
0017デフォルトの名無しさん2006/05/27(土) 07:34:28
大事なログってハングアップして消えたら困るだろ?
だからログメッセージを記録する度に fsync() するんだよ。
遅いのは我慢汁。
0018デフォルトの名無しさん2006/05/27(土) 07:44:50
>>15
とても参考になりました。
ありがとう。
0019デフォルトの名無しさん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
「マイナス記号 ``-'' を接頭すると、記録の際のファイルシステム
バッファのフラッシュ動作を抑制する。」とあるがこれじゃだめなの?
0020デフォルトの名無しさん2006/05/27(土) 09:10:09
同期しない=spin_lock()
ってのが意味分からないんだが。

CPUをyieldしたくないって意味で言っているの?
0021デフォルトの名無しさん2006/05/27(土) 09:25:45
>ログの誤差は1000時間で1msec以内なので実装するしかないのですよ

なんかよくわからないけど、ものすごいこと言ってる気がする。
0022デフォルトの名無しさん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 送信のタイムラグによってもズレます。
0023デフォルトの名無しさん2006/05/27(土) 09:58:51
1msecのズレがあるかどうかはどうやって測定して検収する気なんだろう。
syslog()を呼んでから時刻情報を付加してI/Oシステムコールを
呼び出すまでの間にプロセスのスイッチや他の処理のせいで
1msecの遅延が出たらどうするんだろう。
それ絶対仕様書いた奴が馬鹿だよね。真面目に実装しようとする奴も馬鹿だけど。
0024デフォルトの名無しさん2006/05/27(土) 10:06:13
Linuxのsyslogdが全て悪いってことでしょ?
全てのディストリビューションで同じものを使っているのかどうかも知らないけど、
syslogdを変更するとか、syslogdのふりをして>>22の問題点を解消した
パケットを自分で投げるとか、syslogdのつける時刻に頼るのをやめて
時刻情報を自分で取得してメッセージに含ませるとか、
やりようはあるんじゃないの。

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

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

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

0025デフォルトの名無しさん2006/05/27(土) 10:18:18
GPS時刻同期型のNTPサーバから直接シリアルで同期を取っているので
大丈夫なのですが
問題は、syslog() 発生時の時間ではなく ログサーバの syslogd が受け取った時の時間
になってしまうことが嫌なんですよ。
0026デフォルトの名無しさん2006/05/27(土) 10:22:07
>>25
問題はそこじゃないだろ。悪いこと言わないから別の人に代わってもらった方がいいよ。
0027デフォルトの名無しさん2006/05/27(土) 10:23:29
別に無理にsyslogを使わなくても、最初に言ってる>>11のようにすりゃいいんじゃないの?
spin_lock()というのが妥当かどうかは別として。
0028デフォルトの名無しさん2006/05/27(土) 10:26:36
ふつうプリンタにログを直書きだよね
0029デフォルトの名無しさん2006/05/27(土) 10:39:07
write_log(を囲むクリティカルセクション)が1msecで終わる保証はあるのかとか、
根本的な問題としてはログを書くということが必要になってから>>11の
クリティカルセクションに入るまでの間に割込み等があったら
ロギング機構がつける時刻がいくら完璧正確でも>>15の要求は満たせないんだがとか、
そのへんはいいんかいな。
0030デフォルトの名無しさん2006/05/27(土) 10:39:52
>ログの誤差は1000時間で1msec以内なので実装するしかないのですよ
ひどい仕様だな
0031デフォルトの名無しさん2006/05/27(土) 10:53:01
>>24
> Linuxのsyslogdが全て悪いってことでしょ?

違うだろ。

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

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

今回の場合は、syslogで十分かどうか、仕様も曖昧だから良く分からないけれど。
0032デフォルトの名無しさん2006/05/27(土) 10:54:19
>>30
というか日本語として意味が成立してない。
0033デフォルトの名無しさん2006/05/27(土) 10:55:16
>>31
>> syslogdのつける時刻に頼るのをやめて
>> 時刻情報を自分で取得してメッセージに含ませるとか、
>
>程度の知恵もないヤツが悪いだけ。

いや、 syslogd は自分で付けた時刻情報も取り去ってリモートに送信すると書いてあるが
0034デフォルトの名無しさん2006/05/27(土) 12:17:52
( ゚д゚)ポカーン
0035デフォルトの名無しさん2006/05/27(土) 12:18:21
国語力のないアホがやってまいりました
0036デフォルトの名無しさん2006/05/27(土) 12:52:23
$ logger -p local0.notice -t 'ボクちゃん' '今日は僕の誕生日です。'

メッセージが全文削除されるのですが何故でしょうか?
syslogdの仕業ですか?
0037デフォルトの名無しさん2006/05/27(土) 12:54:03
RTM
0038デフォルトの名無しさん2006/05/27(土) 14:39:27
汎用OSじゃ無理ってことでOK?
0039デフォルトの名無しさん2006/05/29(月) 12:46:55
いいえ
0040デフォルトの名無しさん2006/06/02(金) 08:29:17
もっとも高速なRAMへのアクセス方法を教えてください
0041デフォルトの名無しさん2006/06/02(金) 08:45:13
キャッシュに載る大きさだけ使う
0042デフォルトの名無しさん2006/06/02(金) 08:58:13
>>41
自分のプロセスだけでキャッシュを占められるわけじゃないから、
正解は「可能な限りメモリ使用量を減らす」だな。
0043デフォルトの名無しさん2006/06/02(金) 11:03:15
>>42
どういう想定してるんだか知らないが、他プロセスの存在や種類を任意とすると
コンテクストスイッチしたらキャッシュの中身は入れ替わらざるを
得ないだろうから>>41で正解。
むしろ>>42は不正解。メモリ使用量ではなく局所性に着目すべき。
0044デフォルトの名無しさん2006/06/02(金) 23:54:25
gcc -Os
0045デフォルトの名無しさん2006/06/03(土) 12:38:55
ファイルを標準入力にリダイレクトしたあとキーボードからの入力も受け付けたいのですが、openシステムコールでキーボードを開いたりって出来ませんか?
ちなみに最初からリダイレクトせずにファイルのほうをopenして読むというのは意図から外れてしまうのであしからず
どなたかご存知でしたらよろしくお願いします
0046452006/06/03(土) 12:40:18
書き忘れていましたが環境はWindows2000をホストとしてVMWare Player上で動かしているVine Linux 3.2です
0047デフォルトの名無しさん2006/06/03(土) 12:48:48
/dev/tty
0048デフォルトの名無しさん2006/06/03(土) 13:02:19
>>45
ls | less のlessは、やっているよな。>>47の方法で。
0049デフォルトの名無しさん2006/06/03(土) 16:15:38
おお、、これはよさそうなものが
>>47,48 さんありがとうございました
0050デフォルトの名無しさん2006/06/13(火) 19:59:12
MTAにpostfixを使っている環境で、C言語のプログラムでメールを受信したいです。

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

POP3のライブラリとかあればと思ったのですが、ググッてみても出てきませんでした。
何かよいライブラリがありましたら、おしえてください。
0051デフォルトの名無しさん2006/06/13(火) 20:03:12
何やりたいのかよくわからんけど、簡単にやるなら C でわなく perl あたりだと思う今日この頃。
0052502006/06/13(火) 20:47:20
訳あってC言語なんですが、やりたいことはメールの内容を解読して、DB(ポスグレ)に
書き出すというプログラムです。
常に起動していて、スプールファイルにデータが書き込まれたときに処理を行います。

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

POP3のライブラリとかあれば、自動的にやってくれると思っているんですが、
ないでしょうか・・・
0053デフォルトの名無しさん2006/06/13(火) 22:37:43
base64くらい簡単なんだから取り敢えず自分で書いちゃえば?
0054デフォルトの名無しさん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++;
}
}

0055デフォルトの名無しさん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);
}
0056デフォルトの名無しさん2006/06/14(水) 01:03:56
>>52
metamailのソースを窃盗しろ。
0057デフォルトの名無しさん2006/06/14(水) 02:05:28
>>52
あえてbase64のためだけにglib
0058デフォルトの名無しさん2006/06/15(木) 03:08:55
Segmentation faultなどで、プログラムが停止すると、
コアが吐かれますが、あれはどのように活用すればよいのでしょうか?
0059デフォルトの名無しさん2006/06/15(木) 03:14:56
乱数表

圧縮率評価用サンプル
0060デフォルトの名無しさん2006/06/15(木) 03:45:48
コアってのは、プロセスが死んだときのそのプロセスが使っていたメモリの内容。
デバッガに、死んだプログラムの実行イメージとともに与えることで、プロセス
死亡時の状況
・どういう経路でどの関数の何行目に到達して死んだのか
・そのときの各変数はどんな値だったか
が再現でき、死因を調べるのに使える。
0061デフォルトの名無しさん2006/06/15(木) 08:06:02
素人でも出来ますか?
0062デフォルトの名無しさん2006/06/15(木) 08:44:56
Unix系なら最低限adb程度のデバッガがある。
adbがあるなら、coreのあるディレクトリでadb <実行モジュール> として起動、
$c を入力すればスタック履歴が出るのでどの関数から呼ばれたどの関数から吐いたコアか判る(事も多い)。
但し、実行モジュールのシンボルが剥がされていると関数名が出ない。
#詳しくは手元のデバッガの使い方を調べてくれ。
0063デフォルトの名無しさん2006/06/15(木) 09:25:43
>>60
> コアってのは、

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

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

原始プログラム中のその名前をみただけではどの名前であるか
判別できない。これの解決策はなにですか?
0067デフォルトの名無しさん2006/06/15(木) 12:25:45
>>66
Ruby
0068デフォルトの名無しさん2006/06/15(木) 13:57:12
>>62
Linuxとか*BSDならgdbもあるだろうしな。
0069デフォルトの名無しさん2006/06/15(木) 14:05:32
>>66
冷たいようだが「宿題スレに行け」。
0070デフォルトの名無しさん2006/06/15(木) 16:33:56
UNIX なら dbx!!
0071デフォルトの名無しさん2006/06/15(木) 18:35:45
Linux上でブロードキャストメッセージを受信するプログラムを作成している者なのですが、
PCなどから送信したブロードキャストメッセージの信号にのってるMACアドレスを取得したく考えてます。

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

0072デフォルトの名無しさん2006/06/15(木) 18:52:15
>>71
IPレイヤから物理層レイヤのヘッダを把握してはいけません。
そもそもloやtunやpppやslipだったりしたらmacaddressなんて存在しないが?
0073712006/06/15(木) 19:06:42
>>72
そのとおりですね。。。
想定として、LAN内のPCから受信するUDPメッセージのみを意識していたので、この書き方になってました。
もう少し、書くべきでした。

UDPメッセージの送信元MACアドレスを引く場合には、何か方法があるんでしょうか?
(MACアドレスを使用して認証みたいなことをしたいんで。。。)
0074デフォルトの名無しさん2006/06/15(木) 19:53:12
linuxならPF_PACKETとか。libpcapのソース嫁
0075デフォルトの名無しさん2006/06/16(金) 00:09:51
>>74
まあraw socketってことだよね。

MACアドレスは、NICによっては簡単に詐称する事できるので、
まじ認証をやらないように。
0076502006/06/16(金) 09:43:06
みなさん、色々と情報ありがとうございます。
その後、nkfというコマンドがソース公開されてたので、これで出来ないかと
思っています。
サブジェクトのiso-2022-jpが変換できるか微妙ですが試してます。
ありがとうございました。
0077デフォルトの名無しさん2006/06/16(金) 13:42:43
ちゃんとMIMEの仕様も読んだ方がいいよ。

メールをメールフォルダに取り込むのと、
メッセージを解析するのは全然別の仕事なんだけど、
その辺ちゃんと整理して理解出来ているのかね?
0078502006/06/16(金) 14:32:55
>77
thx
今回は、一般的なメールクライアントではなく、特定業務のクライアントで、
送られてくる文字コードとかも決まっているし、メールをユーザに見せるわけ
でもないから、違うエンコードでメール本文解析できなかったらエラーにする
だけっす。

nkfでサブジェクトも本文も文字コード変換できますた。
あとは、こいつをファイルからではなく文字列を渡して変換かましてくれる
ようにするだけだだだ。
0079デフォルトの名無しさん2006/06/16(金) 14:36:18
>>78
何故libiconvなりiconvプロセスなりを使わない?
OSによっては標準で入っているのだけれど。
0080デフォルトの名無しさん2006/06/16(金) 15:07:16
>>79
一般論で横レススレ浮けど、iconv は不正な文字があると変換に失敗
してしまうから、いろんなクライアントから送られてくる怪しげなものを
処理するには向いていないと思う。

ある程度適当にやってくれる nkf の方がより向いているというか。
0081デフォルトの名無しさん2006/06/16(金) 15:39:10
Structured fieldはQ encodingだからiconv()だけで解決するのは無理ざんしょ。
0082712006/06/16(金) 16:31:09
>>72,>>74-75
レス有難うゴザイマシタ。

諦めて、UDPデータ内にMAC入れる事で合意を取る方向にします。
0083デフォルトの名無しさん2006/06/16(金) 16:50:33
>>82
いや、だから MAC アドレスで認証したら駄目だって。
0084デフォルトの名無しさん2006/06/16(金) 19:17:01
>>83
暗号化したデータ部に入れる方向(に変換)なので、大丈夫かなぁと。
心配オカケシマシタ。
0085デフォルトの名無しさん2006/06/16(金) 19:55:33
認証*みたいな*ことならOKでしょ
疑いだしたらきりがない
0086デフォルトの名無しさん2006/06/16(金) 19:59:35
>>55
ありがとうございます
ソースで10分の1、実行速度で6000分の1に短縮することが出来ました
0087デフォルトの名無しさん2006/06/16(金) 22:28:59
というか、MACアドレスは常に外に晒されているわけで。
*みたいな*ことにも不適格。
0088デフォルトの名無しさん2006/06/16(金) 22:40:18
いいじゃん。君が仕様決めるんじゃないんだし。
0089デフォルトの名無しさん2006/06/16(金) 23:04:58
不適切なことをする自由は誰にもあるわな。
0090デフォルトの名無しさん2006/06/16(金) 23:06:55
MACアドレス査証によるリスクと、MACアドレスを使わない場合の開発コストを天秤にかけて
妥当なほうを取ればええ。
0091デフォルトの名無しさん2006/06/16(金) 23:15:26
どんな天秤だよ!
まずパスワード認証その他の認証方法と天秤だろw
0092デフォルトの名無しさん2006/06/16(金) 23:26:51
MACアドレスを使いたいってことは、使用できる機器を制限したいってことじゃないか?
ID形式だとそれこそ詐称しまくられるリスクがある。
まぁ質問者じゃないから、なんともいえんが
0093デフォルトの名無しさん2006/06/16(金) 23:40:06
>>92
君のレベルは問題外
0094デフォルトの名無しさん2006/06/17(土) 00:07:08
>>93
批判するなら具体的にやりましょう。
0095デフォルトの名無しさん2006/06/17(土) 00:29:17
> MACアドレスを使いたいってことは、使用できる機器を制限したいってことじゃないか?
「認証したい」って言ってるんだから明らかに自明なことを、
なんでそんなにしたり顔で言えるのか理解に苦しむ。
0096デフォルトの名無しさん2006/06/17(土) 00:59:56
>>95
質問者は認証したいとはひとことも言ってないが。
0097デフォルトの名無しさん2006/06/17(土) 01:05:01
それに質問者がどのようなものにMACアドレスを使いたいのかわからないが、例えばWebアプリケーションや、
クライアントサーバ型アプリケーションなら当然パスワード認証等も考慮するだろうし、それをしないとも
書いていない。
0098デフォルトの名無しさん2006/06/17(土) 01:12:04
DRM関連じゃないの?<MACアドレス
コンテンツのmove不可とか。
0099デフォルトの名無しさん2006/06/17(土) 02:05:56
なんか必死な奴は、どこかから仕入れた知識で、MACアドレスの偽装方法を知っていることを
自慢したいのでしょう。
0100デフォルトの名無しさん2006/06/17(土) 02:59:26
まぁ認証といっても、使用者の認証、ライセンスの認証、使用機器の認証といろいろとあるからな。
0101デフォルトの名無しさん2006/06/17(土) 03:03:37
>>96
>>73
0102デフォルトの名無しさん2006/06/17(土) 03:07:06
認証みたいなことをしたいんだろ。
つか、お前何が言いたいの?
0103デフォルトの名無しさん2006/06/17(土) 03:09:56
>>101
つか、この程度のニュアンスも汲み取れないんじゃ、プログラマやめたほうがいいよ。
0104デフォルトの名無しさん2006/06/17(土) 03:16:06
変なことで盛り上がるなよw
0105デフォルトの名無しさん2006/06/17(土) 03:20:20
からまれたもんで。
0106デフォルトの名無しさん2006/06/17(土) 03:26:07
まぁ>>91を見る限り、相手がNIU固定のファームかもしれないなんて想像もできないんだろうけど。
0107デフォルトの名無しさん2006/06/17(土) 03:26:55
お前しつこいよw
0108デフォルトの名無しさん2006/06/17(土) 03:27:56
うるさい。俺は徹底的にやるよ。
ガキは叩きのめす主義なんで。
0109デフォルトの名無しさん2006/06/17(土) 03:29:38
頓珍漢なこと言って諌められたからって切れなくてもいいのに
0110デフォルトの名無しさん2006/06/17(土) 03:30:42
具体的に指摘しなされ
0111デフォルトの名無しさん2006/06/17(土) 03:31:42
ひょっとして>>90のことか?
これが頓珍漢なことに見えるんなら、マジ相手にならんわ。
0112デフォルトの名無しさん2006/06/17(土) 03:32:58
必死だな
0113デフォルトの名無しさん2006/06/17(土) 03:33:56
まぁお前が.>>91なんだろうけど、逃げたいなら何も書かずにほっとけよ。追いかけないから。
0114デフォルトの名無しさん2006/06/17(土) 03:38:20
>>112
お前が>>91なら>>106に対するコメント書いとけ。俺もう寝るから。書かなくてほっといてもいいぞ。
0115デフォルトの名無しさん2006/06/17(土) 03:40:01
起きて監視しているんだろw
0116デフォルトの名無しさん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

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

0117デフォルトの名無しさん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
0118デフォルトの名無しさん2006/06/17(土) 12:38:14
動くよ。

それに、それプログラミングじゃないだろ。
それから、その結果欲しければ、find AAA (ryだろ。
0119デフォルトの名無しさん2006/06/17(土) 12:50:31
シェルプログラミングスレどっかにあったな。UNIX板か?
実はSolarisのfindには-emptyオプションがないとか?
GNUとMac(BSD)にはあった。
0120デフォルトの名無しさん2006/06/17(土) 13:25:45
そのとーりSolarisには-emptyないよ

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

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

ヒントやキーワードだけでいいから教えて下さい
0122デフォルトの名無しさん2006/06/17(土) 14:05:27
>>121
ヒント: スレ違い
0123デフォルトの名無しさん2006/06/17(土) 16:49:41
>>116
空のディレクトリを抜き出したい理由は?
カレント配下の空のディレクトリを消したいだけなら
find . -depth -type d -exec rmdir {} \;
でできるけど。
#-depthを指定しないと、例えばDDDを消そうとして失敗してからEEEを消すことになる。
0124デフォルトの名無しさん2006/06/17(土) 17:02:27
AAA/BBB/CCC/DDD/EEE
がファイルなのかディレクトリなのか区別出来ないけど
0125デフォルトの名無しさん2006/06/22(木) 05:41:18
pthread使用していてgdbでデバッグしてるとepoll_waitが割り込みで何度も止まってるのよ
何のシグナル受け取ってるのか判別する方法ないかな
0126ゆーき2006/06/26(月) 00:07:54
ハイパー初心者ですが、octaveでsubplotをファイルに保存したいのですが、print -depsや
gset term postscript enhancedではできません。。。
だれかやりかたを教えて下さい。お願いします。
0127デフォルトの名無しさん2006/06/26(月) 00:18:58
>>125
OSを書け
0128デフォルトの名無しさん2006/06/26(月) 03:54:31
epoll_waitと書いている以上、Linuxだろ?
straceで追っかけてみるのはどーだろ?
0129デフォルトの名無しさん2006/06/26(月) 12:59:50
LinuxならSIGALRMじゃないの?

$(GLIBC)/nptl/*eintr*辺り読んでみて。
0130デフォルトの名無しさん2006/06/30(金) 03:23:01
>>121
ありとあらゆる環境上でなんて事実上不可能

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

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

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

など曖昧かと..
PostgreSQLなどのDBMSのソースとかがヒントになるかもしれない。
0131デフォルトの名無しさん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さんのディレクトリのオーナーになることはできませんか?
0132デフォルトの名無しさん2006/06/30(金) 14:25:35
chown root a.out
したか?
setuidされたプログラムは、そのプログラムファイルの所有者
の権限で動くのであって、自動的にroot権限で動く訳ではない。
0133デフォルトの名無しさん2006/06/30(金) 14:28:01
>chown root a.out
>したか?
ああ、その通りでした。忘れてました。
rootにchownしらた無事動きました。お騒がせしました。
0134デフォルトの名無しさん2006/06/30(金) 15:09:49
>>131
chown()の返り値を調べてエラー処理をするように。

int result = chown(〜);
if (result != 0) {
perror("/home/tanin/work");
exit(1);
}
0135デフォルトの名無しさん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 です。
01361352006/07/01(土) 23:43:08
あ、ちなみに wait4() を呼ぶときは WNOHANG かつ pid に -1 をセットして
ループで全てのプロセスを処理するようにしています。
0137デフォルトの名無しさん2006/07/01(土) 23:51:23
ハンドラ内で、signalがブロックされているうちに、
たくさん子プロセスが終了するけど、
ハンドラ終了のタイミングなどでループで全部処理しきれてない、
くらいしか想像付かない。
0138デフォルトの名無しさん2006/07/02(日) 00:05:12
>>135
waitは基本的にSIGCHLDのシグナルハンドラで呼ぶ。
同タイミングで大量の子プロセスが死ぬ場合は問題になるのかも
しれないけど、俺はそんな経験nothing。

親プロセスが、子プロセスの死亡時に、プロセスを成就させる以外の
仕事をしないなら、forkを二回行って子プロセスを親プロセスのグループから
切り離すという手もある。
詳しくはUNIX Programming FAQ参照。
01391352006/07/02(日) 02:38:11
どうも、早速のフォローありがとうございます。
>>137 >>138
そうですよね、基本はSIGCHLDのハンドラ内で wait() すればいいんですよね。

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

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

もしかして OS のバグ?
とりあえず動くものを作らないといけないので、さしあたり新たに fork() する前に
wait4() するようにしてゾンビの増殖は防げるようになりましたが... 気持ち悪い。
0140デフォルトの名無しさん2006/07/02(日) 03:21:20
wait4が-1を返した時のerrnoもちゃんとチェックしてる?
死んだ子がいないと判断できるのはerrno==ECHILDの時だけだよ。
wait4が-1返しても、errnoがEINTRの時なんかは、まだ子が取り残されてる場合がある。
0141デフォルトの名無しさん2006/07/02(日) 09:07:35
> もしかして OS のバグ?

こう思うときの99%は自分の理解不足が本当の原因。
0142プログラミング2006/07/03(月) 15:16:08
誰かほんとにすいませんっ↓この問題分かる人教えてください!!
お願いします!(>△<)
言語はdelphiです。

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

?2分法を使って188の5乗根を求めよ。途中経過を分かりやすく画面に表せ。
0143デフォルトの名無しさん2006/07/03(月) 15:22:12
問題がunix固有ではまるでない感じなので、Delphiのスレに行ったほうが
回答が得られやすいと思われるが、宿題は自分でやろうな。
0144デフォルトの名無しさん2006/07/03(月) 15:26:16
>>143
作くれなんて問題の宿題があるか?

と思ったがあるみたいだ。
0145プログラミング2006/07/03(月) 15:30:08
はいっありがとうございます!
delphiの掲示板いってみます(>▽<)☆
0146デフォルトの名無しさん2006/07/05(水) 15:47:29
この質問はここでいいのかな?
pathName = "/home/guest/"
fileName = "*.txt"

として、文字列

"/home/guest/*.txt"

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

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

}
こんな関数を作りたいのです。
良い方法はありますか??
0147デフォルトの名無しさん2006/07/05(水) 15:53:55
つ fnmatch(3)
つ glob(3)
0148デフォルトの名無しさん2006/07/05(水) 15:55:44
Cでやりたいの?
bashのsourceにlibglobってのがあるからそれ使って。

shell scriptでやるのが簡単だとおもうけれど。
"/bin/ls home/guest/*.txt"をpopen(2)するとか。
0149デフォルトの名無しさん2006/07/05(水) 16:06:29
みなさんありがとうございます。
そうですCでやりたいです。
普段windowsのVCで書いているのですが、10年ぶりくらいに
Linuxのgccで少し作業することになりまして、難儀してます。
0150デフォルトの名無しさん2006/07/05(水) 16:23:04
>>149
system("/bin/rm /home/guest/*.txt");
Unix系だからこそ、適材適所で書くべきだと思う。
0151デフォルトの名無しさん2006/07/06(木) 03:56:05
>>150

>>148 の言ってる popen の方が良いと思う
0152デフォルトの名無しさん2006/07/06(木) 07:33:33
削除するのにls?
0153デフォルトの名無しさん2006/07/06(木) 18:03:37
そのツッコミは想定内です
0154デフォルトの名無しさん2006/07/06(木) 19:27:54
>>147を無かったことにしたい流れに萎え
0155デフォルトの名無しさん2006/07/06(木) 22:42:47
>147か>150の二択でいいんでね?
0156デフォルトの名無しさん2006/07/06(木) 23:53:55
シェルを通すやり方の場合、もしユーザーの任意のパターンを受け付けるのであれば、
"; /bin/rm -rf /"
なんていうパターンが与えられても大丈夫でないといけない。
0157デフォルトの名無しさん2006/07/07(金) 01:12:25
頭のおかしい人登場
0158デフォルトの名無しさん2006/07/07(金) 02:41:02

漏れなら

" & /bin/rm -rf / "

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

zip -rm /tmp/.zip *
0160デフォルトの名無しさん2006/07/07(金) 03:23:46
俺は

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

たとえば

/usr/bin/aumix -v $VOL

この$VOLを可変したいのですが
Cってのがこのaumixコマンドを扱えるのかな?と・・・・・・・・・・・・・ヒントキボン
0162デフォルトの名無しさん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 適当;
}
0163デフォルトの名無しさん2006/07/07(金) 14:49:20
>>162 おお!(゚∀゚)神のヨカーン 

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

ありが�d!!
0164デフォルトの名無しさん2006/07/07(金) 14:55:44
int callsumix(char *vol)
{
return execl("/usr/bin/aumix", "/usr/bin/aumix", "-v", vol);
}
0165デフォルトの名無しさん2006/07/07(金) 14:58:22
null terminate するの忘れた。

return execl("/usr/bin/aumix", "/usr/bin/aumix", "-v", vol, NULL);
0166デフォルトの名無しさん2006/07/07(金) 15:03:48

int callsumix(char *vol)

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

ちょっとGoogleも見てきます

つーか、Bashで書いたものをコンパイルできればいいっすねw
0168デフォルトの名無しさん2006/07/07(金) 15:21:08
baka
0169デフォルトの名無しさん2006/07/07(金) 15:24:02
その昔、商用でシェルスクリプトのコンパイラってあったよね?
0170デフォルトの名無しさん2006/07/07(金) 15:44:03
>>168  つД`)・゚・。・゚゚・*:.。..。.:*・゚
>>169  ヽ(`Д´)/それだ!( ゚д゚)ホスィ…でもCshだけだったり

main関数ってなんだよぉ〜
Cなんてわかんねぇよぉ〜
逝ってきますorz
でも、CでUNIXコマンドがいじれることがわかったのはテラウレシス!
0171デフォルトの名無しさん2006/07/07(金) 20:29:39
>>167

exec*系は成功したら帰ってこないからな。
ついでにforkもペアで調べるんだ。
0172デフォルトの名無しさん2006/07/07(金) 21:53:35
nix はその最初の敷居が高すぎる

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

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

もうfork はこれでよくね?うごかねえかな?
0173デフォルトの名無しさん2006/07/07(金) 22:44:15
お前それ以前にCわかってないやん
0174デフォルトの名無しさん2006/07/08(土) 19:12:31

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

とりあえず

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

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

0175デフォルトの名無しさん2006/07/08(土) 19:17:04
(;´Д`)
0176デフォルトの名無しさん2006/07/08(土) 22:48:40
fork()が-1返した時は?
0177デフォルトの名無しさん2006/07/08(土) 22:51:50
wait() へ行くから大丈夫なん?
0178デフォルトの名無しさん2006/07/08(土) 23:37:01
execlが返ってきたら危険だね
0179デフォルトの名無しさん2006/07/09(日) 00:41:54
orz わかんねぇよ フォークだかボークだかエクセルだかワードだか・・・・
0180デフォルトの名無しさん2006/07/09(日) 00:46:28
素直にif - else ifで書くがよろし。
0181デフォルトの名無しさん2006/07/09(日) 01:14:59
>>179
ああぁぁぁぁ!!!! 先を越されたorz それは俺が言おうと(ry
0182デフォルトの名無しさん2006/07/09(日) 02:03:38
マニュアル嫁よ
0183デフォルトの名無しさん2006/07/09(日) 13:07:51
すんません、「おはよう世界」から出直します
0184デフォルトの名無しさん2006/07/09(日) 16:37:56
printf("Good morning world.\n");
0185デフォルトの名無しさん2006/07/09(日) 17:39:22
こんにちわ世界でしたね ̄|_|・・・..●ゲヴォルガァ
0186デフォルトの名無しさん2006/07/09(日) 19:34:36
printf("Welcome to HELL WORLD.\n");
0187デフォルトの名無しさん2006/07/09(日) 20:04:09
char *p = NULL;

while(1){
 printf("%02x\n", *p++);
}
0188デフォルトの名無しさん2006/07/10(月) 20:14:34
>>169
漏れシェルのコンパイラって使ったことあるよ。
「これでシェルスクリプトが100倍速く走るぜ!」
と思って感動にうち震えながら試したが、軽くも速くもならなかった。
漏れがボンクラプログラマ−たから? ええ。それも、そうなんですけどね
0189デフォルトの名無しさん2006/07/11(火) 00:42:55
システムコールってわかんねぇよww
もういいや、Shellscriptで書きつづけるよ
どうせ100行以上のプログラムなんて書けないしヲ
チマチマプログラマーでいいっすヲ
0190デフォルトの名無しさん2006/07/11(火) 00:48:35
man 2に入ってるのがシステムコール
man 3に入ってるのがライブラリ
0191デフォルトの名無しさん2006/07/11(火) 19:35:29
man coに入ってるのがチソポ
0192デフォルトの名無しさん2006/07/11(火) 19:49:08
ハァッ、ハァッ、ハァッ、ハァッ!
0193デフォルトの名無しさん2006/07/11(火) 20:52:46
>>189
ヒント:http://www.linux.or.jp/JM/INDEX/ldp.html
0194デフォルトの名無しさん2006/07/12(水) 11:03:43
そもそも、ぽまえらの使用言語は何でつか?
0195デフォルトの名無しさん2006/07/12(水) 11:10:34
C, C++, perl, sh, Java, BeanShellといったところ。
0196デフォルトの名無しさん2006/07/12(水) 11:26:38
C, C++, java, python, Haskell, scheme, bash, zsh, emacs lisp
0197デフォルトの名無しさん2006/07/12(水) 11:32:08
Brankfuck, INTERCAL, HQ9+
0198デフォルトの名無しさん2006/07/12(水) 11:46:12
C
0199デフォルトの名無しさん2006/07/12(水) 14:27:58
書く頻度でRuby, Java, sh, Cってとこか。
0200デフォルトの名無しさん2006/07/12(水) 20:52:42
C++, Perl, C, sh, Ruby, Fortran
0201デフォルトの名無しさん2006/07/12(水) 20:54:59
C, Java, C#, Common Lisp
0202デフォルトの名無しさん2006/07/12(水) 21:09:10
C# って、もしかして MONO 使ってるの?
0203デフォルトの名無しさん2006/07/12(水) 21:23:33
日常的なスクリプティングは Scheme or CL でこなしたいんだけど、
いかんせん力量不足だなぁ...
0204デフォルトの名無しさん2006/07/12(水) 21:43:13
なんでそんなにつかえるんだよー
英語すら使えない漏れはモウダメポ..._〆(゚▽゚*)ですね
0205デフォルトの名無しさん2006/07/12(水) 22:35:30
>>202
0206デフォルトの名無しさん2006/07/13(木) 01:09:43
>>204
yacc/lex。最狂のスクリプト言語「日本語」を開発すべく技術者募集(嘘)
0207デフォルトの名無しさん2006/07/13(木) 11:07:35
2ch語でプログラムできればどんなにいいかw

米 プログラムテスト
米 コメント
表示 "こんちわ世界"
ゴルァ 米 割り込み
糸冬 了
0208デフォルトの名無しさん2006/07/13(木) 11:36:27
>>207
kwsk
0209デフォルトの名無しさん2006/07/13(木) 15:25:31
OpenMotifとMotifのちがいってなんですか?
MotifのコードはOpenMotifでもコンパイルできますか?
0210デフォルトの名無しさん2006/07/13(木) 21:41:06
ライセンス
0211デフォルトの名無しさん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]の
標準入力をパイプに置き換えるという感じです。
0212デフォルトの名無しさん2006/07/19(水) 00:45:43
オナニーはひとに頼らずに自分一人でやれよ
0213デフォルトの名無しさん2006/07/19(水) 00:53:57
再帰的に処理すればいいじゃん。
0214デフォルトの名無しさん2006/07/19(水) 01:12:11
>>211
Q&Aかよ!
0215デフォルトの名無しさん2006/07/19(水) 02:00:42
>>211
「俺コード」で説明するのはやめてくれ。

まずパイプを二個作り、
・lsの標準出力をpipe1のfd[1]
・grepの標準入力をpipe1のfd[0]
・grepの標準出力をpipe2のfd[1]
・catの標準出力をpipe2のfd[0]
に繋ぎ変えればOK。
02162152006/07/19(水) 02:03:19
あっと、それからその手のコードを書くときは
・何かを標準出力に出力するだけのプログラム
・標準入力をそのまま標準出力にするプログラム
を作って、それを使ったほうがいろいろ便利。デバッグプリントとか入れやすいし。
0217デフォルトの名無しさん2006/07/19(水) 03:20:38
shellでも作ろうとしてるんだろうか?
0218デフォルトの名無しさん2006/07/19(水) 03:33:44
宿題らしい。
0219デフォルトの名無しさん2006/07/19(水) 04:02:29
最近の大学生は「特殊化-一般化」の概念も知らないんだろうか。
0220デフォルトの名無しさん2006/07/19(水) 04:29:47
一人の特殊なサンプルで最近の大学生は〜と一般化してしまうのもどうかと思う
0221デフォルトの名無しさん2006/07/19(水) 07:34:40
一人のサンプルが、特殊なのか一般なのかを問うている疑問なのでは?
0222デフォルトの名無しさん2006/07/19(水) 10:06:18
揚げ足とりしてる暇あったら回答してあげようよ
0223デフォルトの名無しさん2006/07/19(水) 12:10:24
やだ。なんかこいつむかつくもん。
0224デフォルトの名無しさん2006/07/19(水) 13:03:19
実際 csh とか tcsh とかは

hoge | fuga | hage

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


あと

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

みたいになってるとややこしいね
0225デフォルトの名無しさん2006/07/19(水) 13:10:01
>>224
ソース見れば?
0226デフォルトの名無しさん2006/07/19(水) 13:35:36
本物がどうやってるかはおいといて・・・

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

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

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

みたいな感じやろ。
0227デフォルトの名無しさん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;
}
0228デフォルトの名無しさん2006/07/19(水) 16:43:51
>>227
>  今の方針だと、n個のプロセスを起動する場合は、n-1個のpipeが必要で、
>  それぞれfork後、関係ないpipeを全部closeしなければなりません。

それはプログラムの書き方が悪いから。
pipeとforkをサンドイッチにして。
0229デフォルトの名無しさん2006/07/19(水) 17:20:36
>>228
コメントありがとうございました。
アドバイスを受けて、書き直してみました(ループ化もした)。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2400.txt
何かコメントがありましたら、またお願いします。
0230デフォルトの名無しさん2006/07/19(水) 19:13:39
apacheには、AcceptMutexというディレクティブがあるみたいだが
0231デフォルトの名無しさん2006/07/19(水) 19:14:00
ごめん誤爆
0232デフォルトの名無しさん2006/07/19(水) 21:01:15
>>229
ええんとちゃいますの。(実行してみてないけどw)
lだとコマンドごとに引数可変長にできないからvにしてみて。
02332112006/07/19(水) 21:47:07
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2406.txt
一応それらしい形にはできたのですが、パイプで命令を繋いでいっても
なにも出力されません。パイプの部分をコメントアウトするとそれぞれの
命令を実行していくので、繋ぎ方がおかしいと思うのですが、どこが
間違っているか分かりますでしょうか?

↑のは元のが長いので命令を固定して繋ぐところだけやってます。
0234デフォルトの名無しさん2006/07/19(水) 21:58:48
$ grep grep a
grep: a: そのようなファイルやディレクトリはありません
0235デフォルトの名無しさん2006/07/19(水) 22:38:02
質問させて下さい。

引数に ~/hoge/ を指定されたら~/hoge/の中身を配列にいれたのですが
それはどうするればいいんでしょうか?
0236デフォルトの名無しさん2006/07/19(水) 22:40:34
>>235
入れた後どうするかは君次第。
0237デフォルトの名無しさん2006/07/19(水) 22:56:55
UNIXプログラムができて、納品も済みました。この後どうすればいいでしょう?
0238デフォルトの名無しさん2006/07/19(水) 22:59:35
取り敢えず給料を見越してサラ金で金借りて風俗
0239デフォルトの名無しさん2006/07/20(木) 00:06:04
小便を済ませて神様にお祈りして部屋のスミでガタガタふるえて命ごいをする心の準備をする。
0240デフォルトの名無しさん2006/07/20(木) 00:42:51
>>233
>>229のコード参考にしたら?
0241デフォルトの名無しさん2006/07/20(木) 11:55:58
コードが書けないので、書いてくださいとお願いしても誰も書いてくれない。
しかたないので自分で書いてみて、動かないのでどこがわるいのか聞いても誰も教えてくれない。

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

と>>233は思ってるに違いない。
でもね、それは違うよ。質問のやり方が悪いんだよ。
02422342006/07/21(金) 01:14:29
答えてるやん!
0243デフォルトの名無しさん2006/07/21(金) 23:04:18
>233
forkしてからpipeしない、順序逆。
0244デフォルトの名無しさん2006/07/22(土) 17:46:59
Linuxスレッドプログラミングの良い書籍ないか?
0245デフォルトの名無しさん2006/07/22(土) 19:00:30
>>244
俺はこれを読んで学んだ。
英語だけど意外とわかりやすかった。

http://www.advancedlinuxprogramming.com/
http://www.advancedlinuxprogramming.com/alp-folder/alp-ch04-threads.pdf
0246デフォルトの名無しさん2006/07/22(土) 20:08:23
>245
thx!
やっぱpthreadなんだ
オライリーで一冊日本語の本あったけど、どうしようかな。
0247デフォルトの名無しさん2006/07/22(土) 23:15:28
UNIX板のpthread地獄スレに推薦図書あるよ。
この板のマルチスレッドプログラミングスレにも。
0248デフォルトの名無しさん2006/07/22(土) 23:25:08
>>247
イッテミルお
0249デフォルトの名無しさん2006/07/23(日) 02:35:56
基本的な質問かもしれないですけど
プログラム上からカレントディレクトリを変更する方法ってありますか?
あるなら教えてください・・・・
0250デフォルトの名無しさん2006/07/23(日) 03:33:39
chdir(2)

いっとくけど、cdコマンドは原理的に単独のプログラムとしては作れないからね。
0251デフォルトの名無しさん2006/08/17(木) 19:43:41
Red Hat Enterprise Linux 3 はBSD系ですか?SVR4系ですか?
0252デフォルトの名無しさん2006/08/17(木) 19:45:53
>>250
何を言ってるのだ、お前は。
0253デフォルトの名無しさん2006/08/17(木) 20:00:59
>>251
SVR4

>>252
お前こそ何を言ってるんだ。
0254デフォルトの名無しさん2006/08/17(木) 20:50:20
>>253
どうやって識別できるの?
0255デフォルトの名無しさん2006/08/17(木) 21:39:13
>>254
LinuxはSVR4、*BSDはBSD
0256デフォルトの名無しさん2006/08/17(木) 21:46:12
LinuxはSytemV系かBSD系かといえば、どちらかというとSysemV系という感じ。
詳しくはttp://ja.wikipedia.org/wiki/UNIX
0257デフォルトの名無しさん2006/08/17(木) 21:46:56
>>255
utmpファイルの場所がBSD系と同じなんだが
0258デフォルトの名無しさん2006/08/17(木) 21:48:16
>>257
>>256
02592562006/08/17(木) 22:05:56
>>255
ようわかったわ
02602562006/08/17(木) 22:22:10
>>259
誰ディスカ?
0261デフォルトの名無しさん2006/08/18(金) 00:48:44
>>256
そこの UNIX 系統図は酷いな。
ここ(http://www.levenez.com/unix/)までしろとは言わんけどさ、
もうちょっと、ねぇ。
0262デフォルトの名無しさん2006/08/18(金) 00:55:44
>>261
耐えられないほどひどいのなら、書き換えていいんですよ。
0263デフォルトの名無しさん2006/08/18(金) 01:12:33
>>262
貧乏人を見るのが小金持ちの楽しみなのさ。
0264デフォルトの名無しさん2006/08/18(金) 01:29:44
>>261の関係図はGraphvizを使ってるのかな
0265デフォルトの名無しさん2006/08/18(金) 14:25:44
>263
悪趣味……
0266デフォルトの名無しさん2006/08/18(金) 23:59:52
宗教の勧誘は最高に素敵な趣味だよな。
0267デフォルトの名無しさん2006/08/20(日) 21:26:23
詳解UNIXプログラミングで勉強してます
なかなか難しいっす
0268デフォルトの名無しさん2006/08/21(月) 05:06:48
なんかUNIXのdaemonてマルチプロセスが多いみたいだけどなんででしょう?
全部マルチスレッドでやったらいいと思うんですけど
0269デフォルトの名無しさん2006/08/21(月) 09:51:42
スレッドが簡単に使えるようになる前からあるコードが多いから。
0270デフォルトの名無しさん2006/08/21(月) 12:35:49
・ひとりがこけたらみなこけた、にならないように
・再起動しやすいように
0271デフォルトの名無しさん2006/08/21(月) 21:48:34
>>270
スレッド間グローバル変数みたいなアホなテクが使えないので結果的にコードがすっきりする。
0272デフォルトの名無しさん2006/08/21(月) 23:35:06
そんなの全部後付けの理由だろ。

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

で、それまでの資産(書籍やサンプル等も含めて)が多数あり
マルチプロセス向きの機能や性能が常に強化の目標になっていたからさ。
0273デフォルトの名無しさん2006/08/21(月) 23:39:06
>>271
?
0274デフォルトの名無しさん2006/08/21(月) 23:40:47
>>272
?
0275デフォルトの名無しさん2006/08/21(月) 23:49:41
>>273
?
0276デフォルトの名無しさん2006/08/21(月) 23:53:49
>>274
?
0277デフォルトの名無しさん2006/08/21(月) 23:59:54
>>275
?
0278デフォルトの名無しさん2006/08/22(火) 00:16:18
まともでポータブルなスレッドの実装なんて、今でもあるのかどうかw
0279デフォルトの名無しさん2006/08/22(火) 00:19:06
商用Unixであれば、ポータブルなんて考えなくていいから
0280デフォルトの名無しさん2006/08/22(火) 00:44:17
そういうのでスレッドが利きそうなのは、スレッド化されてるんじゃないの?
nfsがらみとかさ。
0281デフォルトの名無しさん2006/08/22(火) 20:21:13
スレッドってエンドユーザが扱いにくいだろ
プロセスなら扱いやすい。

エンドユーザのことを考えろよ
0282デフォルトの名無しさん2006/08/22(火) 21:10:46
UNIXのエンドユーザーなんて大規模サーバの管理者だったりするわけで
多少の扱いやすさより効率うpの方がうれしいと思うけど
0283デフォルトの名無しさん2006/08/22(火) 22:18:22
>>281
子プロセス一個殺せたところで嬉しくも何ともない。
0284デフォルトの名無しさん2006/08/22(火) 22:19:48
>>283
シグナルを気軽に送れるところに意味がある。
0285デフォルトの名無しさん2006/08/22(火) 22:24:33
>>268
マルチスレッドでやったらいいと思うのは、具体的にはどのdaemonのこと?
0286デフォルトの名無しさん2006/08/22(火) 22:42:04
>>285
init
0287デフォルトの名無しさん2006/08/22(火) 22:57:02
犬板にお引き取りください
0288デフォルトの名無しさん2006/08/22(火) 23:18:27
>>284
つprocess group
つPOSIX 1003.1b
0289デフォルトの名無しさん2006/08/23(水) 00:46:29
>>288
何が言いたいの?
0290デフォルトの名無しさん2006/08/23(水) 01:07:58
BIND はマルチスレッドじゃなかったっけ?

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

古い環境を無視出来るなら、もっとマルチスレッドにして良いと思うよ
0291デフォルトの名無しさん2006/08/23(水) 01:16:33
configureまたはコンパイルオプションで、マルチプロセスかマルチスレッドを
選べる奴も増えてるよね。
0292デフォルトの名無しさん2006/08/23(水) 08:06:32
ほんとうに並列性が必要ならマルチプロセスだよね。マルチスレッドはお手軽だけど制限が多い
0293デフォルトの名無しさん2006/08/25(金) 01:19:09
MPIとか
0294デフォルトの名無しさん2006/09/11(月) 08:18:14
スーパー破瓜ーになりたいんですがどうすればいいですか?!!!!11!!
0295デフォルトの名無しさん2006/09/11(月) 23:40:06
>>294
大根でも突っ込んでしまえ。
0296デフォルトの名無しさん2006/09/12(火) 14:24:14
共有メモリをマップ中に、万一、
プロセスが 9 番受けてデタッチできずに死んでしまっても、
また起動すれば共有メモリ自体はまた正しくマップできますか?
共有メモリ自体が残っていることは問題ないとします。
0297デフォルトの名無しさん2006/09/12(火) 14:27:29
mmapだよね?
出来ますよ。共有ファイルの権限が変わってない限り。

System V IPCの共有メモリも同様。
02982962006/09/12(火) 14:32:02
>>297
ありがとうございましたー!!
0299デフォルトの名無しさん2006/09/15(金) 19:08:21
おねがいします。

自分のファイル名(x.exe)を読み込んで
xの部分がAすなわちA.exeだったらaを実行して
xの部分がBすなわちB.exeだったらbを実行する
っていうようなCのプログラムを教えてください。
0300デフォルトの名無しさん2006/09/15(金) 19:54:46
宿題は宿題スレで
0301デフォルトの名無しさん2006/09/15(金) 20:32:44
UNIXなのに、A.exeなんて名前をつける香具師は死んでしまえ
0302デフォルトの名無しさん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のプログラムを教えてください。
0303デフォルトの名無しさん2006/09/15(金) 21:37:30
busyboxのソースが参考になるかと思うんだけど
0304デフォルトの名無しさん2006/09/15(金) 21:58:35
ヒント argv[0]

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

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

スレッド単位でkillできる方法とかあれば
topをカスタマイズするとか
チャレンジしてみたいけどねーけどねー・・
0306デフォルトの名無しさん2006/09/15(金) 22:53:13
>スレッド単位でkillできる方法とかあれば

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

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


もち〜ふの処女用教科書とか、ありましたら教えてくだしあ
とりあえず今は、ここ↓で勉強中でし
http://home.soka.ac.jp/~unemi/Motif/example.html
0308デフォルトの名無しさん2006/09/15(金) 23:03:59
よりによって今からもちーふかよ。
0309デフォルトの名無しさん2006/09/15(金) 23:32:02
>>307
茨の道にようこそ。今時のLinuxに載っているようなMotifはVer2になっているから
ComboBoxやTabPageが使えたりして便利な反面、その辺りを説明している資料は殆どない罠。
0310デフォルトの名無しさん2006/09/15(金) 23:35:55
>>309
これからも訓練頑張って下さい。
0311デフォルトの名無しさん2006/09/16(土) 11:25:27
>>309
私ゃ素人でアレなんでつが、あの、開発環境っぽい
ぐれーど てえのは、皆さん普通に使いますか?
0312デフォルトの名無しさん2006/09/16(土) 19:40:20
おそらくここにはXで何か作ってる人間はいないと思われ
0313デフォルトの名無しさん2006/09/16(土) 22:07:52
>>312
かつて作ったが、今は(そのプロジェクトは終わっているので)作っていない。

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

>>310
何の訓練?
0314デフォルトの名無しさん2006/09/17(日) 00:23:18
ぐれーどというのがgladeのことなら、
それはGtk+というツールキットを使ったアプリのUI(ウィンドウ内の部品配置)
定義を対話的に作って、それをXMLで出力するもの。Motifには無縁の存在。
0315デフォルトの名無しさん2006/09/17(日) 00:30:41
>>314
そのXMLをパースしてmotifのウィジットを配置する関数を生成するジェネレータを作ればいい。

あなたは頭が固すぎる。
0316デフォルトの名無しさん2006/09/17(日) 02:11:51
>>315
仕事で似たようなことやってるが、不毛だぞ。
0317デフォルトの名無しさん2006/09/20(水) 21:24:01
シェルのプログラムのBASHを使って、

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

お願いします。

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

できれば、説明もお願いします。
0318デフォルトの名無しさん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
0319デフォルトの名無しさん2006/09/20(水) 21:56:35
どーせ質問者Linux使ってるだろうからあるだろうけど、
seqって可搬性あるんだっけ?

yes '' | cat -n | head -9 とか書けばいい?
0320デフォルトの名無しさん2006/09/20(水) 22:13:45
そっか、可搬性か。bash限定だから
s/`seq 9`/{1..9}/g
かな?
0321デフォルトの名無しさん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
0322デフォルトの名無しさん2006/09/21(木) 21:07:18
皆さん考えてくださってありがとうございます。

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

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

記述は、

#!/bin/bash

while [ ]
do
done

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

whileは自動的に表示結果に改行が入ってしまいますよね?
その改行をなくすにはどうしたらいいんでしょうか?
0323デフォルトの名無しさん2006/09/21(木) 21:38:47
宿題ですか。
0324デフォルトの名無しさん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を使う
0325デフォルトの名無しさん2006/09/21(木) 22:07:03
正直、宿題です orz
0326デフォルトの名無しさん2006/09/21(木) 22:33:04
echo -nを使っている状態で、改行させるにはどうしたらいいですか?
0327デフォルトの名無しさん2006/09/21(木) 23:03:53
echo -n "hoge" "
" "hage"
0328デフォルトの名無しさん2006/09/23(土) 10:16:53
>>326
-nを付けない。
0329デフォルトの名無しさん2006/09/23(土) 10:50:33
\n
0330デフォルトの名無しさん2006/09/26(火) 13:16:41
ありがとうございました。
無事、宿題を終えました。

色々と教えてくださった方々感謝します。
0331デフォルトの名無しさん2006/10/02(月) 23:08:27
だれか教えて。
Makefileで環境変数(PATH)を変更したいのです。
現在設定されているPATHの先頭に/aaaを追加するには
どう記述すればよいですか
0332デフォルトの名無しさん2006/10/02(月) 23:52:36
>>331
PATH=$(PATH):/aaa
0333デフォルトの名無しさん2006/10/02(月) 23:55:44
PATH=/aaa:$PATH
03343312006/10/03(火) 00:18:02
ありがとう^^
試してみます。
0335デフォルトの名無しさん2006/10/03(火) 09:41:22
>>333
括弧つけろよ。
0336デフォルトの名無しさん2006/10/04(水) 01:51:39
>>321って何?
0337デフォルトの名無しさん2006/10/04(水) 01:59:02
>>336
動かしてないけど、連続した数の列を吐くスクリプトだな。

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

スクリプトのはじめの長いif文は引数の数によって、開始値・終了値・刻みを
セットしている。(case $# in...のほうが見やすいかも)
0338デフォルトの名無しさん2006/10/04(水) 16:02:10
esac だけはいまだに慣れない
0339デフォルトの名無しさん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
0340デフォルトの名無しさん2006/10/05(木) 10:21:44
マイナスになることはないので、0)と*)でいいのではないか?
0341デフォルトの名無しさん2006/10/08(日) 01:31:24
すみません、突然なんですけど
昨日プログラミングの講義で課題を出されて
eのx乗を求めるプログラムを作れと言われて
困ってます。昨日からずっと考えてるんですが
全くわかりません。
どなたか教えてもらえませんか?
0342デフォルトの名無しさん2006/10/08(日) 01:48:32
pow関数使ってもいいのか?
0343デフォルトの名無しさん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
0344デフォルトの名無しさん2006/10/08(日) 02:08:30
>>341
UNIX関係あるのか?
math.h使わないとして普通に考えても
0乗なら 1
1条なら e
x乗なら e^x
をしたらいいだけじゃないのか?
0345デフォルトの名無しさん2006/10/08(日) 02:16:04
xが整数とは限らないとちょっと面倒かも
つか宿題スレ池
0346デフォルトの名無しさん2006/10/08(日) 02:22:40
>>344
LINUXでやってます。
プログラミングの知識が乏しくて
プログラミングをかけないんです。
#include <math.h>
double log(double x);
って感じで書くんですけど・・・
その後がいまいちわからなくて・・・
03473442006/10/08(日) 02:27:22
>>346
入門書読め

乗算以前にC言語の構文が理解できてない
0348デフォルトの名無しさん2006/10/08(日) 02:41:50
eが自然対数の底ならlog(x)じゃなくexp(x)でそのものずばりだろ。
0349デフォルトの名無しさん2006/10/08(日) 03:13:13
exp(x)関数使わせるだけの演習なの?
0350デフォルトの名無しさん2006/10/08(日) 03:16:42
構文が理解できてないようだから、構文の勉強中じゃないの?
0351デフォルトの名無しさん2006/10/08(日) 05:41:59
金払ってまで勉強する領域で講義もろくに聞いてないとは。
0352デフォルトの名無しさん2006/10/08(日) 06:06:21
俺も思う。

金払って勉強してるのに、なぜ答えてくれるかどうかもわからない2chなんかで聞くのか。
金払ってるんだから講師にでも聞けよ
0353デフォルトの名無しさん2006/10/08(日) 10:22:06
勉強でも遊びでも、学生時代の経験ってのは大切だ。

市民権のある立場を買ってると考えればよい。
0354デフォルトの名無しさん2006/10/08(日) 13:26:51
留学生には市民権はないぞ。
市民権というのは、citizenshipの訳語で、
政治参加の権利を持っている人のことだぞ。
ギリシャのポリス市民から来ている。
0355デフォルトの名無しさん2006/10/08(日) 17:01:33
>>354
どうでもいいよ。定義なんて。
0356デフォルトの名無しさん2006/10/08(日) 17:07:05
>>355
どうでもいいよ。お前の意見なんて
0357デフォルトの名無しさん2006/10/08(日) 17:11:18
>>356
じゃあわざわざwikipedia書くような労力払わんで下さいよ。
0358デフォルトの名無しさん2006/10/08(日) 17:11:39
キミタチキモイヨ
0359デフォルトの名無しさん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>
<略>
0360デフォルトの名無しさん2006/10/09(月) 13:22:35
警告出したくないだけなら/dev/nullにパイプしろ
03613592006/10/09(月) 13:29:00
訂正です。
X Makeしたときに"closesocket"関数がpostgres.hとport.h内で再定義(redefined)された
○ Makeしたときに"closesocket"関数がap_config.hとport.h内で再定義(redefined)された

>>360
いやそれだと意味が...;
0362デフォルトの名無しさん2006/10/09(月) 13:40:11
>>359
自作モジュールでclosesocketを使わなければうまく行く。
(と言うか問題があればリンク時にこけるので取りあえず無視して良い)
0363デフォルトの名無しさん2006/10/09(月) 13:40:14
>>361
どう回避したいのかいってないから、警告を表示したくないと思われても仕方ない罠
0364デフォルトの名無しさん2006/10/09(月) 13:41:04
>>363
知らんのなら出てくんなや。と言う正論。
0365デフォルトの名無しさん2006/10/09(月) 13:51:04
知った上で書き込めるのはエスパーだけ!
0366デフォルトの名無しさん2006/10/09(月) 13:53:03
>>365
そこそこ回答が上がってるわけですがw
0367デフォルトの名無しさん2006/10/09(月) 13:56:45
じゃぁ、それで満足しておけよw
03683592006/10/09(月) 13:57:12
>>362
>>と言うか問題があればリンク時にこけるので取りあえず無視して良い)
なるほどー
今のところ、モジュール自体は動いているし
Makeがエラーを吐いてとまることもないので
実用上問題はないかも・・・と
とりあえず
postgresの関数の内部(PQfinishとか接続を切る系?)
などの中で該当関数が使われてないかをみて影響範囲を絞り込んでみます。
ありがとうございます。

>>363
そうですねー
重複しているclosesocket関数が、内部的に衝突・上書きされずに共存する回避の仕方
がないかということです。
0369デフォルトの名無しさん2006/10/09(月) 14:17:22
#ifndef __WIN32__
#define closesocket close
#endif

みたいな感じだと思うけどねー。
0370デフォルトの名無しさん2006/10/10(火) 14:59:06
任意の長さの文字列データをファイルから読み込み、辞書順に並び替えて最終結果のみを表示するプログラミングを作成せよ。ただし、データは改行で区切られており、文字列の最大長を64、データの最大個数を1000とする。
っていう問題が学校で出たんですけど、誰か教えてくれませんか。
0371デフォルトの名無しさん2006/10/10(火) 15:00:13
>>370
先生に聞け
0372デフォルトの名無しさん2006/10/10(火) 15:20:36
辞書順の定義が謎だね。出題者(センセ)は分かってるんだろうか。
アルファベットだけでも aAbBなのかAaBbなのかabABなのか
ABabなのかはロカールによって違う。

ロカール指定で済むなら、strcmpの代わりにstrcollを使えば
LC_COLLATEを見てくれるので話ははやいが。
0373デフォルトの名無しさん2006/10/10(火) 16:01:45
UNIX関係ない質問に答えている人って馬鹿なんでしょうか?
0374デフォルトの名無しさん2006/10/10(火) 16:04:31
関係ない上に重箱の隅w
0375デフォルトの名無しさん2006/10/10(火) 22:22:53
釣りだろ。373に答える奴は馬鹿かとも言ってるわけだから。
0376デフォルトの名無しさん2006/10/11(水) 02:34:40
>>370
system("sort");
0377デフォルトの名無しさん2006/10/11(水) 04:56:51
>>376おそれいった。
0378デフォルトの名無しさん2006/10/11(水) 23:15:38
>>文字列の最大長を64
ぬるい。
どうせなら文字列は可変長、リストに格納しつつソートとか
のほうが実践的
0379デフォルトの名無しさん2006/10/11(水) 23:51:43
>>378
実戦で底までせなあかん局面がない。
0380デフォルトの名無しさん2006/10/12(木) 01:00:06
メモリ資源の乏しい計算機でも実行できるというメリットがある
0381デフォルトの名無しさん2006/10/19(木) 11:41:06
コマンド実行で誤って*******(アスタリスク7文字)を入力したら
subjectの入力となりました。

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

ご教授よろしくお願いします。
0382デフォルトの名無しさん2006/10/19(木) 11:46:27
echo ******* とかやってみ。たぶん先頭にMailがいるんじゃないか?
0383デフォルトの名無しさん2006/10/19(木) 11:53:58
>>381
鼬害。シェルにおける'*'の意味を考えれば、何が起きたか判るはず。
0384デフォルトの名無しさん2006/10/19(木) 22:05:28
>>383
それを説明しろ
できねんだろ?
0385デフォルトの名無しさん2006/10/20(金) 00:17:47
ありゃりゃ?そこにからむのか?w
0386デフォルトの名無しさん2006/10/21(土) 22:48:10
すみません。どなたか教えてください。

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

を含むコードをコンパイルし、実行したところ、"こんにちは"の部分が文字化けして、読めません。
OSはCent OS4.3です。
03873862006/10/21(土) 22:49:39
どうしたら、日本語の出力ができるようになるんでしょうか?
0388デフォルトの名無しさん2006/10/21(土) 23:03:29
>387
ロケールを設定。
ttp://www.google.co.jp/search?q=C%2B%2B+locale
0389デフォルトの名無しさん2006/10/22(日) 11:34:31
常にウインドウを最前面に配置したいのですが、
それはどのようにして実現できるのでしょうか?
0390デフォルトの名無しさん2006/10/22(日) 12:06:50
>>389
ウィンドウ環境によって異なります。
0391デフォルトの名無しさん2006/10/22(日) 12:42:58
>>390
汎用的な方法は無いのでしょうか?
0392デフォルトの名無しさん2006/10/22(日) 13:00:05
>>391
window managerにそう指定する。
0393デフォルトの名無しさん2006/10/22(日) 13:19:10
>>392
どこが汎用的なんだ?

>>391
やったことないけど、Windowが隠されたら最前面にマップするようにしたら?
0394デフォルトの名無しさん2006/10/22(日) 13:54:08
> Windowが隠されたら最前面にマップ
2つのアプリがそれやり出したらとっても楽しいことになりそうだな
0395デフォルトの名無しさん2006/10/22(日) 13:54:25
そもそもXWindowかどうかさえ判らないのに汎用的な方法なぞあるわけがない。
0396デフォルトの名無しさん2006/10/22(日) 13:57:40
>>394
重なったWindowのプロパティ見れば?
0397デフォルトの名無しさん2006/10/22(日) 14:01:27
>>396
素朴な疑問だが、どんなウインドウシステムを仮定している?
0398デフォルトの名無しさん2006/10/22(日) 14:10:56
>>397
汎用的な方法なんだから何も仮定してるわけないだろ。
それでプロパティってのが何のことなのかはさっぱりわからんが
0399デフォルトの名無しさん2006/10/22(日) 14:16:43
XならWMに対してポリシーのヒントみたいのん設定するんじゃないっけ
あとはWM次第みたいな
0400デフォルトの名無しさん2006/10/22(日) 14:22:38
>>399
それ>>392じゃないの?
違いは「Xなら」と「あとはWM次第」って予防線?
0401デフォルトの名無しさん2006/10/22(日) 14:26:03
ああ、そうなんだけど、なんか妙な方向に流れてるから多少具体的に言ってみました
0402デフォルトの名無しさん2006/10/22(日) 17:50:02
環境がわからないのに汎用的な方法もクソも無いだろうに…
0403デフォルトの名無しさん2006/10/22(日) 20:27:21
>>402
環境を選んでる時点で汎用ではないだろ
0404デフォルトの名無しさん2006/10/23(月) 23:08:26
ウィンドウのない環境まで想定したら汎用的な方法などありえない、で終わってしまうな
0405デフォルトの名無しさん2006/10/26(木) 05:06:24
cursesならキャラクタ端末でもウィンドウが
0406デフォルトの名無しさん2006/10/26(木) 07:44:01
質問した奴はげんなりしてるだろうなw
0407デフォルトの名無しさん2006/10/26(木) 15:31:08
Xのプログラムで質問です。

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

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

デプス1のピクスマップをつくってXShapeCombineMask()を使
用したら透明なウィンドウはできたのですが、画面クリックする
と透過された他のウィンドウがイベント拾っちゃいました(TT
04083862006/10/29(日) 15:15:49
>>388
レスが遅くなりましたが、ありがとうございます。
なお、ロケール設定後も文字化けして表示してしまって
いました。その後、SSHクライアントが日本語に対応して
いなかったためだと分かり、やっと解決しました。
0409デフォルトの名無しさん2006/10/29(日) 18:07:23
>>407
xwininfoのソース嫁
0410デフォルトの名無しさん2006/11/01(水) 16:26:12
>>409
それは XGrabPointer使えってことだよね。>>407 が考えていることとは微妙に違う気がする。
0411デフォルトの名無しさん2006/11/01(水) 19:49:03
>>407
XShapeで作成したウィンドウは、下のレイヤのウィンドウを透過しているのではなくて、ビットマスクによって自身の
ウィンドウの形状を変更(クリッピング)している。ウィンドウが無いとみなされているので、下のレイヤのウィンドウに
イベントが通知される。

参考になりそうなのはkinput2等、IMのソース。
・class=InputOnly, override_redirect=True なウィンドウを作成すると、非表示のウィンドウでマウス入力が取れる。
・非表示のウィンドウはフォーカスを持たないため、キー入力を取るためには別途 XGrabKeyboard すれば桶。
0412デフォルトの名無しさん2006/11/02(木) 22:15:24
TCP サーバーソケットで、受信メッセージからDestination IP addressの取得するのは、どうすればよいでしょうか?
一応今までは、UDPだったので、RAWソケットを使ってIPパケットを見ていたのですが、
今度、TCPでもやることになってしまいました。
RAWソケットを使わず、取得する方法は無いでしょうか?

0413デフォルトの名無しさん2006/11/02(木) 22:26:55
>>412
Packet Socket
0414デフォルトの名無しさん2006/11/02(木) 22:30:26
acceptのときに得られるんでない?
0415デフォルトの名無しさん2006/11/02(木) 22:41:49
>>412
×受信メッセージから
○受信ソケットから

getpeeraddr(2)

0416デフォルトの名無しさん2006/11/02(木) 23:35:44
getsockname
0417デフォルトの名無しさん2006/11/04(土) 10:27:33
>>412
質問を明確にしたほうがいいんじゃない?
受信パケットのDestinationってことは、自ノードのアドレスってことだよね
複数アドレスがある場合に特定する方法があれば俺も知りたい(以前調べてわからんかった)
0418デフォルトの名無しさん2006/11/04(土) 11:08:42
>>417
ギャグですか?
0419412です2006/11/04(土) 14:18:42
すみません。レス遅れました。
getsocknameで、自分の情報(受信ソケットの場合Destination IPを取得)ということですね。
どうもありがとうございます。

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

>>413
パケットソケットだと、RAW ソケットになるとおもいますが、私の勘違い?
0420デフォルトの名無しさん2006/11/05(日) 12:20:08
ファイルやディレクトリが存在するかどうかを調べるにはどうしたらよいでしょうか?
0421デフォルトの名無しさん2006/11/05(日) 12:40:52
stat
0422デフォルトの名無しさん2006/11/05(日) 12:55:23
>>421
ありがとうございます。やってみます。
0423デフォルトの名無しさん2006/11/09(木) 14:50:43
close(2)が失敗した場合、ファイルデスクリプタはまだ有効なんでしょうかね?
つまりもう一度closeを呼ぶべきかということですが。
EBADF, EINTRの場合は自明として、それ以外の場合は?
0424デフォルトの名無しさん2006/11/09(木) 23:12:35
中のワークエリアを開放するのは一番最後だろうから、
生きてるんじゃないかい。
0425デフォルトの名無しさん2006/11/09(木) 23:20:26
stat(2)が正統だろうけど、ENOENTが返るならなんでもOKかも。access(2)とか。
0426デフォルトの名無しさん2006/11/10(金) 00:18:02
>>424,425
複数のプロセスがopenしてる可能性を考えたことはないのか?
システムリソースとプロセスリソースは別物だって考えたことはないのか?

Unix系前提で話をすれば...
o closeすればプロセスリソースは破棄.
o 該当資源を最後にcloseしたやつは待たされるかもしれんが
プロセスリソースは破棄されている(システムコールから戻ってくれば)
o 残ったI/O処理は破棄される(ドライバが正常/以上完了すれば)
o ドライバの作りによっては, プロセスはゾンビになってkillすらできない
o 最悪の場合システムダウン
0427デフォルトの名無しさん2006/11/10(金) 07:18:21
おちんぽ^^
0428デフォルトの名無しさん2006/11/10(金) 12:16:43
>>426
複数のプロセスがopenしていても、close したプロセスでは
ファイルディスクプリタは無効になるんじゃない?
だから>>425は別に問題ないように思うけど。
0429デフォルトの名無しさん2006/11/10(金) 12:21:40
お前ら流れよく読め。425は423じゃなく420への回答だろ。
0430デフォルトの名無しさん2006/11/10(金) 12:23:53
>>423
もう一度呼ぶべきかどうかは俺にはわからんが、気になるなら
成功かEBADFのどちらかになるまでリトライすりゃいいんじゃね?
0431デフォルトの名無しさん2006/11/10(金) 12:24:10
>>426が>>424,425にまとめて説教してるのが謎
0432デフォルトの名無しさん2006/11/15(水) 20:35:50
>>426
しらんぷりしてりゃいいんだよ
0433デフォルトの名無しさん2006/11/18(土) 18:51:54
close(2)が失敗するような状況で何ができるの?
0434デフォルトの名無しさん2006/11/18(土) 21:33:25
警告メッセージを吐いておくくらいかな
0435デフォルトの名無しさん2006/11/19(日) 00:32:14
ファイルデスクリプタは放置?
0436デフォルトの名無しさん2006/11/19(日) 02:17:14
ファイルデスクリプタが間違ってたらclose(2)は失敗するけど
間違ったファイルデスクリプタはどうしようもないやん
0437デフォルトの名無しさん2006/11/23(木) 09:53:13
デーモンとか常駐するプログラムの終了処理ってどうすればいいんでしょう?
シグナルを受け取ったら終了処理、っていう感じでいいんでしょうか
0438デフォルトの名無しさん2006/11/23(木) 10:26:44
SIGTERMのハンドラで正常終了処理。

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

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

kill(1)のディフォールトがSIGTERMだかね。
0439デフォルトの名無しさん2006/11/23(木) 10:32:11
ありがとうございます!
0440デフォルトの名無しさん2006/11/24(金) 08:29:20
シグナルは非同期なので、ハンドラでフラグを立てて
適切な時にフラグをチェックすると楽
0441デフォルトの名無しさん2006/11/24(金) 09:41:33
デバッグ時には、コントローリングターミナルを切り放さずに、
フォアグラウンドで実行することが多いから、
Ctrl-Cで止めた時の、SIGINTも同じハンドラにしておくと便利。
0442デフォルトの名無しさん2006/11/27(月) 08:46:54
>>440
シグナルが非同期、というのは
メインスレッドでハンドラが実行される
ということですよね?
0443デフォルトの名無しさん2006/11/27(月) 09:03:23
>>442
どのスレッドがシグナルを受け取るかはOSにより異なる
0444デフォルトの名無しさん2006/11/27(月) 15:34:27
シグナルマスクで制御できんじゃね?
0445デフォルトの名無しさん2006/11/27(月) 19:15:05
それではpthread_createからpthread_sigmaskまでの間が危険。

普通はメインスレッド以外ではpthread_killでメインスレッドにシグナルを
ルーティングするだけにして、そちらで処理する。
SEGVとかは原因となったスレッドに通知されるのでその限りではないが。
0446デフォルトの名無しさん2006/11/27(月) 19:28:59
スレッド作るまえに全部ブロックしといて、そのあと専用スレッドでsigwaitしてりゃいんじゃね?
0447デフォルトの名無しさん2006/12/02(土) 00:39:35
今開発中の環境でディスクに書き込む速度を調節したいのですが
RAID5の書き込みで、400MB/secも速度が出てしまいちょっと
長い時間データの読み書きを1プロセスが行うだけでIOを占拠してしまいます。

そこで1プロセスで使用できるディスクの速度を75MB/sec固定にしたいのですが
どうやってやればいいのかご存知の片いませんか?
0448デフォルトの名無しさん2006/12/02(土) 01:32:53
OS が何だか知らないけど、複数プロセスで書き込めば勝手に分散されるでしょ。
0449デフォルトの名無しさん2006/12/02(土) 01:33:23
>>447
で、あんたの使っているOSは?
0450デフォルトの名無しさん2006/12/02(土) 01:55:54
HPです
0451デフォルトの名無しさん2006/12/02(土) 02:00:53
>>448
それだと平均75MB/sec出ないのですよ
Readだけで合わせても、30MBと150MBとか
わかれてしまって困ってます。均一に資源を割り当てたいが
どうすればいいのかさっぱりわかりません
0452デフォルトの名無しさん2006/12/02(土) 02:23:06
dd で同じオプションで2並列で書き込んでも大きな差が出るの?
0453デフォルトの名無しさん2006/12/02(土) 08:14:13
流れ切ってすいません…。
設定ファイルを読み込み、解析するためのライブラリはないでしょうか?
0454デフォルトの名無しさん2006/12/02(土) 08:58:22
>>453
あります。
うちのプロジェクトではみんなが好き勝手に設定ファイルを作りたがるので、
切れて共通で使えるようなライブラリを提供してフォーマットを固定にしました。
0455デフォルトの名無しさん2006/12/02(土) 12:45:51
>>453
XMLで書けばいいじゃん
最終的にノード単位で結合すればいいんだし
もし設定ファイル読むのに遅いとかいいだしたら
勝手にやって暮れだが
0456デフォルトの名無しさん2006/12/04(月) 09:32:42
手で書くのが前提の設定ファイルならXMLはお勧めできない。
YAMLあたりで。

0457デフォルトの名無しさん2006/12/04(月) 18:18:36
手で書くのだって、XML扱えるテキストエディターの方が多い。
0458デフォルトの名無しさん2006/12/05(火) 05:23:11
>>453
C なら libConfuse とかってライブラリがあるよ。
あとは Boost の program_options とかどうよ?
0459デフォルトの名無しさん2006/12/05(火) 12:08:08
質問です。
普段Microsoft Visual C++を使って数値演算をしているのですが、
演算サーバーの方が処理が早いということで、UNIXを使い始めたところ、
Visual C++で走るプログラムがUNIXとなると実行結果に『NaNQ』が出てきてしまいます。
ソースは同じものを使っているはずなのに。。。
UNIXでのコンパイルは成功しています。

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

取り敢えず改行コードを LF のみに変換してみては?
0461デフォルトの名無しさん2006/12/05(火) 12:42:58
スマソ。言語は C++ だったか。
0462デフォルトの名無しさん2006/12/05(火) 12:54:12
>>459
普通にどっかで桁落ちしてるんじゃねぇの?
0463デフォルトの名無しさん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
0464デフォルトの名無しさん2006/12/05(火) 13:08:49
>>463
宿題スレ行けよ
0465デフォルトの名無しさん2006/12/05(火) 14:09:51
>>459
そういうときはFPUのCWを再設定しろ。
ってばっちゃがいってた。

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

0466デフォルトの名無しさん2006/12/09(土) 16:31:42
WindowsのGDI+並に高機能で、主にUNIXで動く、
画像ファイルの読み書き・描画などを行うライブラリはありますか?(GDよりも高機能で
できればC/C++等で使えるものでありたいのですが、GIMPのスクリプトとかになるのでしょうか。
0467デフォルトの名無しさん2006/12/09(土) 17:11:33
UNIX板でいきなりGDI+といわれても…
04684672006/12/09(土) 17:13:10
ごめん。UNIX板ではなかった。
で、なにそれ?
0469デフォルトの名無しさん2006/12/09(土) 17:48:10
>>466
cairoとかになるのかなぁ
0470デフォルトの名無しさん2006/12/09(土) 17:53:05
何やりたいかによるんでわ?
画像開いてちょっと加工するならImageMagickとか・・・
0471デフォルトの名無しさん2006/12/12(火) 13:17:21
linux上でプロセス情報を取得するプログラムを作成したいと思っています。

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

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

カーネルバージョンは"2.4.21-20.EL"です
分かる方いましたらよろしくお願いします。
0472デフォルトの名無しさん2006/12/12(火) 13:24:27
Linuxの事は良く知らんけど、それってカーネル内のデータ構造と違うの?
/procとか見ただけじゃいかんの?
0473デフォルトの名無しさん2006/12/12(火) 13:36:11
ユーザーレベルでそういう情報が見られるように procファイルシステム
というのがあるわけだが。
04744712006/12/12(火) 14:03:15
>>472-473
レスありがとうございます。
プログラム中からカーネルのプロセス情報を取得するのはムリなのでしょうか?
0475デフォルトの名無しさん2006/12/12(火) 14:07:55
>>474
お礼だけ言って内容は無視するのかよ!
04764712006/12/12(火) 14:44:05
>>475
申し訳ないです。

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

>>472-473さんの仰るように/procを参照しようとすると
何らかの手段で全プロセスのプロセス番号を取得する必要があると思うのですが
c言語でそのようなことは可能なのでしょうか?
0477デフォルトの名無しさん2006/12/12(火) 14:50:00
これでも読んだら?
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man5/proc.5.html
0478デフォルトの名無しさん2006/12/12(火) 14:50:49
/proc/[0-9]*/cmdlineを全てfopenして読め。

該当するのが見つかったら、
/proc/該当するPID/statを読んで、start_timeを調べろ。
/usr/src/linux-*/fs/proc/array.cを読めばどれか分かる。
0479デフォルトの名無しさん2006/12/12(火) 17:27:38
>>476
psのソース嫁
0480デフォルトの名無しさん2006/12/12(火) 19:01:17
psの出力を使ったほうが。
0481デフォルトの名無しさん2006/12/12(火) 19:07:45
Linuxなら/proc覗くのが普通なんじゃないの?
0482デフォルトの名無しさん2006/12/12(火) 22:55:57
>>476
> >>472-473さんの仰るように/procを参照しようとすると
> 何らかの手段で全プロセスのプロセス番号を取得する必要があると思うのですが
> c言語でそのようなことは可能なのでしょうか?
それが/procを参照するってことだ。
opendir() & readdir()
0483デフォルトの名無しさん2006/12/13(水) 05:48:39
readdir()するくらいならlsの出力でも……
と書き掛けて気付く。それだったらpsでいいね。
0484デフォルトの名無しさん2006/12/14(木) 22:29:15
UNIXでは標準コマンドの出力加工して使うのって
WindowsでDLL呼び出すのと同じくらいふつーに使う気がする
0485デフォルトの名無しさん2006/12/14(木) 22:35:46
proc読もうがps呼ぼうが、どっちでもいいけど、
見に行ったときにそのプロセスがまだある保証はないから気をつけよう。
0486デフォルトの名無しさん2006/12/14(木) 23:04:57
それは当たり前だろう
0487デフォルトの名無しさん2006/12/15(金) 01:31:34
>>484
しかしそれを意図して書式化されていない場合とかlsのようにオプションに
気をつけないと情報ロスが存在しうる場合は注意が必要だったりするし、
やっぱあまり普通には使わないな。
スクリプトなんかでそれで済んじゃう場合はそれでもいいけど。

特にpsの出力なんかパースするくらいなら素直に/procを読むか
kvm_なんたらを使う方が変なところで悩まなくてよい。
0488デフォルトの名無しさん2006/12/15(金) 02:03:35
>psの出力なんかパース
もしかして、フォーマットを木目細かく指定できることをご存知内のだろうか。
0489デフォルトの名無しさん2006/12/15(金) 07:27:53
ここもtips自慢大会か
0490デフォルトの名無しさん2006/12/15(金) 09:30:27
NGワーオ:バッドノウハウ
0491デフォルトの名無しさん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
0492デフォルトの名無しさん2006/12/16(土) 14:08:41
>>491
ありがとうございます。
今から挑戦してきますね。
04934662006/12/19(火) 07:45:47
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3218.txt

これを理解しないと次の授業からついてこれなくなるといわれたのですが、
何をしているのかが全くわかりません。どなたかコメントで解説つけていただけないでしょうか。
0494デフォルトの名無しさん2006/12/19(火) 08:02:04
二進木の操作
0495デフォルトの名無しさん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:

ワロタ
0496デフォルトの名無しさん2006/12/19(火) 09:34:13
whileを知らんのか
0497デフォルトの名無しさん2006/12/23(土) 05:50:37
fopenを使って書かれたプログラムを、ofstreamを使って書き換えています。
ファイル記述子の必要な関数fsyncを使いたいのですが、ファイル記述子は
どのように取得すればよいのでしょうか?
0498デフォルトの名無しさん2006/12/23(土) 10:34:36
fileno (3)
0499デフォルトの名無しさん2006/12/23(土) 11:05:58
こうかな?
stream.rdbuf()->fd()
0500デフォルトの名無しさん2006/12/23(土) 11:35:47
↑いやうそです。どこでもつかえるわけじゃないらしい。
0501デフォルトの名無しさん2006/12/23(土) 14:39:44
http://support.microsoft.com/kb/148505/ja
windowsだとこうみたいだね。
0502デフォルトの名無しさん2006/12/24(日) 23:34:32
ところで、
 /proc/<pid>/stat/utime
 /proc/<pid>/stat/stime
ってどの関数がどのくらいの周期で
書き込んでいるのでしょうか?
0503デフォルトの名無しさん2006/12/24(日) 23:50:09
スケジューラが、CLOCK_TICK_RATEで。
0504デフォルトの名無しさん2006/12/25(月) 00:00:32
>>503
scheduler_tick でしょうか?それとも schedule ?
それらしき箇所が見あたりません。
できれば、何という関数で書き込んでいるのか教えてください。
0505デフォルトの名無しさん2006/12/25(月) 01:04:11
そういうのって、読み出すときに値(カウンタ)を取得して返すんじゃないのか?
0506デフォルトの名無しさん2006/12/25(月) 11:30:47
ほんとにファイルがあるわけじゃないしねぇ・・・
0507デフォルトの名無しさん2006/12/25(月) 11:33:27
カウンタが更新されるタイミングを聞いていると思ったが、
/procを勘違いしている可能性もあるのか。
0508デフォルトの名無しさん2006/12/25(月) 12:45:24
procfsのソース嫁
0509502です2006/12/25(月) 12:46:56
■505さん
>そういうのって、読み出すときに値(カウンタ)を取得して返すんじゃないのか?
cat /proc/<PID>/stat を実行した時に cat が値を読み込むと言うことでしょうか?

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

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

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

ファイルだって実際ファイルがあるんじゃなくて、
ファイルシステムがあるかのようにdisk I/Oしてるんだしね。
0512502です2006/12/26(火) 00:36:31
■510さん、511さん
有り難うございます
もう少し修行を積んで再度出直します。

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










ウソ
0515デフォルトの名無しさん2007/01/03(水) 02:08:18
自前の暗号処理をしようと思って
crypt_des.c
を見てるんですが export されているのは crypt_des だけなんですけど
do_des とか des_chipher とかを export しなおして
自分のプログラムから使っても大丈夫ですか?
コメントには輸出規制が云々と書かれているのでちょっと心配です。
0516デフォルトの名無しさん2007/01/03(水) 02:47:38
北朝鮮とかリビアに輸出する予定がなければ大丈夫
0517デフォルトの名無しさん2007/01/03(水) 10:22:49
輸出規制のほうもexportと出てくるからややこしいな。
0518デフォルトの名無しさん2007/01/03(水) 19:33:54
crypt_desは実際にはDESそのものを使っているとは言えないところを
グレーゾーンにして上手く逃げているんじゃないかな
だからdo_desを勝手に使うとまずいと思うよ
export禁止なのが輸出禁止なのか文字通りexport禁止なのかが良く分からないね
対象は米国外輸出だったと思うから北朝鮮とかリビアは関係ないんじゃないかな
0519デフォルトの名無しさん2007/01/03(水) 19:48:16
法律が変わって同盟国には輸出OKになったんじゃなかったっけ?
IE5.01あたりで暗号強度が128bitになったのはそのおかげだし
0520デフォルトの名無しさん2007/01/04(木) 08:23:13
くだらない質問ですいませんlll
親プロセスに対するシグナルは全ての子プロセスにも送られるんでしょうか?
0521デフォルトの名無しさん2007/01/04(木) 19:45:11
送られない。送りたいなら「シグナル プロセスグループ」でぐぐれ。
0522デフォルトの名無しさん2007/01/04(木) 20:03:00
送られない
0523デフォルトの名無しさん2007/01/04(木) 20:05:12
送りたいなら
0524デフォルトの名無しさん2007/01/05(金) 01:02:15
親が子プロセス生成時にid全部残しておいて
自分でシグナルハンドリングしてしまえばいい
0525デフォルトの名無しさん2007/01/05(金) 04:38:32
ありがとうございます!
0526デフォルトの名無しさん2007/01/11(木) 00:53:23
デーモンについて質問です。
デーモンプロセスを作ろうと思って
childをforkして親プロセスを終了させたりとか
詳解UNIXプログラミング通りにやりました。
どうやらうまくいったっぽいのですが、
できたプログラムがすぐにExitして終了してしまいます。

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

目標としては、STDINからの入力を待って、いろいろ処理した後
STDOUTに結果を返して再び入力待ちに移行するデーモンを作りたいのですが、
SIGIOを感知するまでpauseするというところまではなんとなくわかった
(つもり)なのですが、
参考になるソースコードや何かヒントだけでもいただけませんでしょうか
よろしくお願いします。
0527デフォルトの名無しさん2007/01/11(木) 01:03:58
sleep(1)とか呼ぶと100%にはならないかな
0528デフォルトの名無しさん2007/01/11(木) 01:23:41
select(2)は?
0529デフォルトの名無しさん2007/01/11(木) 01:43:08
STDINから読もうとしたらブロックする(止まる)でしょ
非同期IO使ってるんじゃなければSIGIOは関係ないんじゃないの
0530デフォルトの名無しさん2007/01/11(木) 02:17:38
>>526
> 参考になるソースコード

tail -f とかどうよ。
0531デフォルトの名無しさん2007/01/11(木) 11:53:54
デーモンだから標準入出力閉じてるに7300スティーブンス
0532デフォルトの名無しさん2007/01/11(木) 20:14:52
ぽまえらどこで髪切ってんの?
俺は当然ここだぜ。http://www.unix.co.jp/
05335262007/01/12(金) 00:32:43
どうもです。

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

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

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

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

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



0534デフォルトの名無しさん2007/01/12(金) 06:06:30
関係ない横レスですいませんが
他のスレッドの終了を待つような処理は
while(スレッドの終了フラグ){
 sleep(1);
}
とかいう感じで待つしかないんでしょうか?
0535デフォルトの名無しさん2007/01/12(金) 06:11:06
pthreadならjoinとか状態変数で合図するのを待つとか
0536デフォルトの名無しさん2007/01/12(金) 06:34:33
pthreadです
ちょっと調べてみましたがデタッチについても理解していませんでした
とりあえず上の質問はナシということでお願いします
0537デフォルトの名無しさん2007/01/20(土) 02:55:58
日本語を使えるcursesで標準のものってあるんでしょうか?
0538デフォルトの名無しさん2007/01/22(月) 00:04:02
UNIX上で稼動するCのプログラムを作っていますが、その際
C言語のソースをWindows PCにてCVS管理しています。
下記のような段取りでやっているのですが、初心者のため、
詳しい皆さんはどんな手順で行っているのか知りたいと思います。
効率よくできる方法、一般的な方法(下記のような手順はおかしい、etc)等、
もしあればご教授いただきたく。

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

使用している環境は。。。
CVS用マシン ・・・     Windows XP
ソース修正用マシン ・・・  Windows 2000
実際に稼動するサーバ ・・・ HP-UX 11i v2
0539デフォルトの名無しさん2007/01/22(月) 00:18:43
漏れなら5分で不機嫌になって15分でブチ切れそう。
0540デフォルトの名無しさん2007/01/22(月) 00:19:04
>>538
・Unix上で編集しない理由は?
・稼動確認前にコミットしない理由は?
・最終確認をexport版で行なわない理由は?
0541デフォルトの名無しさん2007/01/22(月) 00:26:47
全部秀丸を遣っているオレにはなんともいえん
0542デフォルトの名無しさん2007/01/22(月) 00:39:23
>>540
稼動確認前にコミットはしねぇだろ。
複数人で開発しているのならなおさら。
チェックアウトしてテストしようとして担当外のところが問題で
うごかなかったら普通きれるぞ。

後なんだexport版って?
0543デフォルトの名無しさん2007/01/22(月) 00:44:24
とりあえず、HP側のビルドするディレクトリをWin2kにマウントしとけば、
いちいちftpする手間がなくなってストレスがかなり減るぜ。
0544デフォルトの名無しさん2007/01/22(月) 00:46:37
>>542
>export版
cvs exportで取り出したもの。CVSディレクトリがつかないから、リリース用に使うのに都合がいい。
>稼動確認前にコミット
何のためにブランチがあるとお思いで?
稼動確認を行なった版が管理されないとしたら、稼動確認のエビデンスをどうやって残すの?
#まぁ、コンパイルが通るかどうか位は当然コミット前にやるとして。
0545デフォルトの名無しさん2007/01/22(月) 00:49:10
全部viを遣ってるオレにはなんとも言えん
0546デフォルトの名無しさん2007/01/22(月) 00:53:16
544はあまり相手にしないほうがよさげ
0547デフォルトの名無しさん2007/01/22(月) 01:00:06
わざわざcvs exportして確認する必要ないだろ。

ブランチはなんの関係があるんだ?
コミットの度にブランチ切ってんのか?笑
0548デフォルトの名無しさん2007/01/22(月) 01:15:05
>>547
安定するまではブランチで作業するし、他人はそのブランチを使わない。
それだけのこと。

最終版をexportでやるのは、開発機とリリース機が違うときに便利。
それ以外では、リリース版をアーカイブするときにCVSディレクトリが邪魔にならずに済む程度のメリット。
0549デフォルトの名無しさん2007/01/22(月) 01:17:56
そういう豆知識が求められてる場面じゃないからw
0550デフォルトの名無しさん2007/01/22(月) 08:59:05
マメ知識だったのかw
0551デフォルトの名無しさん2007/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

どなたか原因分かりませんか?
0552デフォルトの名無しさん2007/01/22(月) 15:32:42
納品するシステムのコンパイル時に、単純にコピーされるのを防止するため
ハードウェアIDなどを組み込んでコンパイルしたいのですが、
ハードウェア依存で、できるだけ高速で取得でき、
、呼び出し時間の短いシステムコールなどはありますでしょうか?
0553デフォルトの名無しさん2007/01/22(月) 18:28:00
>>552
激しく環境依存なので OS 次第じゃないかな。
dmesg とか sysctl とかの出力は使えそうですか?
0554デフォルトの名無しさん2007/01/22(月) 18:49:07
HDのmbrのシリアル番号を見ているソフトがある
他にはNICのMACアドレスとか
替えられない訳じゃないけど
0555デフォルトの名無しさん2007/01/22(月) 19:23:27
>>552
機械の故障でユーザが代替品を使用せざるを得ない場合などに備えて、
マシン側で変更できるものが望ましい。
たとえばNICのMACアドレスなんかはそれを見てるものが昔からあるので
ほとんどのもので変更可能になっている。
0556デフォルトの名無しさん2007/01/22(月) 19:38:59
コピー防止だけどそのレベルで大丈夫?
0557デフォルトの名無しさん2007/01/22(月) 20:16:09
ドングルでもつけてioctlで叩けば〜
0558デフォルトの名無しさん2007/01/22(月) 21:44:19
>>553-557
どうもありがとうございます。
システムが飛んだら再コンパイル必須の使い切りシステムなので、HDDのmbrから調べてみます。
0559デフォルトの名無しさん2007/01/22(月) 21:46:18
ディスクまるごとコピーするツールがあるけど大丈夫?
0560デフォルトの名無しさん2007/01/22(月) 21:50:51
>>559
まずいです
通常は変更不能のものってありますか?
0561デフォルトの名無しさん2007/01/22(月) 21:54:00
CPUID
0562デフォルトの名無しさん2007/01/23(火) 00:18:55
>>560
そこまで厳密に制限したいのであれば、ハードウェアの
色々な情報をまとめて md5 してみるとかどうでしょう?
もちろん md5 の値をさらに可逆の暗号処理すると良いですね。
0563デフォルトの名無しさん2007/01/23(火) 00:44:37
md5sumで十分でしょ。

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

そんなのをmd5sumすれば?
05645622007/01/23(火) 01:35:14
まぁ md5 で十分とは思うのですが、strings(1) とかを使うと
色々と漏れちゃうので、ちょっとした計算式でシフトできたりすると
良いかなぁと思ったのです。気にしすぎかな?
0565デフォルトの名無しさん2007/01/23(火) 02:45:20
そのくらいしたほうがいいと思います
0566デフォルトの名無しさん2007/01/23(火) 04:22:37
MD5をわざわざ文字列にしたりしなけりゃ、少なくともstringsで出てきたりはしないと思うんだけど。
05675512007/01/23(火) 06:07:52
自己解決しました。

#include <sys/quota.h> の前に
#define _LINUX_QUOTA_VERSION 2 を付けてやればOKでした。
0568デフォルトの名無しさん2007/01/23(火) 07:32:24
>>562
もしLAN常時接続が可能ならサーバー側にDB用意して
アクティベーションしないと使えないようにするとか
0569デフォルトの名無しさん2007/01/23(火) 08:27:05
つ[LisenceManager]
0570デフォルトの名無しさん2007/02/04(日) 17:49:07
execl()と、execlp()の違いを教えてください。
初心者ですまそ
0571デフォルトの名無しさん2007/02/04(日) 17:55:13
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/exec.3.html

ttp://www.paw.hi-ho.ne.jp/takadayouhei/technic/5.html
0572デフォルトの名無しさん2007/02/04(日) 17:55:19
p付はPATHから探してくれる。
0573デフォルトの名無しさん2007/02/04(日) 17:55:24
>>570
pがつくかつかないか。つまり、path探索をするかしないか。
05745702007/02/04(日) 17:58:16
>>572
>>573
つまり、pが付いたらコマンドライン引数だけでいいってことでしょうか?
0575デフォルトの名無しさん2007/02/04(日) 18:02:37
第1引数をフルパスで書く必要があるか、PATHにあるから名前だけでいいか、
てこと。
05765702007/02/04(日) 18:04:19
>>575
なるほど〜分かりました。
ありがとうございます
0577デフォルトの名無しさん2007/02/04(日) 18:27:35
おまえら優しいな
0578デフォルトの名無しさん2007/02/07(水) 18:16:19
gcc(g++)にはVC++におけるReleaseビルドとDebugビルドのような概念はないんでしょうか?
0579デフォルトの名無しさん2007/02/07(水) 18:25:52
VC++のリリースビルドとデバッグビルドの違いを理解してからおいで。
0580デフォルトの名無しさん2007/02/07(水) 18:26:41
オプションに-O2(とかそのほか最適化オプション)つければReleaseビルド。
0581デフォルトの名無しさん2007/02/07(水) 18:29:04
デバッグ/リリースごとの条件コンパイルのためのプリプロセッサ
シンボルもあるだろうね。
あと、-gオプション。
0582デフォルトの名無しさん2007/02/07(水) 19:09:40
最近のVCはReleaseでもデバッグ情報ついてるよ。
05835782007/02/07(水) 20:53:56
ありがとうございました!
0584デフォルトの名無しさん2007/02/07(水) 22:37:33
sspとか
0585デフォルトの名無しさん2007/02/09(金) 05:26:16
セッションを大量に張るアプリケーションのソケットの処理にAIOを使うってのはどうなんでしょう?
スレッドベースのハンドラを使うとたくさんのソケットがある分スレッド生成にコストがかかりそうですし
シグナルベースよりはepoll()やkqueue()の方が効率的なのかなーと思ってはいるんですが
最近AIOに興味を持ってこんなことを妄想してたんですが皆さんはどう思われます?
0586デフォルトの名無しさん2007/02/09(金) 20:31:47
aioってkqueueで待てた気がするけど。
0587デフォルトの名無しさん2007/02/10(土) 05:05:17
確かにEVFILT_AIOってのがありますねぇ。
便利でいいなぁ。Linuxにもこんなシステムコールあればいいのに。
05885382007/02/10(土) 07:00:49
>>539−550
アドバイスありがとうございます。
特に、マウントするというやり方は、当方まったく気がつきませんでした。
いろんなご意見いただいてありがたかったです。

今後も効率いい作業方法を意識していろいろtryしてみます
0589デフォルトの名無しさん2007/02/15(木) 06:14:56
どうもaio_read()呼ぶと内部でpthread_create()が呼ばれてる感じ
スタック使い切って死にそうなので大量のセッション管理には向かないのかな
0590デフォルトの名無しさん2007/02/15(木) 08:06:43
内部で、て……。aio_readはシステムコールだぞ。
なんでユーザプロセスのスレッドなんか生成しなきゃならん。
0591デフォルトの名無しさん2007/02/16(金) 16:07:36
>>589
それはWin9xのWinsock2-overlappedI/O実装
0592デフォルトの名無しさん2007/02/20(火) 00:48:16
fifo と unix ドメインソケット、どう使い分けたらいいのかを教えてください。
0593デフォルトの名無しさん2007/02/20(火) 01:30:34
fifoは親子関係のないプロセス間で使うのに便利
0594デフォルトの名無しさん2007/02/20(火) 01:53:08
unixドメインソケットも親子関係のないプロセスで使うと便利!
0595デフォルトの名無しさん2007/02/20(火) 15:17:14
fifoはunixドメインソケットを使って実装されている 事もある
0596デフォルトの名無しさん2007/02/21(水) 00:39:37
whileとforの違いがよくわからないんでお願いします。
あと、最後に;(セミコロン)をつけるのは何のときで、つけないのが何のときか教えてください。

教科書見てもイマイチよくわからなくて・・・
0597デフォルトの名無しさん2007/02/21(水) 00:50:04
>>596
とりあえず使おうとしてる言語はなんなのか言ってみ
シェルのことか?
0598デフォルトの名無しさん2007/02/21(水) 00:54:39
あ、すんません。C言語です。
めっちゃ基礎的なことだけどおねがいします。
0599デフォルトの名無しさん2007/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つであっても囲んで構わないし、ヒューマンエラーを避ける
意味ではそのほうが好ましい)
0600デフォルトの名無しさん2007/02/21(水) 01:10:09
C言語なら俺に聞け(入門篇) Part 8
http://pc10.2ch.net/test/read.cgi/tech/1171946674/

こっち向きだろうね。
0601デフォルトの名無しさん2007/02/21(水) 01:11:29
>>599
ありがとう!なんとなくわかったような・・・わからないような・・・
もっかい教科書見直してみるわ。
>>600
あ、そんなスレあったのか。こんどからはそっちで。
0602デフォルトの名無しさん2007/02/21(水) 01:12:40
訂正

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

あと「それが0でない場合」しか書かなかったが、0になったら
繰り返しを終えて次に進む。
0603デフォルトの名無しさん2007/02/21(水) 20:12:39
forは式を省略できるが、whileはできないってのも。
永久ループを作るときに、forなら
for(;;)文
で大丈夫だけど、whileだと
while(1)文
の様に書かないといけない。
これは1を評価するという冗長な意味を持つので、for(;;)の方がよく使われてる。
(;;) <- これが顔文字みたいでかわいいし。
0604デフォルトの名無しさん2007/02/21(水) 21:31:32
>>603
最後の2文はおまいの思いこみだw
面白いけどw
0605デフォルトの名無しさん2007/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してループの頭にジャンプ」
という全く同じコードになった。
0606デフォルトの名無しさん2007/02/21(水) 21:49:27
for(;;)は無限ループを表すためだけにANSIが規格化した代物。
0607デフォルトの名無しさん2007/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)はイデオム化してるから問題はないと思うけど、
もしも、全く最適化をしないコンパイラがあれば、少しだけ無駄なコードになるはず、、
まぁそんなことは重要じゃないので、見た目のいい方を選べばいいと思います。
0608デフォルトの名無しさん2007/03/01(木) 19:42:26
以下のMakefileの
$(OBJS): $(HEADS) Makefile
行は何をしているのでしょうか?

ttp://www-or.amp.i.kyoto-u.ac.jp/algo-eng/db/template/Makefile.nsrc1bin
0609デフォルトの名無しさん2007/03/01(木) 21:02:27
>>608
スレ違い。
0610デフォルトの名無しさん2007/03/01(木) 21:25:06
>>608
make makes many problems
http://pc11.2ch.net/test/read.cgi/tech/1029599472/
あたりか?

一応答えておくと、
$(OBJS)内のファイルに依存性を追加しているだけ。
この行自体は何もコンパイルしたりしない。
「$(HEADS)のファイルいずれかかMakefileが書き換えられたら
$(OBJS)のすべてのファイルはコンパイルし直しとなる」という宣言。
06116082007/03/01(木) 21:52:57
>>610
良くわかりましたありがとうございます
教えて頂いたスレにも書き込もうか迷ったのですが
過疎っており、都合上解答をできるだけ早めに頂きたかったので
こちらで質問させていただきました
助かりました

>>609
死ねカス
代替案出せないなら黙ってろ
0612デフォルトの名無しさん2007/03/01(木) 22:51:45
カスにカス呼ばわりされてもなぁ。makeスレは過疎ってたって巡回している人は沢山いると思うのだが。
0613デフォルトの名無しさん2007/03/01(木) 22:58:01
>>612
ごめんなさい
core吐きまくっててイライラしてて言い過ぎた
次は教えてもらったスレで紳士的に質問しますね
0614デフォルトの名無しさん2007/03/02(金) 22:03:55
gccのプリプロセッサだけを使いたかったので、子プロセスでcppを起動して
パイプで出力を受け取ったのですが、EOFが来ません。
メインのプロセスはboost::iostream::file_descriptor_sourceで子プロセスの
出力を読み込んでいます。
どなたかお知恵を…
0615デフォルトの名無しさん2007/03/02(金) 22:13:13
入力を閉じる
0616デフォルトの名無しさん2007/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);

}
0617デフォルトの名無しさん2007/03/17(土) 01:33:49
どっか別の場所でsigactionしなおしてるんじゃね?
0618デフォルトの名無しさん2007/03/18(日) 13:12:48
自作のshared objectを作って、その中の関数を呼ぶ別のプログラムを書いたんだが
どうやらshared objectの中にバグがあるようで、落ちる。
shared objectの中でgdbを使ってどこで落ちたのか調べたいのだから
shared objectを呼び出してるプログラムにgdbを適応してrunしてもshared objectの中まで
入ってくれない。
shared objectの中身をgdbでデバッグしたい場合はどうすればいいんでしょうか?
教えてください
0619デフォルトの名無しさん2007/03/19(月) 00:37:58
>>618
> 自作のshared object
のコンパイルオプションは???
0620デフォルトの名無しさん2007/03/29(木) 06:38:54
プログラムが現在使用しているトータルメモリ量を取得する方法を教えてください
0621デフォルトの名無しさん2007/03/29(木) 07:40:28
先ずはあなたの言う、「プログラムが現在使用しているトータルメモリ量」を定義してください。
0622デフォルトの名無しさん2007/03/29(木) 08:40:48
>>620
/procを使う
perlならProc::ProcessTable::Process
0623デフォルトの名無しさん2007/03/29(木) 11:38:11
>>621
プログラムが確保したヒープとスタックと
内部でmallocしようとしてるサイズでいいんじゃね?
まあmallocで100ギガ確保しても使わなければ
メモリは使われないからそれを消費量というかどうかは
定義しなきゃだなぁ
0624デフォルトの名無しさん2007/03/29(木) 14:10:03
mallocした量とmalloc用のヒープ量(sbrk次第?)はまた違うかもしれない。
管理用のデータもあるだろうし。
0625デフォルトの名無しさん2007/03/29(木) 19:24:14
>>620
getrusage(2)
0626デフォルトの名無しさん2007/04/10(火) 21:53:49
Windowsきたねえ!UNIXきれい!
でもWindows使いたい!UNIX使いたくない!
ふしぎ!!
0627デフォルトの名無しさん2007/04/11(水) 08:11:21
エロゲがみんなUNIXで動いたらどうでしょう。
0628デフォルトの名無しさん2007/04/12(木) 13:02:39
あるプログラムをFORTRANからCに書き換えています。
FORTRAN内の配列(かなり大きい)を、Cで同じサイズで確保しようとすると、
実行時に確保できない旨のエラーが出てしまいます。
両方とも同じマシン上で動かしているので、空き領域自体はあると思うのですが、
何か良い方法はないでしょうか?
0629デフォルトの名無しさん2007/04/12(木) 13:05:23
↑エスパー専用
0630デフォルトの名無しさん2007/04/12(木) 13:13:58
>>628
newをつかってみたら?
06316302007/04/12(木) 13:14:49
動的に確保した方が、大きな値を取れたはず
0632デフォルトの名無しさん2007/04/12(木) 13:17:36
エスパー登場
0633デフォルトの名無しさん2007/04/12(木) 13:23:25
>>628
ソースコンバータで事は足りないの?
0634デフォルトの名無しさん2007/04/12(木) 14:01:29
スタック上に確保しようとして溢れてるってことか。
それならmalloc()とかでヒープに確保しないと。
0635デフォルトの名無しさん2007/04/12(木) 14:38:50
んな面倒なことしないでも、staticで宣言すりゃいいんでないかい。
0636デフォルトの名無しさん2007/04/12(木) 20:37:23
ulimit でスタックのサイズをでかくする
0637デフォルトの名無しさん2007/04/13(金) 21:25:10
limitで制限かけてあると思うけどな。
環境変数でも貼ってくれ。
0638デフォルトの名無しさん2007/04/17(火) 18:44:13
64bitマシンで32bitの整数を扱いたいのですが、int寄りも小さくshortよりも大きい整数はないのでしょうか?
C99を使うしかないのでしょうか?
0639デフォルトの名無しさん2007/04/17(火) 19:17:07
OSとコンパイラは?
gccのx86_64版でsizeof(int)は4だよ。
0640デフォルトの名無しさん2007/04/17(火) 19:24:49
>>638
LP64,LLP64,ILP64あたりでググれ。
0641デフォルトの名無しさん2007/04/18(水) 04:41:26
intってマシン長じゃないの?
0642デフォルトの名無しさん2007/04/18(水) 05:12:16
>>641
違うこともあるお⊂二二二( ^ω^)二⊃。x86_64とか。
0643デフォルトの名無しさん2007/04/18(水) 06:55:21
>>641
そうじゃない例はいくらでもあるが。
0644質問。2007/05/02(水) 03:01:44
あるプログラムから別のプログラムを立ち上げて、
その標準入出力を掴むプログラムをC言語で作りました。

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

呼び出し先としてsshやftpを立ち上げてみると、ログインパスワード要求時の
「Password:」 の表示が標準出力じゃないみたいで、
呼び出し元プログラムを通さず、画面に出てきてしまいます。
一体何故でしょうか? またこれの解決手段は何かありますか?
0645デフォルトの名無しさん2007/05/02(水) 03:13:03
stderrじゃね?
0646質問。2007/05/02(水) 03:25:07
>>645
いや、それもしっかり呼び出し元に送ってるんですが・・・。
0647デフォルトの名無しさん2007/05/02(水) 04:27:16
>>644
ssh などは /dev/tty にプロンプトを書いてる。
0648デフォルトの名無しさん2007/05/02(水) 04:31:39
>>644
たぶん君のやりたいことには、
ttyrecやscriptのソースが参考になる。
0649デフォルトの名無しさん2007/05/02(水) 05:25:13
>>644
> あるプログラムから別のプログラムを立ち上げて、 
> その標準入出力を掴むプログラムをC言語で作りました。 

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

さて、そろそろ寝るかorz
0651デフォルトの名無しさん2007/05/02(水) 07:31:36
そんなもん誰も悩んでないよ。
ssh-agent使えばいいんだから。
プログラミングですらない。
0652デフォルトの名無しさん2007/05/02(水) 07:33:58
マウスを操作して自動的にアプリのボタンをクリックするプログラムを作成するくらい不毛な話だ
0653デフォルトの名無しさん2007/05/02(水) 07:50:53
それだってtcl/tkのtestsuitsにあるけどなw
0654648=651=6532007/05/02(水) 17:01:00
そこでexpectですよ、となるわけかな?
0655デフォルトの名無しさん2007/05/03(木) 00:29:57
そこでExpectですよ
→ そしてTclが嫌になる
→ Perl/Ruby/Pythonとかのexpect風モジュールに逃げる
→ 本家本元のexpectほどのエレガントさや機能がなくてガクーリ
→ でもTclの糞さにInline::Tclに逃げたりRuby+Expectとかのハイブリッドコードを書き出す
→ 他人には理解不能に

いやほんとRubyのシンタックスならTclなみにエレガントにExpectできると
思うんだけどね。ベタなコマンドライン的記法にマッチしてるから。
0656デフォルトの名無しさん2007/05/04(金) 01:17:02
マジアフォだな。
マウスカーソルを横取りして駆動するドライバとか変な苦労しそう。
キーボードコントローラを乗っ取ってキー入力してみたりとか、GPUプログラミングして表示内容を取得とか。
0657デフォルトの名無しさん2007/05/10(木) 21:52:44
 質問をさせていただきます。
 UNIX上で動く簡単なftpデーモンを作っています。

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

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

 どこかで根本的な勘違いをしてるのか、調べても解答を探すことができませんでした。
 お手数ですが、どなたがご助言をいただけないでしょうか?
0658デフォルトの名無しさん2007/05/11(金) 00:03:42
>>657
アクティブモードのデータコネクションは、FTPサーバからクライアントにコネクションを張りに行くわけだから
制御コネクションとは接続方向が逆って辺りは理解している?
まぁ、詳しくはネットワークスレを読めばリンクが出てくると思うけど。
0659デフォルトの名無しさん2007/05/11(金) 01:19:45
RFCちゃんと読んでる?
0660デフォルトの名無しさん2007/05/11(金) 06:09:45
>>657
サーバー側のポート番号を指定するのはPASVの場合
0661デフォルトの名無しさん2007/05/12(土) 00:25:23
PORTとかEPRTのばあいは黙ってconnectすればいい。
PASVとEPSVの場合は、bind-listen-acceptして待ち受けてればいい。
0662デフォルトの名無しさん2007/05/12(土) 01:19:48
>>658
その時のsrc portの話だと思われ。

>>657
制御コネクションを21番でbindしてlistenしたように、
データコネクションは20番でbindしてconnectすればいい。
bindせずにconnectすると適当なportが使われる。
06636572007/05/12(土) 01:27:58
>>658-662
たくさんのご助言、ありがとうございました。
bindはacceptする側だけだと思い込んでいて、データコネクション側では20番ポートでbindしていませんでした。
さっそく、bindしてみます。
それでは失礼いたします。
0664デフォルトの名無しさん2007/05/14(月) 21:30:04
javaファイルをpostscriptに変換して印刷しようとして
a2ps test.java
と入力したのですが、印刷されませんでした。
なぜですか?
0665デフォルトの名無しさん2007/05/14(月) 21:47:58
>>664
今時の a2ps は, 出力をかってに lpr あたりに食わしてくれるのか?
0666デフォルトの名無しさん2007/05/15(火) 00:27:25
はい
0667デフォルトの名無しさん2007/05/27(日) 17:01:31
>>665
じじぃハケーン
0668デフォルトの名無しさん2007/06/12(火) 21:09:49
良かったら教えてください
コマンド tcpdump を例えば 3分ぐらいでタイムアウトさせる方法はあるでしょうか?
0669デフォルトの名無しさん2007/06/12(火) 21:28:56
tcpdump & ; sleep 180 && killall tcpdump
0670デフォルトの名無しさん2007/06/12(火) 23:57:09
っこれは!
do shell script "sleep 180 && killall tcpdump & tcpdump " password g_pwd with administrator privileges
まーくをーだーうぃんあぽーすくで試してみました。さすが!!!
参考提供感謝致します
本当に助かりましたm(_ _)m
0671デフォルトの名無しさん2007/06/13(水) 01:36:26
>>669
それ文法エラー。
Cと違って空文が許されてない。だから"& ;"はまずい。
&自体、;と同じくセパレータだから。

tcpdump & sleep 180; killall tcpdump

これならCtrl-Cでsleepを停めた時もkillallされる。細かいこと言えば、

tcpdump & sleep 180; kill $!

の方がいい。
0672デフォルトの名無しさん2007/06/13(水) 10:24:56
情報ありがとー
なぜか書き込み中おーえすごと固まりました。。

;(空文?) あるとかで蹴られすた。。
tcpdump を後にもっていかないと何したいの??とかで。。
タイムアウトオプション tcpdump 完了。

で、エラー処理わぁぁぁぁ・・・
本当にありがとーー
0673デフォルトの名無しさん2007/06/14(木) 01:17:29
RedHat Linuxのbashによるシェルスクリプトで教えてください。

以下の様なテキストがあります。

Code: コード1
Title: タイトル
Author: 田中 鈴木 渡辺
Code: コード2
Title: タイトル
Author: 渡辺 中山 斉藤
(以下同様に続く)

このテキストを、以下のように整形したいと思っています。
コード1 田中 鈴木 渡辺
コード2 渡辺 中山 斉藤
(以下同様に続く)

今は、grep ^Codeとawkとでコード部分を取り出してファイルへ出力、同様に
Author部分をファイルへ出力し、それらをExcelに貼り付けて整形しているのですが
さすがに良くないと思っています

「Code:」を検索して見つけたら処理、そこから「Author:」を検索して見つけたらまた処理、
改行入れてまた「Code:」を検索して…とすればよいと思ってawkのマニュアルなど読んで
みましたが、残念ですがよく分かりませんでした。

どういう風にやればよいか、教えてください。
0674デフォルトの名無しさん2007/06/14(木) 01:35:19
>>673
awk -F': ' '/Code/ { code = $2 } /Author/ { print code, $2 }'
0675デフォルトの名無しさん2007/06/14(木) 01:43:23
>>674
一旦Codeで拾った部分を変数に入れておいて、最後に出力する、というのが
ミソなのでしょうか
試してみます

ありがとうございました
0676デフォルトの名無しさん2007/06/14(木) 01:47:48
シェルスクリプト関係ねぇ
0677デフォルトの名無しさん2007/06/20(水) 22:09:48
けーたーむって何?
0678デフォルトの名無しさん2007/06/20(水) 22:10:35
端末エミュレータ。
0679デフォルトの名無しさん2007/06/21(木) 17:24:18
shellてなに?
0680デフォルトの名無しさん2007/06/21(木) 19:28:30
貝
0681デフォルトの名無しさん2007/06/21(木) 19:36:47
ガソスタWWW
0682デフォルトの名無しさん2007/06/22(金) 01:47:07
がそ☆すた
0683デフォルトの名無しさん2007/06/22(金) 07:35:00
出光昭和
0684デフォルトの名無しさん2007/06/28(木) 20:03:14
Ciel
0685デフォルトの名無しさん2007/06/28(木) 21:10:59
USBフラッシュメモリーからファイルをもってくるにはどうしたらいいですか?
0686デフォルトの名無しさん2007/06/28(木) 21:24:03
>>685
ドラッガンドドロップする
0687デフォルトの名無しさん2007/06/28(木) 21:31:29
ソース教えてください!初心者なんです
0688デフォルトの名無しさん2007/06/28(木) 21:56:46
うちはブルドッグだな。
0689デフォルトの名無しさん2007/06/28(木) 22:06:30
ブルドック??
0690デフォルトの名無しさん2007/06/28(木) 22:19:50
愚か者メが。おたふくにきまっちょる。
0691デフォルトの名無しさん2007/06/28(木) 22:24:04
ソースって料理に合わせてシェフに作らせる物じゃないの?
0692デフォルトの名無しさん2007/06/28(木) 22:30:46
ウスターソース系って最近口にしてねーな
そういえば
0693デフォルトの名無しさん2007/06/29(金) 00:09:32
ブルドック中濃ソースはカレーからお好み焼きまでなんでもいける神ソース
0694デフォルトの名無しさん2007/06/29(金) 07:43:19
各種言語でsystem()という関数がありますが、これにどうコマンドの文字列を渡すのが
安全か悩んでいます。

ファイルのパス名を引数にとるコマンドを実行したいのですが、
systemに渡す文字列を単に sprintf(cmd_line, "%s %s", cmd_path, file_path) みたいに
処理してたら、file_path の内容にスペースが含まれている場合があってバグりました。

で、クォートして sprintf(cmd_line, "%s '%s'", cmd_path, file_path) としたんですが、
あるとき file_path にシングルクオートが含まれていて、死亡しました。
0695デフォルトの名無しさん2007/06/29(金) 08:09:37
>>694
'は"'"に置き換えればいいじゃん。

>>687
ソースも何も、(マウントはできていると言う前提で)普通にファイルコピーすればいいじゃん。
0696デフォルトの名無しさん2007/06/29(金) 10:17:52
>>694
system(3)じゃないと駄目なの?
>>694の例のようにCなら、execle(3)が適切な場合も多いけれど。

system(3)じゃないと駄目なら、
shellの特殊文字を全部\でquoteだね。
;&|()<>\
0697デフォルトの名無しさん2007/06/29(金) 15:36:16
UTF-8って2バイト目以降にアレあったっけ
0698デフォルトの名無しさん2007/06/29(金) 16:06:28
あれね
0699デフォルトの名無しさん2007/06/29(金) 17:01:43
あれかぁ〜。あれは良いもんだ。
0700デフォルトの名無しさん2007/06/29(金) 18:49:41
>>697
2バイト目以降は 10xx xxxx というビット列なので、アレはないよ。
0701デフォルトの名無しさん2007/06/30(土) 03:01:16
そもそもUTF-8は一個みただけでそれがマルチバイトの何バイト目か
わかることがその特徴の一つでしょ。
0702デフォルトの名無しさん2007/06/30(土) 03:30:47
何バイト目かって、どうやってわかるの?
07036942007/06/30(土) 06:34:02
どうもです。

>>695
でもほかにもおそらく問題のあるキャラクタがありますよね多分。
個別対応でなく包括的に処理したいのですが。

>>696
えーとexecle()を呼ぶということはまずfork()しないといけないですよね。
あと書き忘れましたsystem()でリダイレクト(>)をしている場所もあって、
そうするとdup()とかでしたっけ? 等々、ちょっと面倒かなと思ったもので。
0704デフォルトの名無しさん2007/07/01(日) 12:36:12
UTF-8は、1バイト目か2バイト目以降かは分かるけど、
2バイト目以降の部分は1バイト目でないこと以上のことは
わからなかったような。
0705デフォルトの名無しさん2007/07/01(日) 20:42:34
そーだった。
701は撤回します。
文字列を遡らなくてもマルチバイトの切れ目がわかるというのと勘違いしてた。
0706デフォルトの名無しさん2007/07/08(日) 17:41:31
配布するようなプログラムの場合、
long long intは使わない方がいいんですかね?
配布するような場合は、動作環境とかに

long long int が使え、それが8Byte

とかって書いておくんですかね?
0707デフォルトの名無しさん2007/07/08(日) 18:12:52
つ stdint.h
0708デフォルトの名無しさん2007/07/08(日) 18:22:44
簡単なものでもいいんですけど
バッファオーバーフローを調べるツールはありませんか?
0709デフォルトの名無しさん2007/07/08(日) 18:53:40
あります
0710デフォルトの名無しさん2007/07/08(日) 20:21:55
とてもちっちゃいメモリ領域を大量に確保するのに適した
mallocのようなものを実装しているライブラリありますか?

連想配列とか良く伸びるリストとかを実装するのに便利なのが
ほしいんだけど、自作するのは面倒なので
ググるためのキーワードはなんでしょう
0711デフォルトの名無しさん2007/07/08(日) 20:23:50
> 良く伸びるリスト
ちょっとステキ
0712デフォルトの名無しさん2007/07/08(日) 20:35:37
メモリプール
0713デフォルトの名無しさん2007/07/08(日) 20:43:55
>>710 segregated storage
0714デフォルトの名無しさん2007/07/08(日) 22:27:43
>>710 apr_pool
0715デフォルトの名無しさん2007/07/13(金) 17:04:41
Javaなどのように使わなくなったメモリを
半自動的に解放するようなメモリ管理ライブラリってないですかねー?

たとえば a2 に割り付けるメモリを確保するときに、
その親は a1 だと渡しておいて、a2 のカウンタを 1 にしておく。
a1 を解放するとき、自動的に a2 のカウンタも -1 して、
結果 a2 のカウンタが 0 になるので、a2 も自動的に解放する。
みたいな。FSのハードリンクに近い考え方。

ついでにDEBUGモードでヒープ領域の配列とかにアクセスするときに、
そのライブラリの関数越しにアクセスすれば、
そのアクセスがバッファオーバーフローを起こしてないか
チェックしてくれたりとか。

あとはメモリ確保時に少し多めに確保しておいて、
そこを読み書き禁止に設定しておいて、
そこにアクセスした瞬間に割り込みが入ってプロセスが落ちるとか。
もしくは少し多めに確保するときにゼロクリアしておいて、
チェック用関数でその少し多めのところがゼロのままかチェックできたり。
0716デフォルトの名無しさん2007/07/13(金) 17:07:54
>>715
Boehm
07177152007/07/13(金) 17:48:52
>>716
ありです。
Boehm GCでメモリリークのチェックとか出来るみたいですね。

後半のは mcheck ライブラリでできるようです。
0718デフォルトの名無しさん2007/07/13(金) 20:25:46
それなんてAPR_POOL ?
0719デフォルトの名無しさん2007/07/13(金) 22:12:39
どうしても、エイプリルフールに見える……
0720デフォルトの名無しさん2007/07/14(土) 01:53:24
>>715
libumem
0721デフォルトの名無しさん2007/07/14(土) 11:40:08
メモリー管理の内側 動的アロケーションの選択肢とトレードオフ、そして実装
ttp://www-06.ibm.com/jp/developerworks/linux/041217/j_l-memory2.html
0722デフォルトの名無しさん2007/07/19(木) 10:38:33
Visual Studioでc++の環境で長年してきたけど
emacsがメインの環境に移って混乱してる
他の人がみんなunixなのでコード共有考えたらVisual Studio捨てないといけないのかな
0723デフォルトの名無しさん2007/07/19(木) 10:41:28
そうだね
0724デフォルトの名無しさん2007/07/19(木) 22:42:58
>>722
別に捨てなくてもいいんでない?
0725デフォルトの名無しさん2007/07/20(金) 09:31:51
>>722
みんなと相談しろよw
0726デフォルトの名無しさん2007/08/05(日) 09:57:23
signal 9のエラーで停止した場合の、考えられる原因を教えてください。

0727デフォルトの名無しさん2007/08/05(日) 13:30:53
権限のあるユーザorプログラムが、
SIGKILLをsignalした以外に考えられません。
0728デフォルトの名無しさん2007/08/05(日) 18:45:50
他に考えられる原因:

puts("signal 9のエラー");
exit(1);
0729デフォルトの名無しさん2007/08/07(火) 23:42:39
IA64 HP-UX付属のcc(ANSI-C)とldを使っての話なんですが
32bitのオブジェクトファイルと64bitオブジェクトファイルって
リンクする方法はありますか?というか、多分できませんよね?
常識的に考えて・・・
0730デフォルトの名無しさん2007/08/08(水) 06:33:16
IA-64の32bitオブジェクトファイルって、IA-32?
0731デフォルトの名無しさん2007/08/08(水) 23:22:47
そう
互換性のために、32bit用のオブジェクトファイルにコンパイルすることもできます
0732デフォルトの名無しさん2007/08/09(木) 08:22:54
x86とx86_64をリンクする以上に無理っぽいな。
出来るのかな。
0733デフォルトの名無しさん2007/08/09(木) 08:39:46
それぞれ、sizeof(void *)を出力してみればいい。
そこからして違うのだから、普通そのままリンクできない。
0734デフォルトの名無しさん2007/08/09(木) 10:09:25
特権命令を実行しないとモードが切り替わらない。
特権命令はカーネルモードでしか実行できない。
0735デフォルトの名無しさん2007/08/21(火) 21:12:36
>>726
OOM Killer
0736デフォルトの名無しさん2007/08/22(水) 07:10:07
9って、(いまのところ)どこでもKILLなんだっけ?
0737デフォルトの名無しさん2007/08/28(火) 08:49:30
Linuxなんだけど、プロセスが自分自身のプログラムのパスを知る方法ってある?
通常agv[0]に入ってるようなやつ。
0738デフォルトの名無しさん2007/08/28(火) 09:55:47
完全な方法はない。

よくやるのが$PATH内、argv[0]を検索。
つまりshellと同じことをやる。

その方法さえも、
・argv[0]は何渡されているか分からない
・絶対パス起動で、$PATHは関係ないかも。
と、うまくいかないことがある。
0739デフォルトの名無しさん2007/08/28(火) 10:05:36
>>738
posixで無理なのは知ってる。
環境依存でいいんだけど。
0740デフォルトの名無しさん2007/08/28(火) 10:10:21
無理です。
0741デフォルトの名無しさん2007/08/28(火) 10:17:03
>>740
無理じゃないんだけど。
もっとスマートな方法がないかと思って質問してるんだから。
所詮UNIXスレか。
0742デフォルトの名無しさん2007/08/28(火) 10:22:35
win32ならGetModuleFileNameで一発で分かるのに・・・UNIXダサ杉
0743デフォルトの名無しさん2007/08/28(火) 10:57:14
GetModuleFileName相当が必要になるようなプログラムを組む方がダサいと思うがなあ
0744デフォルトの名無しさん2007/08/28(火) 11:00:12
>>737 がダサいということでFAですね
0745デフォルトの名無しさん2007/08/28(火) 11:21:38
>>737
つ[popen("which")]
0746デフォルトの名無しさん2007/08/28(火) 12:42:50
>>737
/proc/PID/exe のシンボリックリンクがさしているPATHを見ればいいだろ。
このスレで訊くのが間違い。
0747デフォルトの名無しさん2007/08/28(火) 15:22:31
>>745はタコ
0748デフォルトの名無しさん2007/08/28(火) 15:30:31
タコっつーか、ネタだろ。
0749デフォルトの名無しさん2007/08/28(火) 15:47:17
>>742ではないがGetModuleFileName相当は必要。
各種パスをコンパイル時に埋め込む方がダサい。
0750デフォルトの名無しさん2007/08/28(火) 16:30:01
Unix系だと実行ファイルと関係するものを一箇所にまとめて置いとく習慣がないから、
そういうのが必要っていうことは行儀が悪いってことになるんじゃね?
自分をexecっていうのはたまにやりたくなるけど。
0751デフォルトの名無しさん2007/08/28(火) 18:35:51
unixの文化ではいらんわな
0752デフォルトの名無しさん2007/08/28(火) 20:32:42
習慣と取得可否に何の関係が・・?
0753デフォルトの名無しさん2007/08/28(火) 21:04:27
必要のない機能を
0754デフォルトの名無しさん2007/08/28(火) 21:07:05
インストーラ必須にして、インストール時に埋め込んでしまえば良い。
良くあるのはスクリプト経由で起動するやつで、スクリプト内で何とかしてる。

>>746
コマンドがシンボリックリンクの場合はリンク先を指してるみたいだけど、
元質問者はそれでも良いのかな。
0755デフォルトの名無しさん2007/08/28(火) 21:27:14
/proc/self/exe を readlink() するのが普通のやり方じゃないの。
Solaris も /proc/self の下にある(というか、こっちが先だよね?)。

ダサイのは >>742,749 って事で。
0756デフォルトの名無しさん2007/08/28(火) 21:55:37
UNIXの慣習上、自分のパスを必要とすることがないという結論なんだが。

>>755
必死になって方法を探さなくてもいいよ。
0757デフォルトの名無しさん2007/08/28(火) 22:06:54
必死というか単なるイディオムだよ。実行時に自分の実行ファイルを
探す方法は何ですかという、よくある質問に対する単純な答えだね。
そこに UNIX の慣習は関係無いし、必要だから実装するだけだよ。
俺も自分のコードに入れた事があるよ。理由は忘れたけど、その時は
それが必要だった。
0758デフォルトの名無しさん2007/08/28(火) 22:09:30
>>756 は、なぜそこまで自分の殻に閉じこもるんだ?
0759デフォルトの名無しさん2007/08/28(火) 23:06:21
UNIX文化をわかってない馬鹿は議論に参加スンナ
0760デフォルトの名無しさん2007/08/28(火) 23:09:55
セキュリティのことなんか配慮しないのがUNIX文化
0761デフォルトの名無しさん2007/08/28(火) 23:40:51
UNIX 文化って言っても、どうせコーディングには Emacs や Eclipse 使ってるんでしょ。
0762デフォルトの名無しさん2007/08/29(水) 00:09:21
そもそもufsは原理的にパスを一意に決定できない(ハードリンク)から、
用途次第じゃそもそもパスを求めること自体に意味がないしな。
0763デフォルトの名無しさん2007/08/29(水) 00:17:01
それでも殆どの場合は十分だし、全く出来ないよりは優れている。
0764デフォルトの名無しさん2007/08/29(水) 00:19:15
UNIX の思想は、たとえ完璧じゃないとしても単純な答えを重視するんでしょ。
0765デフォルトの名無しさん2007/08/29(水) 01:24:34
完璧で単純な答えを用意する。
完璧でも単純でもなければなし。
0766デフォルトの名無しさん2007/08/29(水) 01:28:00
>>762
パスはともかく、自分のファイル名は必要じゃん?
名前変えたら変身する人って結構いるよね
gzipちゃんとか
0767デフォルトの名無しさん2007/08/29(水) 01:45:29
別に無くてもかまわんだろ
0768デフォルトの名無しさん2007/08/29(水) 03:51:19
>>766
その場合、パスにこだわる必要ありませんね。
0769デフォルトの名無しさん2007/08/29(水) 09:10:33
あるがままの現状を受け入れて向上させようとか考えないのがUnix文化
0770デフォルトの名無しさん2007/08/29(水) 09:57:20
あほらし過ぎw
0771デフォルトの名無しさん2007/08/29(水) 10:08:14
で、自分をexecしたい以外だと実行ファイルのパスを得て何をしたいの?
0772デフォルトの名無しさん2007/08/29(水) 11:01:49
>>771
自分と同じところにある設定ファイルを見るとか
/etc?そんなもの見えやしねーぜ
0773デフォルトの名無しさん2007/08/29(水) 11:15:09
ホームディレクトリに置くなり、設定ファイルのパスを引数で渡すなりすれば。
ちゃんとインストールするならvar やら share/miscやら。
0774デフォルトの名無しさん2007/08/29(水) 11:31:34
>>771
自分自身を書き換えたい
0775デフォルトの名無しさん2007/08/29(水) 15:05:14
>>774
-EBUSY
0776デフォルトの名無しさん2007/08/29(水) 15:09:17
ああ、それで環境変数を使いたがるのか
07777412007/08/30(木) 12:30:53
本人がもう忘れてるのに、こんなに盛り上がってるとは驚き。
「その方法は間違いです」っていうのはcomp.unixから来てるんだろね。
それがUPFなんかに転載されて、真実であるかのように語り継がれる。
プロセスが自分自身のパスを知りたいなんて要求はいつでも起こることだと
思うけど、UPFにそう書いてあるからやってはいけませんと。
いかにもUNIX流だなぁと思った。
ところで、この話題はcomp.unixでも何度かフレームを巻き起こした過去が
あるけど、2chってネットニュースに似てるとこあるかもね。
07787412007/08/30(木) 12:35:52
>>755
前に書いたとおり、その方法は知ってる。
なんていうか、馬鹿ばっかりで驚きます。
0779デフォルトの名無しさん2007/08/30(木) 12:40:20
>>777
>>778
偽者まで現れたか。
0780デフォルトの名無しさん2007/08/30(木) 12:44:02
>>779
正真正銘本人だけど。
0781デフォルトの名無しさん2007/08/30(木) 12:59:44
>プロセスが自分自身のパスを知りたいなんて要求はいつでも起こることだと

釣りでないなら、何をしたいのか具体的にどうぞ。
0782デフォルトの名無しさん2007/08/30(木) 16:21:33
自分の実行ファイルが改ざんされていないかとか
0783デフォルトの名無しさん2007/08/30(木) 16:28:07
>>781
そりゃ釣りだろ。

そんな要求が起こるようなアホな状況をUNIX界隈の人間が作り出すはずがない。

どうせ去年までVB使ってましたとかいう低レベルな派遣クンだろ。
0784デフォルトの名無しさん2007/08/30(木) 17:09:42
>>778
> 前に書いたとおり、その方法は知ってる。
おまえが書いた中にはないだろ。
0785デフォルトの名無しさん2007/08/30(木) 17:28:34
1. configure 等でインストール先のパスをコードに埋め込んでビルド、
他の場所にバイナリを移動して動かした場合はサポート外。

2. 実行ファイルのパスは設定ファイルにユーザが書き、アプリは
それを参照する。もちろん設定ファイルそのものの位置はconfigure 等で
ビルド時に決定され、バイナリ中にハードコードされている。
(または $HOME/.hoge )

こういうのが unix 流っぽいと思うが
0786デフォルトの名無しさん2007/08/30(木) 17:42:32
ビルドするときに埋め込むパスは規定値であって、
全体的な設定やら、個人の設定やら、実行時の環境変数やら、
起動時のオプションやらで上書きできるのが普通っぽい気がする。
0787デフォルトの名無しさん2007/08/30(木) 17:52:03
ミニマムな仕様としては
「実行時のオプションで実行ファイルの位置を渡すことを必須をする」
でいいってことか。

usage:
hoge absolute-path-of-hoge arg1 [arg2...]

みたいな感じ
0788デフォルトの名無しさん2007/08/30(木) 18:24:32
実行ファイルの位置に依存するようなプログラムは行儀が悪いんだってば。
実行中に実行ファイルをunlinkすることさえ出来るのに。
0789デフォルトの名無しさん2007/08/30(木) 20:54:11
行儀が悪いというのは分かるが、unlink() されていた時の
エラー処理ルーチンを入れれば良いだけじゃない。
0790デフォルトの名無しさん2007/08/30(木) 21:16:38
そこまでして使いたい理由はなによ
0791デフォルトの名無しさん2007/08/30(木) 21:34:47
そこまでというほどの事じゃない。単なるエラー処理。
0792デフォルトの名無しさん2007/08/30(木) 21:54:51
unlink された後に違う実行ファイルが置かれていたら?
0793デフォルトの名無しさん2007/08/30(木) 22:03:54
「実行中に unlink されて違う実行ファイルが置かれた場合の動作は未定義です。」と
仕様書中に書いておくから問題無いよ。あと、実行中にキーボードにコーヒーをこぼした
場合の動作も未定義。他にも何か重箱の隅を突つく様な指摘があったら教えてくれ。
0794デフォルトの名無しさん2007/08/30(木) 22:05:31
使いたい理由はなによ
0795デフォルトの名無しさん2007/08/30(木) 22:20:56
>>790
自己増殖系。
0796デフォルトの名無しさん2007/08/30(木) 22:43:06
自己増殖を使いたい理由はなによ
0797デフォルトの名無しさん2007/08/30(木) 23:00:01
スレ違いの質問を続けている理由は何よ
0798デフォルトの名無しさん2007/08/30(木) 23:20:41
スレ違いの質問はどれよ
0799デフォルトの名無しさん2007/08/30(木) 23:35:46
このスレ自体板違い
0800デフォルトの名無しさん2007/08/30(木) 23:39:31
>>799
理由は?
0801デフォルトの名無しさん2007/08/31(金) 00:16:12
一言だけ言おう。
/usr/binにインストールできない使い捨てスクリプトはUNIX違反!
0802デフォルトの名無しさん2007/08/31(金) 00:25:19
WebサービスはUNIX違反
0803デフォルトの名無しさん2007/08/31(金) 00:36:34
UNIX は違反
0804デフォルトの名無しさん2007/08/31(金) 00:41:40
タイーホ
0805デフォルトの名無しさん2007/08/31(金) 01:52:25
ここまでの流れ的には、UNIXではインストールしないソフトウエアは
問題があるということになる。
ワンクリックでインストールなしで使いたい用途にはUNIXは不向き。
デスクトップ用のソリューションにはならないね。
未来永劫管理者を必要とするシステムで自己の利権を守り続けるのも
一つの道。
0806デフォルトの名無しさん2007/08/31(金) 02:43:34
管理を容易にすることへの抵抗があるなんてアホらしいんだが、
unixではそういう勢力があるからなあ
0807デフォルトの名無しさん2007/08/31(金) 02:43:41
fork()がないからWindowsは使えないと言い張るのと同じくらいアホ。
0808デフォルトの名無しさん2007/08/31(金) 03:00:05
>>807
fork()ってむしろ無いほうがいいと思うけど。
ってその話もう何回したことやら。
このスレの過去ログにもあるかもよ?
0809デフォルトの名無しさん2007/08/31(金) 03:05:29
まったく違うものを、無理やり同じ使い方しようとして、使えないとか言い出すのがアホだと言っている。
0810デフォルトの名無しさん2007/08/31(金) 03:45:23
>>809
いや、Windowsで使いたいなんて誰も思わないって。
せっかくWindowsはfork()使わなくていいようにできてるのに。
0811デフォルトの名無しさん2007/08/31(金) 07:38:26
Windowsはプロセス起動が遅すぎる
使い物にならないってのが実状
0812デフォルトの名無しさん2007/08/31(金) 08:11:01
>>807-810
会話が噛み合ってないw
0813デフォルトの名無しさん2007/08/31(金) 11:49:31
>>806
雇用の確保のために協力してくれ。頼む。
0814デフォルトの名無しさん2007/08/31(金) 16:28:39
>>805
/usr/lib/hoge/*を読み込む/usr/bin/hogeというプログラムがあったとしよう。
当然libのパスはプログラムパスから生成するもの。
ln /usr/bin/hoge ~/bin/hoge
されたらどうなる?
意図しないところ、勝手にユーザが置き換えたファイルを読み込むことになる
かもしれない。

プログラムのパスなんていくらでもいじれるものに頼るのは、セキュリティ上
のリスクも負うことになるということ。

> ここまでの流れ的には、UNIXではインストールしないソフトウエアは
> 問題があるということになる。
> ワンクリックでインストールなしで使いたい用途にはUNIXは不向き。

まぁ、善し悪しだね。
0815デフォルトの名無しさん2007/08/31(金) 16:46:02
>>814
>意図しないところ、勝手にユーザが置き換えたファイルを読み込むことになる
>かもしれない。

これこそまさに hoge の作者が意図していることなんじゃない?
単に君がその仕様に賛成していないってだけでさ。
0816デフォルトの名無しさん2007/08/31(金) 17:02:47
まあ誰も思想なんて聞いてないしな
できるかできないか が問題
0817デフォルトの名無しさん2007/08/31(金) 17:17:45
んだからポータブルな方法は無いっつうの。

他所の習慣を無理やり持ち込んでも苦痛だし不恰好になるだけだろうよ。
0818デフォルトの名無しさん2007/08/31(金) 21:32:05
>>817
ポータブルじゃなくても何でも出来ればいいよ
0819デフォルトの名無しさん2007/09/01(土) 00:33:05
やりたいと思った時に、実現出来ればそれで良い。
0820デフォルトの名無しさん2007/09/01(土) 01:14:17
>>817
ポータブルなコードはUNIX違反!
0821デフォルトの名無しさん2007/09/05(水) 21:30:25
pause()について質問です。

SIGALRMとSIGIOの両方にシグナルハンドラを設定してmain()本体で
while (1) {
pause()
}
としたのですが、シグナルが来てもpause()から制御が帰ってきません。
#正確に言うと一度だけ帰ってくるのだが二度目以降帰ってこない

ちなみに、SIGIOのハンドラを登録せず
SIGALRMのみなら何度でも帰ってきます。
また、SIGIOのシグナルハンドラはキーボード入力の度に呼び出されています。
pause()だけが返事をしないのです。

元々のソースコードは「Understanding Unix/Linux programming」
という本にあったサンプルプログラムなので、
Linuxでは動作すると思われるのですが、家のFreeBSD 6.1では動作しませんでした。

何か、心当たりがある方がいたら教えてください。
0822デフォルトの名無しさん2007/09/05(水) 22:06:37
>>821
シグナルをちゃんと再登録してる?
0823デフォルトの名無しさん2007/09/05(水) 22:07:10
シグナルハンドルだった
0824デフォルトの名無しさん2007/09/06(木) 01:07:48
>>821
BSD系ではシグナルの設定に古いsignal()インタフェースを使う場合、
ある種のシステムコールは割込みがあってもEINTRで中断せずに自動で再開する。

sigaction()を使えばデフォルトでは再開せず、オプションで再開も可能。

持っていればAPUEの10.5を参照するといい。
またはman 3 signalしてrestartという語を検索。
0825デフォルトの名無しさん2007/09/08(土) 14:44:50
563 :非決定性名無しさん:2007/09/03(月) 19:42:04
>「Windowsエンジニアなんて世の中に腐るほど居て競争率が高い。HP-UXみたいな
>商用UNIXならば十分、高いところを目指せる」
>はホントだね。

確かに「自分のキャリアプランはこんなもんだ、自分の人生なんてこんなもんだ」という
割りきりができるのならば、その発想は利口と言えるかもしれません。ただ、エンジニアというよりも、
それって社会人として恐ろしく後ろ向きな発想ですよね。僕はそのセリフを聞いて反射的に「ヤバイな」と思いましたけど、
これが新卒さんだったり、業界歴の浅い人だったりしたら鵜呑みにするしかないですよね。
そう考えると他人事ながらゾッとする話です。これが重役面接、最終面接だったら何も言いません。
企業の要職が実は技術的なバックボーンがスカスカという話はありがちな話ですのでたいして驚きません。
ただ、そういう人がエンジニアの技術スキルの部分を判定するのは犯罪だと思う次第。
人の人生をなんだと思っているのか、という気はします。
まぁ「素人さんを相手にいかにハッタリをかませるかも、面接の重要な要素」という考え方もできますけどね。
「Windowsに比べて市場競争率の低いUNIXならば天下を取れるのか」についてですが、たぶんそんなに簡単じゃないと思いますよ。
凄いやつはどこの世界にもいて、その凄さというのは絶対的です。この絶対数は競争する仲間の数なんて関係ありません。
その「凄い奴」になる道は、果てしなく遠いという点で言えばWindowsもUNIXも変わりありません。断言します。
UNIXの世界で極めることができる人は、Windowsの世界でも極められます。
0826デフォルトの名無しさん2007/09/08(土) 14:54:32
い、いきなりどうした?
0827デフォルトの名無しさん2007/09/08(土) 18:19:05
>「Windowsエンジニアなんて世の中に腐るほど居て競争率が高い。HP-UXみたいな
>商用UNIXならば十分、高いところを目指せる」
>はホントだね。

すげぇ悪気の無い悪質な発言だな
0828デフォルトの名無しさん2007/09/08(土) 20:39:34
需要の少ないところでは競争が少ないだけだな

極端な例でいえば、
大縄跳びとけんだまをしながら早口言葉を言う世界選手権(賞金も賞品もナシ)があったら
ダラダラ練習するだけでも、その世界では十分高いところを目指せるだろう

でも、人生をそれ一本に賭けるのは無謀
0829デフォルトの名無しさん2007/09/08(土) 22:28:25
UNIXから始めると大抵アンチマイクソになる傾向があると思うけど、
その人の人生にとっての道を狭めるという意味でUNIXはマイナスだよね。
真の競争に参加できなかったり使い辛いと馬鹿にされて精神をやられたり。
0830デフォルトの名無しさん2007/09/08(土) 23:38:38
Windows に染まっちゃうと Linux ですら辛いみたいだから、
どっちもどっちじゃないの。俺は脳味噌をやられるくらいなら
精神をやられた方が良いわ。
0831デフォルトの名無しさん2007/09/08(土) 23:48:22
特定のプラットフォームに拘ってるうちはまだまだ。
0832デフォルトの名無しさん2007/09/08(土) 23:57:52
>>830
Linuxに関わると金にならなくて精神をやられる
0833デフォルトの名無しさん2007/09/09(日) 00:27:58
どっちも行けますぜ
というかこの類の話だと、〜しかできませんというような
「能無し」宣伝をする人が多くて驚く
0834デフォルトの名無しさん2007/09/09(日) 01:08:24
>>831
俺もそう思うんだけど、中々こだわりは捨てられないわ。
今のままで面白い仕事にありつけなくなったらマイクロソフトも考えてみる。
0835デフォルトの名無しさん2007/09/09(日) 01:12:35
両方(というか色々)つなげる仕事が一番好き。
0836デフォルトの名無しさん2007/09/09(日) 01:23:40
>>828
>でも、人生をそれ一本に賭けるのは無謀

どのプラットフォームでも割と似た様な事してるから、
一個詳しくなっとけば大体潰しは効くよ。余程応用力に
欠ける場合は別だけど。
0837デフォルトの名無しさん2007/09/09(日) 03:06:56
Windowsで普段GUIアプリ書いてるとUNIXが哀れに見えるよな
0838デフォルトの名無しさん2007/09/09(日) 04:06:17
>>837
逆もまたしんなり
アレとコレ組み合わせれば出来るのに連携とる手段無いのかよ
みたいな
最近はWSHなりなんなりで強引にくっつけられるから
楽しいけど
0839デフォルトの名無しさん2007/09/09(日) 05:57:26
シェルを作ってみたいのですが、
小さいシェルのサンプルコードってどこかに無いでしょうか?
1000行くらいの物が希望なのですが。
0840デフォルトの名無しさん2007/09/09(日) 06:29:29
http://minnie.tuhs.org/UnixTree/V7/usr/src/cmd/sh/
0841デフォルトの名無しさん2007/09/09(日) 08:11:06
>>827
今でも超大型サーバ案件は、UNIXベースの方が多いから、
優秀なSI系エンジニアは、UNIXの方に集まっているはずだけどな。
失敗したら損害大きすぎてしゃれにならないし。
0842デフォルトの名無しさん2007/09/09(日) 08:12:06
>>839
「UNIXシステムコールプログラミング」
内容がちと古いが。
0843デフォルトの名無しさん2007/09/09(日) 09:38:25
>>840
main.cのIF、THEN、ELSE、FI等をみて驚いて
mac.hを見て歴史を感じた
0844デフォルトの名無しさん2007/09/09(日) 12:51:59
みなさん、有り難うございます。
>>842
UNIXシステムコール・プログラミング (単行本)
マーク ロックカインド (著), 福崎 俊博 (翻訳)
のほうですね。
C言語によるUNIXシステムプログラミング入門
詳解UNIXプログラミング
ではないんですね。
08458212007/09/09(日) 13:05:18
反応遅くなってすまぬ。
会社では絶対書き込めないんで……

>822
シグナルハンドラ自体はSIGIO、SIGALRMの両方とも
何度も呼び出されて実行されてる。
一応sigactionを試した時に手動再設定も試しましたが、状況は変わらず。

>824
sigactionでSA_RESTARTがある場合とない場合、
両方試したけどpause()が中断されない問題は解決せず。
そもそもpause()は単純にスリープ状態になるんであって
システムコール内ブロックとは違うんではなかろうかという気が。

色々ためしてみたんだが、
SIGIOのシグナルハンドラ内にあるgetch()をコメントアウトしてみると、
pause()から制御が帰って無限ループする。
無限ループ自体はmain()内で
while (1) {
pause();
}
ってやっていてシグナルハンドラ内でも入力がクリアされないから
正しいんだろうが、
シグナルハンドラ内でgetch()や標準入力からread()して
入力バッファをクリアすると二度目のpause()以降制御が帰らないっぽい。
訳わからん。

とりあえずシグナルは奥が深いと思った。
0846デフォルトの名無しさん2007/09/09(日) 13:18:11
いわゆるひとつのハッドノウハウでいうところの「奥が深い」
0847デフォルトの名無しさん2007/09/09(日) 15:59:26
>>846
>ハッド
?
0848デフォルトの名無しさん2007/09/09(日) 16:21:36
きっとカナタイパーが濁点打ちそこねたんだよ。
0849デフォルトの名無しさん2007/09/09(日) 16:27:14
カナタイパーがマクガイバーに見えたorz
0850デフォルトの名無しさん2007/09/09(日) 19:42:18
英語キーボードでも叩いてみせらぁ。
でもカナ入力だけはかんべんな。
0851デフォルトの名無しさん2007/09/09(日) 21:13:22
それ冒険野郎じゃなくて特攻野郎w
0852デフォルトの名無しさん2007/09/13(木) 20:51:45
ディレクトリの画像を読み込むにはどうすれば良いですか?
0853デフォルトの名無しさん2007/09/13(木) 23:43:52
ディレクトリの画像って言うのがいまいちわからないけど、
指定したディレクトリにある画像ファイルを、読み込みたいって言う話であれば、
opendir, readdir, stat, open, readぐらいで出来るんじゃないか?
画像かどうかわからないなら、ファイルの先頭見ればわかるんじゃない?

読んでどうするのか知らんが。
0854デフォルトの名無しさん2007/09/14(金) 13:09:27
pythonとか高レベルな言語使えばいいよ
0855デフォルトの名無しさん2007/09/24(月) 05:01:36
DBMの最古の実装とかその解説ってどこに
ありますかね?
0856デフォルトの名無しさん2007/09/24(月) 09:09:14
DBMって何?
0857デフォルトの名無しさん2007/09/24(月) 10:01:07
http://minnie.tuhs.org/UnixTree/V7/usr/src/libdbm/
http://pc11.2ch.net/test/read.cgi/db/1057023401/
0858デフォルトの名無しさん2007/10/02(火) 10:05:54
当方Linuxのi386 GNU/Linux 2.6.18-1.2798.fc6を使っとります.
TCPでサーバを書いてるのですが,多量にクライアントが接続すると
サーバ側でacceptが失敗します.
短時間で接続切断を繰り返す類のものなのですが,acceptから返される
ディスクリプタをきちんとclose()してるにもかかわらず1012回前後の接続切断
の繰り返しで大体acceptが-1を返して失敗します.
closeしていても,一プロセスあたりに使えるディスクリプタの数って限界があるのでしょうか?
どうやったら失敗しないようにできるでしょうか?
0859デフォルトの名無しさん2007/10/02(火) 11:25:00
acceptが-1を返す?
errnoを見れば何かわかるんじゃない?
0860デフォルトの名無しさん2007/10/02(火) 13:26:57
1年くらい前に同様の質問があって、
結局はcloseしてないってオチだったよね。
0861デフォルトの名無しさん2007/10/02(火) 13:47:57
思い込みのデバッグは一番厄介だ
0862デフォルトの名無しさん2007/10/02(火) 14:00:41
errnoカワイソス
0863デフォルトの名無しさん2007/10/02(火) 21:36:56
この間ネットワークスレで見たばっか
0864デフォルトの名無しさん2007/10/02(火) 21:59:41
setrlimit(RLIMIT_NOFILE)で設定汁。
あと、そのサーバが軌道中に、/proc/サーバのPID/fd をlsしてごらん。
close忘れがあるかわかる。valgrind --track-fds=yesでもいいけど。
0865デフォルトの名無しさん2007/10/02(火) 23:38:42
errnoカワイソス
0866デフォルトの名無しさん2007/10/03(水) 01:26:23
>>864
なにこの気違い
0867デフォルトの名無しさん2007/10/03(水) 01:34:37
やっぱタスクマネージャがないOSじゃダメだよな
0868デフォルトの名無しさん2007/10/03(水) 07:25:19
まあnetstatしてみればいいじゃん。
0869デフォルトの名無しさん2007/10/03(水) 09:26:50
>>866
どこが?
0870デフォルトの名無しさん2007/10/03(水) 18:19:27
errnoカワイソス
0871デフォルトの名無しさん2007/10/06(土) 19:43:57
age
0872デフォルトの名無しさん2007/10/08(月) 01:23:49
exitって
exit(1)
exit(2)
exit(3)
exit(-1)
と引数が色々有りますけれど、
どれが正しいの?
0873デフォルトの名無しさん2007/10/08(月) 01:25:54
みんな正しくてみんな良い
0874デフォルトの名無しさん2007/10/08(月) 09:32:54
>>872
$ cat foo.c
#include <stdlib.h>
int main(int argc, char *argv[]) {
exit(atoi(argv[1])); // 引数チェックなしよ
}
$ gcc foo.c
$ ./a.out 13
$ echo $?
13
0875デフォルトの名無しさん2007/10/12(金) 23:17:50
FreeBSD 6.2上のgcc3.4.6でTCPのサーバーを書いています。
単純な echo サーバーをベースに、fork()でマルチプロセスにしてみたんですが、
この子プロセス同士を通信させて、一つの子プロセスが受け取ったメッセージを、
他の子プロセスにつながってるクライアント全てにも送って、チャットサーバーみたいにしてみたいのですが、
こんな時ってどんな風に実装するものなのでしょうか?
0876デフォルトの名無しさん2007/10/13(土) 09:20:04
A. プロセスじゃなく、スレッドに書き換える。
B. プロセス間通信を使う。
0877デフォルトの名無しさん2007/10/13(土) 09:43:02
その昔、select使ってシングルスレッドで書いたことならある。
0878デフォルトの名無しさん2007/10/14(日) 13:17:49
http://news21.2ch.net/test/read.cgi/bizplus/1192331270/
0879デフォルトの名無しさん2007/10/15(月) 13:30:08
>>875
それぞれのプロセスにソケット持たせればいいよ
0880デフォルトの名無しさん2007/10/17(水) 00:15:38
BSD以外のOSで
eth0からeth1のソケットバッファに
データを直接DMA経由で転送する方法
しらないですか?
0881デフォルトの名無しさん2007/10/17(水) 02:33:55
>>880
ハードウェアとOSに依存するので一般的な解は無い。
0882デフォルトの名無しさん2007/10/17(水) 02:41:30
>>880
つーかBSDだとなんかやり方あんのかよ。
0883デフォルトの名無しさん2007/10/17(水) 08:39:20
zerocopy厨
0884デフォルトの名無しさん2007/10/17(水) 10:08:49
LinuxでsocketつかったServerを書いているのですが
ちょっとバグがあってServerが強制終了されると,同一ポートを
bindできなくなります.
再起動すれば直るのですが,落ちるたびに再起動するのも時間がもったいないので
再起動せずにもう一度同一ポートにbindできるようにする方法は無いでしょうか?
0885デフォルトの名無しさん2007/10/17(水) 10:17:51
しばらくまて
0886デフォルトの名無しさん2007/10/17(水) 11:15:46
>>884
FAQくらい読め。
0887デフォルトの名無しさん2007/10/17(水) 11:58:55
SO_REUSEADDR
0888デフォルトの名無しさん2007/10/17(水) 14:03:07
884はなぜそうなっているんだろうという疑問を抱かずに
OSの不具合か何かだと思ってたのかしらん。
08898842007/10/17(水) 14:07:40
>>888
そりゃあんたsocketオープンしたままなんだから
closeするまではポートは使用されていることになってるでしょう、常識的に考えて...

誰が不都合でBugfixしてくださいなんていいましたか?w
0890デフォルトの名無しさん2007/10/17(水) 14:29:18
かみつく前にもうちょっと勉強しましょう。
0891デフォルトの名無しさん2007/10/17(水) 14:35:08
>>886-887
ありがとうございます.対処方法がわかりました.

>>890
噛み付く前にって...わけわかんないです.あんた国語の成績悪そうですね.
0892デフォルトの名無しさん2007/10/17(水) 14:55:07
>>891
>>889 がひどく見当違いで間違った内容だから>>890の様に言われているのです。
やたら他人を噛むのはやめて、自分の側が間違っている可能性も考えましょう。
08938872007/10/17(水) 18:17:52
既知外だったのか相手して損したorz
0894デフォルトの名無しさん2007/10/17(水) 19:18:21
ネットワークプログラミング相談室のテンプレから

Programming UNIX Socket FAQ (日本語訳)
 http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
Winsock Programmer's FAQ (日本語訳)
 http://www.kt.rim.or.jp/~ksk/wskfaq-ja/
0895デフォルトの名無しさん2007/10/17(水) 19:30:58
>>892
いやあのさ、俺が>>889->>891の発言に至るまでのフローを見ろよ。
俺はTCPの状態遷移を理解するのが目的ではない。

ようはTIME_WAIT状態でもbindする方法はないか?
と聞いたにもかかわらず、予想斜め上を行くようなわけのわか
らん>>888の回答が意味不明だから「わけわかんないです」と
いってるわけです。お分かりいただけましたでしょうか?

誰も自分が100%正しいなんて妄信してねーしw
0896デフォルトの名無しさん2007/10/17(水) 19:48:47
>>895
君と>>888は同類。なんにでも噛み付く既知外。
0897デフォルトの名無しさん2007/10/17(水) 19:52:33
UNIX屋さんは変な奴が多いなぁ
0898デフォルトの名無しさん2007/10/17(水) 19:56:16
>>895
まともな回答をしてくれた>>887でさえ君の態度に呆れてる。
その理由を考えたら?
0899デフォルトの名無しさん2007/10/17(水) 19:59:34
>>898
お前が考えろよ
>>885>>886>>887
と軒並みまともな回答が続く中
あんただけあきらかに異常だぜ?
0900デフォルトの名無しさん2007/10/17(水) 20:06:43
ま、茶でも飲むかカルシウムでも齧って落ち着けや
もとはただの些細な行き違いだろ?

周りが皆敵に見え始めたら危ないぜ?
0901デフォルトの名無しさん2007/10/17(水) 23:24:19
BSD以外のOSで
eth0からeth1のソケットバッファに
データを直接DMA経由で転送する方法
しらないですか?
0902デフォルトの名無しさん2007/10/17(水) 23:32:40
>>901
ドライバ書くしかない。
後マルチポストはやめろ
0903デフォルトの名無しさん2007/10/18(木) 00:23:54
おまえら同類見つけるの上手すぎ
俺にもその能力よこせや
0904デフォルトの名無しさん2007/10/18(木) 13:02:04
zerocopy?
0905デフォルトの名無しさん2007/10/18(木) 17:25:34
> ちょっとバグがあってServerが強制終了されると


> 再起動すれば直る
> 落ちるたびに再起動するのも時間がもったいない

↓

> そりゃあんたsocketオープンしたままなんだから
> closeするまではポートは使用されていることになってるでしょう、常識的に考えて...

↓

> ようはTIME_WAIT状態でもbindする方法はないか?
> と聞いたにもかかわらず

面白い……。

>>903
こんな感じで。
0906デフォルトの名無しさん2007/10/18(木) 18:21:19
勉強したのは偉い!
後は性格を直さないと!
0907デフォルトの名無しさん2007/10/18(木) 20:29:44
>>888を誇張した例を挙げるなら
「VBで平方根を求めるのはどうしたらいいですか?」
という問いに対してまずニュートン法を説明した後
そもそもなぜこのアルゴリズムが成り立つのがと
得意げに証明し始めるようなもの.

あきらかに質問の空気を読めてないし,誰もそんなこと聞いてない.

お前部下からかなり煙たがられてるだろ?w
0908デフォルトの名無しさん2007/10/18(木) 21:06:42
>>876
B. はpipe(2)とかでやってみましょうかねえ

>>879
PF_UNIXとかでやるってことですか。

pipeとどっちでやってみるかなあ。
どっちも勉強してみます〜。
0909デフォルトの名無しさん2007/10/18(木) 21:33:31
>>908
勉強でやってることなら好きにすればいいが、そういうサーバなら、
最初からselect/poll/epoll/kqueueの類を使ってシングルプロセスシングルスレッド
で作るほうがずっと楽でパフォーマンスもいいぞ
0910デフォルトの名無しさん2007/10/18(木) 22:43:43
>>909
楽にできてなおかつパフォーマンスまでよくなるなら
そっちにしておきたいと思います

実のところ全体的に勉強不足で(今までシステムコールなんか呼んだこと無かった)
fork()とかしてみたらよさそうだな〜ぐらいの感じでした。
ありがとうございます。
0911デフォルトの名無しさん2007/10/18(木) 22:55:17
>>910
たんなるechoサーバなら、forkサーバで簡単に書けるんだが、
chatサーバとなると、forkしちゃうと子の間で連携するのにIPCが必要になるし、
それぞれの子の通信相手が複数(他の子とクライアント)になるんで、
どのみちI/Oの多重化を考えないといけなくなる。

それなら>>909の方針でやったほうがずっといいって話ね。
0912デフォルトの名無しさん2007/10/19(金) 07:57:13
>>911
なるほどー。selectあたりを勉強します。ありがとうございました〜。
0913デフォルトの名無しさん2007/10/25(木) 21:14:07
Linux初心者なのですが、UDP送信について伺いたいです。
ネットで検索しても以下のようなサンプルばかりなので教えて下さい。
以下のサンプルだと、送信先ポート番号は設定できますが送信元ポート番号
はどのようにして設定するのでしょうか?
以下を実行してLANモニターするとポート2048->ポート6001となります。
ちなみにLinux-2.6.15です。

struct sockaddr_in addr;

sock = socket(AF_INET, SOCK_DGRAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(6001); //Dest port
addr.sin_addr.s_addr = inet_addr("192.168.100.1" );
sendto( sock, &data, Leng, 0, (struct sockaddr *)&addr, sizeof(addr));

0914デフォルトの名無しさん2007/10/25(木) 21:34:34
2048が何か調べてみたら
0915デフォルトの名無しさん2007/10/25(木) 21:35:39
>>913みえrない
0916デフォルトの名無しさん2007/10/25(木) 21:36:26
>>913
bind()
0917デフォルトの名無しさん2007/10/25(木) 22:12:46
>>916
有難う御座いました。うまく期待通りに動作しました。
0918デフォルトの名無しさん2007/10/26(金) 08:23:59
192.168.100.1は、わたしが使っているIPアドレスですので勝手に使わないでください。
0919デフォルトの名無しさん2007/10/26(金) 09:05:49
はいはいよかったね、次どうぞ↓
0920デフォルトの名無しさんNGNG?2BP(125)
いえいえ、192.168.100.1は私のIPです。勝手に使わないでください。
0921デフォルトの名無しさん2007/10/26(金) 09:26:16
example.comは私が育てた
0922デフォルトの名無しさん2007/10/26(金) 22:01:43
俺のLdapの中に入ってくるんじゃねー世
0923デフォルトの名無しさん2007/10/27(土) 00:16:57
某一部上場企業のネットワーク部門の運用マニュアルで
192.1.1.0/24 なんつーのが平気で使われてたな
0924デフォルトの名無しさん2007/10/27(土) 01:58:05
上場企業だから技術的な常識を備えているという訳でもあるまい
毟られる側だし
0925デフォルトの名無しさん2007/10/27(土) 06:16:19
あぁ
だから悪徳SI業者がはびこるのか
0926デフォルトの名無しさん2007/11/11(日) 00:02:25
Mac OS X(10.4.10)なのですがBSDレベルの事なのでここで質問させて下さい。

root権限で実行されるプログラム内で、ログインユーザ権限で行いたい処理があり、
-----------------------------------------------------
uid_t rootUID = geteuid(); //0が取れる
uid_t loginUID = getuid(); //501とかが取れる
if( seteuid( loginUID ) == 0 ){ //実効ユーザIDをログインユーザにする
   ここで何かログインユーザ権限で行いたい処理
}
if( seteuid( rootUID ) != 0 ){ //実効ユーザIDをrootに戻す
  printf( "error !!" );
  exit(0);
}
-----------------------------------------------------
としました。
一度ログインユーザ権限にしてしまったのだから最後の seteuid( rootUID );
は失敗するのでは?と考えていたのですが、実際問題ありませんでした。

これは、起動時のeuidには戻すことが可能、正確な動作。と理解していいのでしょうか?
それともOSのバグか何かでたまたま動いているだけなのでしょうか?
0927デフォルトの名無しさん2007/11/11(日) 13:23:42
元のが保存してあって、元に戻すことは可能。これは仕様。

具体的には、
/usr/include/ucred.hのstruct ucredの
uid_t cr_svuid; /* saved user id */

gidも同じ。

というかお前seteuid(2)読んでないだろ。読めよ。
http://freebsd4-jman.kandk.co.jp/2/seteuid.2.html
0928デフォルトの名無しさん2007/11/11(日) 14:52:44
linuxの話題はだめ?
0929デフォルトの名無しさん2007/11/11(日) 16:21:27
プログラミングならいいよ。
0930デフォルトの名無しさん2007/11/11(日) 17:13:26
-prefer-pic ってlibtoolのオプション?GCCのオプション?
どっちのマニュアルにも載ってない…
ググってもコマンドラインが引っかかるばっかりでわかりません
0931デフォルトの名無しさん2007/11/11(日) 17:38:15
libtoolだよ。
/usr/bin/libtool読んでくれ。-xで実行するか。
0932デフォルトの名無しさん2007/11/11(日) 20:29:16
スレタイを「UNIX/LINUXプログラミング質問すれ」に変えてもらえませんか?
0933デフォルトの名無しさん2007/11/11(日) 20:43:53
犬厨うぜえ
unixなんて狭い箱庭なんだから1スレで十分なんだよ
0934デフォルトの名無しさん2007/11/11(日) 20:47:40
>>927
言われてみれば読んでませんでした
manはどうしても読むのを忘れるな・・・

ありがとうございました
0935デフォルトの名無しさん2007/11/11(日) 20:49:40
普通はググるよりも前に読むぞ・・・
0936デフォルトの名無しさん2007/11/11(日) 21:37:15
API使うならリファレンス読むのは当たり前ですよね・・・
どうもmanのあの英文は避けてしまう・・・>>927のサイトは使えそうです
以後気をつけます
0937デフォルトの名無しさん2007/11/11(日) 22:19:45
>>927のはググッたら最初に出て来たから書いたけど。
freebsdのサイトでもいいよ。
http://www.jp.freebsd.org/man-jp/search.html
日本語に関しては最初の注意書を良く読んでくれ。
DarwinはまだFreeBSD4ベースのはず。(詳しい人フォロー頼む)
09388752007/11/11(日) 22:44:15
どうも、この前selectを教えてもらったものです。
あれからだいぶ時間かかってしまいましたがなんとか形になりました。
ありがとうございます。

いやあ、selectってすごいですねー。
0939デフォルトの名無しさん2007/11/11(日) 23:00:03
水野晴郎かよ
0940デフォルトの名無しさん2007/11/13(火) 21:12:55
SedかAwk(バージョンはGNU)を使って、次のことをしたいのですが…

1.Passwdファイルのログイン・ユーザー名の欄とホームダイレクトリのショートパスネームの部分を比較して、
ログイン・ユーザー名のほうが長ければそのラインを表示する。

2.Passwdファイルのラインが含む文字(すべてのシンボルを含む)数を各ライン毎に計算して、
含まれる文字数が素数であれば、そのラインを表示する。

コマンドプロンプトにどんなコマンドを入力すれば、これらができるでしょうか…?
わかる方いたらお教えください。
0941デフォルトの名無しさん2007/11/13(火) 21:40:32
Question:

以下を sed または gawk で実現する事が出来ますか
出来るのであればコードを見せて下さい

1. /etc/passwd のエントリの内、ユーザ名がディレクトリ名より長い物を抜き出す
2. /etc/passwd のエントリの文字数が素数である物を抜き出す

Answer:

1. # awk -F: '{if(length($1) > length($6)) print $0}' /etc/passwd | grep -v '^#'
2. # awk -F: '{if(length($0) == 1 || length($0) == 2 || length($0) == 3) print $0}' /etc/passwd | grep -v '^#'

ただし、1 は /etc/passwd のエントリの並びに依存する
2 は /etc/passwd の文字数の最大値まで素数判定を追加する必要がある

Comment:

passwd は Passwd ではなく passwd、ダイレクトリじゃなくてディレクトリ、
ショートパスネームって M$ 用語?
0942デフォルトの名無しさん2007/11/13(火) 21:40:50
>>940 異様な質問だな。それ宿題?
0943デフォルトの名無しさん2007/11/13(火) 21:42:54
用語法が少し変だから宿題じゃないと思う
0944デフォルトの名無しさん2007/11/13(火) 22:48:32
ショートパスネームってのはFAT16のことかな!?
0945デフォルトの名無しさん2007/11/13(火) 23:51:56
エスパー参上!
たぶん/home/fooのfooの部分のことと思わ〜れ
0946デフォルトの名無しさん2007/11/14(水) 00:04:36
TCPクライアントPGで
GET 〜.png HTTP/1.1
で

臼NG

と表示されるんだが、どうやったらデータが表示されるんだ…
0947デフォルトの名無しさん2007/11/14(水) 00:06:20
エスパー、仕事だよ!
0948デフォルトの名無しさん2007/11/14(水) 00:08:29
ネットワークスレに逝け
0949デフォルトの名無しさん2007/11/14(水) 00:10:25
>>946
それをファイルに保存して画像ビューアで見ればいいだろ
0950デフォルトの名無しさん2007/11/14(水) 00:14:05
エスパー再び^3!
>>946
utf-8のターミナルですね。
0951デフォルトの名無しさん2007/11/14(水) 00:15:09
うすんぐ
0952デフォルトの名無しさん2007/11/14(水) 00:22:35

>>949
レスありがとう
見たいのは画像変換前のデータなんだ

>>950 エスパー
レスありがとう
悪い、ググッタがなんのことかさっぱりだ
0953デフォルトの名無しさん2007/11/14(水) 00:26:25
>見たいのは画像変換前のデータなんだ
エスパー!頼むぞ!
0954デフォルトの名無しさん2007/11/14(水) 00:27:00
>>952
PNG画像データの先頭には、4バイトの識別子として臼NGが埋め込まれているんだ。
つまり、そこでGETできたものは画像データそのものってこと。
0955デフォルトの名無しさん2007/11/14(水) 00:27:13
ああ、あとHTTP1.1はHOSTヘッダが必須だから忘れないようにな。
0956デフォルトの名無しさん2007/11/14(水) 00:32:07
>>954 エスパー
とても分かりやすい、ありがとう。

ということはheadを除いた画像データは

『臼NG
・・・
・・・
』
となっていて ・・・ の部分が実際のデータということだろ?
その・・・(実際のデータ)が表示されないんだよ 臼NGで終わり
どういうことだ?
0957デフォルトの名無しさん2007/11/14(水) 00:33:26
>>955
それは大丈夫、ありがとう
GET /index.html HTTP/1.1
とかだと問題ないのだが…
0958デフォルトの名無しさん2007/11/14(水) 00:36:44
>>956
0x00 がきてもデータ受信を終了しないようにすればいいんじゃない?
0959デフォルトの名無しさん2007/11/14(水) 00:40:24
>>956
あー、テキストとして見ているだろ。それだと、\x89PNG のマジックナンバーに続いて
\r\n\x1a\n の意図的な制御コードの後が \0 になっているから終端されてしまうよ。
0960デフォルトの名無しさん2007/11/14(水) 00:43:51
>>958

今ソース見直したんだが、
while抜ける時の条件が

if( (n = recv( s, recv_buf, BUFSIZE-1, 0)) <= 0)

なんだが、これだと0x00がきても抜けなくないか?
recvのreturnって確か受信したデータサイズだよな
0961デフォルトの名無しさん2007/11/14(水) 00:45:45
それを表示するときはどうなのよ
0962デフォルトの名無しさん2007/11/14(水) 00:49:34
>>961 >>959
それを表示させる時に使ってるのが >>960 なんだ

while(...){
if( (n = recv( s, recv_buf, BUFSIZE-1, 0)) <= 0) 抜ける
  else print recv_buf
}
みたいな感じなんだ
0963デフォルトの名無しさん2007/11/14(水) 00:50:41
print recv_buf

ってなんだよ
0964デフォルトの名無しさん2007/11/14(水) 00:51:38
>>961
スゲー!
0965デフォルトの名無しさん2007/11/14(水) 00:52:37
>>963

printf("%s",recv_buf);
だ すまぬ
0966デフォルトの名無しさん2007/11/14(水) 00:54:33
>>965
for(int i=0;i<n;i++) printf("%02X", recv_buf[i]);
0967デフォルトの名無しさん2007/11/14(水) 00:55:17
そりゃぁ、ナルターミネートされるわさ。
0968デフォルトの名無しさん2007/11/14(水) 01:05:14
できそうだ(^^)
皆ありがとう、感謝してる!!

分からないことあったらまた来ていいか?
0969デフォルトの名無しさん2007/11/14(水) 01:14:25
エスパーって凄い
俺は回答を見て質問の意味が理解できた
0970デフォルトの名無しさん2007/11/14(水) 01:18:30
>>968
もっと勉強しろ
0971デフォルトの名無しさん2007/11/14(水) 01:19:47
なんか妙な一体感があって面白かったw
0972デフォルトの名無しさん2007/11/14(水) 01:22:10
>>970
もっと勉強しときますわ
サンクス(^^)
0973デフォルトの名無しさん2007/11/14(水) 08:57:08
>>950
エスパー、お前が透視するのはそこじゃないだろ。
それからShift_JISの端末な。
0974デフォルトの名無しさん2007/11/19(月) 17:48:53
外部から特定ポートへの接続を出来なくする、プログラムを
Cで作りたいのですが
どのように実装するのでしょうか。
0975デフォルトの名無しさん2007/11/19(月) 17:55:45
>>974
ipfwやpfみたいなプログラム書けばいいよ。
ソースも公開されてるのでお手本にすれ。
0976デフォルトの名無しさん2007/11/19(月) 18:03:00
単にlistenしなければ良いのでは?
0977デフォルトの名無しさん2007/11/19(月) 18:28:36
先にそのポートを開いてしまえば良いのでは?
0978デフォルトの名無しさん2007/11/19(月) 21:16:25
返事遅れました。
確かにリスンしないなら良いのですが、
既存のサーバーは変更しないで、
ある時間アクセス拒否したいので、外部からポートを塞ぎたい。
という感じです。
元々処理はackを返さないので、入口さえ
塞げたら良いと考えているのですが。
0979デフォルトの名無しさん2007/11/19(月) 21:35:59
じゃあ別にCでなんか書かなくても普通にpfの類で設定できるんじゃないの?
0980デフォルトの名無しさん2007/11/19(月) 21:51:33
既存のFWより柔軟にやりたいんじゃね?
0981デフォルトの名無しさん2007/11/19(月) 22:16:44
最悪既存のFWを起動停止なのですが、アクセス拒否は別の
常駐プロスから実行するので
組み込みたいと考えてます。

0982デフォルトの名無しさん2007/11/20(火) 00:54:03
>>981
>>975
0983デフォルトの名無しさん2007/11/21(水) 01:09:31
デバッガとかの使い方を全く知らないのですが、簡単に使えるバッファオーバーフローのチェックツールはありませんか?
0984デフォルトの名無しさん2007/11/21(水) 01:17:30
>>983
目
0985デフォルトの名無しさん2007/11/21(水) 02:45:10
>>983
愛
0986デフォルトの名無しさん2007/11/21(水) 21:33:54
efence とか?
0987デフォルトの名無しさん2007/11/21(水) 23:05:50
>>983
目次だけ見れば十分だと思うので
ttp://www.oreilly.co.jp/books/4873112885/toc.html
09889402007/11/23(金) 07:49:53
>>941
ありがとうございました。
1は、
cat /etc/passwd | rev | awk -F: '{split ($2, array, "/"); if ( length($NF) > length(array[1])) print;}' | rev
で、できました。

>>942
はい。そうです。

>>945
エスパーさん。
はい、その通りです。
レス数が950を超えています。1000を超えると書き込みができなくなります。