[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 12:29 / Filesize : 215 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:名無し募集中。。。 [05/01/15 02:18:37]
UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド

前スレ
Part4 pc5.2ch.net/test/read.cgi/tech/1095843584/
Part3 pc5.2ch.net/test/read.cgi/tech/1085930894/
Part2 pc5.2ch.net/test/read.cgi/tech/1055110889/
Part1 pc2.2ch.net/tech/kako/992/992057422.html

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

関連スレ
Cygwin使っている人いますか? その13 (UNIX板)
pc5.2ch.net/test/read.cgi/unix/1099157755/
Cygwin使っている人いますか? 3 (Windows板)
pc5.2ch.net/test/read.cgi/win/1090131123/

関連板
pc5.2ch.net/unix/
pc5.2ch.net/linux/


29 名前:デフォルトの名無しさん mailto:sage [05/02/04 12:43:16 ]
>>28
・使えるんじゃない?
・そうとは思わないけど。

30 名前:デフォルトの名無しさん mailto:sage [05/02/04 16:48:48 ]
>>28
POSIX見れ。


31 名前:デフォルトの名無しさん mailto:sage [05/02/04 18:47:12 ]
>>30
POSIXに準拠してないOSがあったりするのがUNIXの難しさなのではないですか?

32 名前:デフォルトの名無しさん mailto:sage [05/02/04 19:12:34 ]
>>31
いまあるメジャーなUNIXでPOSIXのIPCが使えないのってどれ?


33 名前:デフォルトの名無しさん mailto:sage [05/02/04 19:23:40 ]
>>32
それが分らないから質問してるんですけど。

34 名前:デフォルトの名無しさん mailto:sage [05/02/04 20:10:02 ]
>>33
そんなのあるのか? って話だと思うけど。
31があると断言しちゃってるけど実際どれよ、FUDじゃねえの? って話じゃないかと。

APUE見りゃちゃんとPOSIXとSysVとBSDで事情がある場合はちゃんと断りがあって、
その上でIPCの機能の記述が通じない「メジャーなUNIX」って一体何を想定してるのか。
元質問者の無知はしょうがないとしても31はちゃんと明確に指摘すべきだろ。


35 名前:デフォルトの名無しさん mailto:sage [05/02/04 21:24:26 ]
>>34
あんまり厳密な話をしてるつもりはなったのですが、
例えば、GLIBC-2.3.4には>>2にあるPOSIXのドキュメントに載っている
(www.opengroup.org/onlinepubs/009695399/idx/head.html)
<trace.h>がなかったりします。こんな感じで微妙に基準を満たしてなかったり
とかするのかなと思ってました。手元にはLinuxしかないので、
*BSDや商用UNIXのことは分りません。

36 名前:デフォルトの名無しさん mailto:sage [05/02/04 21:36:50 ]
すべてのUNIXで動作するコードを書きたいだけなのか?

37 名前:デフォルトの名無しさん mailto:sage [05/02/04 21:45:02 ]
>>36
そういうわけではないですけど、何らかの現実的なガイドライン
みたいなのがあれば、それを知りたいなあと思っただけです。
本来ならコード読んで体得するべきで怠けているだけなのは分ってます。



38 名前:デフォルトの名無しさん mailto:sage [05/02/05 01:21:14 ]
System V IPCがないUNIXがあったら俺の所へ持ってこい!

39 名前:デフォルトの名無しさん [05/02/05 07:29:32 ]
アホな質問なんですが、
APUEの10.7,10.8のサンプルコードってちゃんと動きますか?
Linux2.6では期待した通りには動きません。
straceで見ると、 readシステムコール中にシグナルが発生しても
普通にreadに戻るだけなんです。

40 名前:デフォルトの名無しさん [05/02/05 07:31:19 ]
LinuxはLinux Is Not UniXの略だからなぁ。

41 名前:デフォルトの名無しさん mailto:sage [05/02/05 07:40:35 ]
#include<signal.h>
#include<unistd.h>
static void func(){return;}
int main(){
int n=0;
char line[256];
signal(SIGALRM,func);
alarm(10);
n=read(0,line,256);
alarm(0);
write(1,line,n);
}

$strace ./a.out
...
rt_sigaction(SIGALRM, {0x8048424, [ALRM], SA_RESTORER|SA_RESTART, 0x40046678}, {SIG_DFL}, 8) = 0
alarm(10) = 0
read(0, 0xbffff980, 256) = ? ERESTARTSYS (To be restarted)
--- SIGALRM (Alarm clock) @ 0 (0) ---
sigreturn() = ? (mask now [RTMIN])
read(0,

select使えばいいんだろうけど。

42 名前:デフォルトの名無しさん mailto:sage [05/02/05 08:12:12 ]
>>41
ソースの先頭で
#define _XOPEN_SOURCE


43 名前:デフォルトの名無しさん mailto:sage [05/02/05 08:26:07 ]
>>42
ありがとうございます。

rt_sigaction(SIGALRM, {0x8048434, [], SA_RESTORER|SA_INTERRUPT|SA_NOMASK|SA_ONESHOT, 0x40046678}, {SIG_DFL}, 8) = 0

>>41と違ってrt_sigactionの引数としてSA_RESTARTの代わりにSA_INTERRUPTが入ってますね。

44 名前:デフォルトの名無しさん mailto:sage [05/02/05 09:29:35 ]
10.12のようにsigaction()でstruct sigactionのsa_flagsに
フラグをきっちり指定してやるのが正しいということですな。
signal()のデフォルトの動作はSysV,4.3BSDはINTERRUCT、
SunOS,LinuxはRESTARTということですな。

お騒がせしました。

45 名前:デフォルトの名無しさん mailto:sage [05/02/06 00:07:47 ]
4.xBSDが、restartable system callのご先祖様です。

46 名前:デフォルトの名無しさん mailto:sage [05/02/06 03:52:38 ]
>>45
なるほどそうなんですか。
でも、restartable system callを一番最初に実装したのが4.xBSDだとしても、
ここでの、互換性の話を含むsignalの挙動の話はまた別のですよね?

そもそも上のようなケースがあるから、UNIXではsignal()はもう使うべきではないですね。
マルチプロセスを想定していない、ANSI C特有の関数としてのsignal(),raise()とみなす
べきなのでしょう。UNIXではsigaction(),kill()が正しい。

47 名前:42=45 mailto:sage [05/02/06 09:53:05 ]
glibc$ man 2 signal
(略)
Trying to change the semantics of this call using defines and includes
is not a good idea. It is better to avoid signal altogether, and use
sigaction(2) instead.

signal(2)だけじゃ扱いきれないことが多いですからね。
4.2BSDの頃にはこういう常識が形成されていたと思います。
今手元にないんですが、stevensの"Advanced"にも書いてあったと思います。



48 名前:デフォルトの名無しさん [05/02/08 13:20:03 ]
sagarisugi


49 名前:デフォルトの名無しさん [05/02/08 15:18:19 ]
XTIの方がUNIXのインターフェイスらすいと思うのですが、
これってもう誰も使ってないんですか?

50 名前:デフォルトの名無しさん [05/02/08 15:57:05 ]
らすい?

51 名前:デフォルトの名無しさん [05/02/08 22:40:00 ]
pthread使ってるからpopen()とか使うな、っつってるのに使いやがったアホ(上司と同義)のために、
「こう書き換えろう゛ぉけっ!」とアドバイスしたいのですが、どういう書き換え方があるでしょうか?

52 名前:デフォルトの名無しさん mailto:sage [05/02/08 22:45:01 ]
上司を部下に書き換えるとか、勤務先を書き換えるとか

53 名前:デフォルトの名無しさん [05/02/08 22:50:45 ]
マジレス希望です。

54 名前:デフォルトの名無しさん mailto:sage [05/02/09 00:02:05 ]
私は popen 使うならシェルからパイプ使えと思う人です

55 名前:デフォルトの名無しさん [05/02/09 01:06:27 ]
プロセスを走らせながらDLLって書き換えられますでしょうか。。。
dlopen()等でそういった書き換えが考慮されていないプロセスです。

56 名前:デフォルトの名無しさん mailto:sage [05/02/09 09:06:47 ]
書き換えるのはできないけど、入れ換えるのはできるぞ。
cp libhoge.so /usr/lib/libhoge.so.tmp
mv /usr/lib/libhoge.so.tmp /usr/lib/libhoge.so

57 名前:デフォルトの名無しさん mailto:sage [05/02/09 12:19:18 ]
入れ替えられても元のdllはロードされたままの罠。



58 名前:デフォルトの名無しさん mailto:sage [05/02/09 12:25:32 ]
無理やりmunmapしてしまうとか。

59 名前:デフォルトの名無しさん mailto:sage [05/02/09 15:02:15 ]
dllゆーな。


60 名前:デフォルトの名無しさん mailto:sage [05/02/09 20:21:36 ]
dllって言う奴はWin上がり

61 名前:デフォルトの名無しさん mailto:sage [05/02/09 21:54:41 ]
UNIXerはなんて言うの?

62 名前:デフォルトの名無しさん mailto:sage [05/02/09 21:56:50 ]
そ。

63 名前:デフォルトの名無しさん mailto:sage [05/02/09 21:58:00 ]
さ。

64 名前:デフォルトの名無しさん mailto:sage [05/02/09 22:37:10 ]
どるる。

65 名前:デフォルトの名無しさん mailto:sage [05/02/09 23:39:12 ]
どるるゆーな。

66 名前:デフォルトの名無しさん [05/02/10 00:03:50 ]
>>56
やっぱ無理ですか。どうもでした。
ちなみにdllってWin用語ですか!?たまたま拡張子がDLLなだけでしょ。

67 名前:デフォルトの名無しさん mailto:sage [05/02/10 00:15:11 ]
そ。



68 名前:デフォルトの名無しさん mailto:sage [05/02/10 00:28:17 ]
>>66
なこといっても、dymamic loadable libararyとは言わないもん。
shared libraryだな。

69 名前:デフォルトの名無しさん mailto:sage [05/02/10 00:35:06 ]
同じというならWindowsのDLL作るのってなんであんなに面倒くさいかね。




70 名前:デフォルトの名無しさん mailto:sage [05/02/10 00:38:03 ]
誰が同じって言ったんだろう

71 名前:デフォルトの名無しさん mailto:sage [05/02/10 00:55:21 ]
どるるワラタ

>>68
確か dynamic link library の略だったような。
なぜか soopen() じゃなくて dlopen() だなあ。

72 名前:デフォルトの名無しさん mailto:sage [05/02/10 14:18:26 ]
>>71
shareされるかどうかの観点 -> so
dynamicにロードされるかどうかの観点 -> dl(l)

73 名前:デフォルトの名無しさん [05/02/10 17:04:50 ]
>>72
惜しい

74 名前:デフォルトの名無しさん mailto:sage [05/02/10 17:12:06 ]
>>49
W=リチャード(故)の「UNIXネットワークプログラミング」8000円に
XTIのページが100ページぐらいあって
泣きたくなった

まじでいらん。金その分返せと


75 名前:デフォルトの名無しさん mailto:sage [05/02/10 17:34:03 ]
>>71
dlopenはもともと別のAPIですから。

76 名前:デフォルトの名無しさん [05/02/11 21:26:59 ]
perrorを呼んだ後はerrnoの値って変わっちゃうの?
printfは何度呼んでも変わらないようだけど。

int main(void)
{
 errno = ETIMEDOUT;
 printf("errno: %d \n", errno);
 perror("perror");
 printf("errno: %d \n", errno);
 return 0;
}

errno: 2
perror: No such file or directory
errno: 29

77 名前:デフォルトの名無しさん mailto:sage [05/02/11 21:33:20 ]
そういうもんです



78 名前:デフォルトの名無しさん [05/02/11 23:16:43 ]
FreeBSDでは変わらんけど。
29ってなんだ?


79 名前:デフォルトの名無しさん mailto:sage [05/02/11 23:56:23 ]
変らないのはたまたま。
後で利用したければ、保存しなさい。

80 名前:デフォルトの名無しさん mailto:sage [05/02/12 00:11:46 ]
>>76
perrorが標準エラーに出力するってことは、最終的にwrite(2)が
呼ばれるわけだから、どのみちerrnoが上書きされる可能性がある。

もし、errnoを保存してたとすると、write(2)が失敗した場合のerrnoを
取得できなくなってしまう(可能性も必要性も低いけど)。

こう考えれば納得できるんじゃないかな?

81 名前:76 mailto:sage [05/02/12 00:38:18 ]
>>80
なるほどわかりますた…
あと>>76のETIMEDOUT→ENOENTですた、スマソ
まぁ何でもいいんですが。

82 名前:デフォルトの名無しさん [05/02/12 21:15:07 ]
>>51
popen()はスレッドセーフだよな?何故使ったらダメなんだ?


83 名前:デフォルトの名無しさん [05/02/12 21:25:23 ]
pthreadの動作を実際に見せてやれ。
おまいはできる部下だ

84 名前:デフォルトの名無しさん [05/02/12 21:27:20 ]
>74
本買う前に目録ぐらい見なよ

85 名前:デフォルトの名無しさん [05/02/12 22:31:57 ]
>>84
ビニールの帯でくくってあってさぁ・・・

86 名前:デフォルトの名無しさん mailto:sage [05/02/12 22:34:47 ]
>85
何のために常時接続してんだか…

87 名前:デフォルトの名無しさん [05/02/17 02:45:26 ]
コマンドを実行してそれを返り値にして渡したいのですが
どのような方法があるでしょうか?

具体的には ls -1 *.jpg の結果が欲しいのです
すいませんがよろしくおねがいします



88 名前:デフォルトの名無しさん [05/02/17 02:52:40 ]
「返り値にして渡したい」の意味が正確には把握できませんが、

  return system("ls -1 *.jpg");

ってことですか? それとも、

  FILE *f = popen("ls -1 *.jpg", "r");
// fから読む

ってことでしょうか?

89 名前:デフォルトの名無しさん mailto:sage [05/02/17 04:16:35 ]
呼び側で、引数それぞれにつき、BUFSIZぶん確保。
返り値は、エラーの有無。

おもしろかった。

int hoge(char *cmd, char *b)
{
    FILE *fp;
    int ret;

    cmd[strlen(cmd) - 1] = '\0'; /* 改行がくっついてる、と、仮定 */
    printf("cmd: %s\n", cmd);
    if ((fp = (popen(cmd, "r"))) == NULL) {
        perror("popen");
        return (1);
    }
    if ((ret = fread(b, 1, BUFSIZ, fp)) < 1) {
        printf("no output from \"%s\"\n", cmd);
    } else if (ret < 0) {
        perror("fread");
        pclose(fp);
        return (1);
    }
    pclose(fp);
    return (0);
}


90 名前:デフォルトの名無しさん mailto:sage [05/02/17 04:42:42 ]
??ちょとまずかった??

    if ((ret = (fread(b, 1, BUFSIZ, fp))) < 1) {
        fprintf(stderr, "no output from \"%s\"\n", cmd);
        if (ferror(fp)) {
            perror("fread");
            pclose(fp);
            return (1);
        }
    }

...すみません。もうやめます。

91 名前:デフォルトの名無しさん mailto:sage [05/02/17 06:11:03 ]
どうしてUNIX厨のソースはこんな醜いんだろう

92 名前:デフォルトの名無しさん [05/02/17 07:40:22 ]
それがUNIXクオリティ

93 名前:デフォルトの名無しさん [05/02/17 12:54:54 ]
>>91
それは厨だからさ。

94 名前:デフォルトの名無しさん mailto:sage [05/02/17 13:22:01 ]
>>91
お前のレベルが低いだけだろ


95 名前:デフォルトの名無しさん [05/02/17 13:56:20 ]
すみません。よろしければ教えてください。

mailxでメールを送信する際に
添付ファイルをつけて送信することは可能なのでしょうか?

どこぞやにUNIXじゃ添付できないって書いてあったんですけれども
もしできそうならおしえていただけますでしょうか?

96 名前:デフォルトの名無しさん mailto:sage [05/02/17 13:57:04 ]
帰れ

97 名前:デフォルトの名無しさん [05/02/17 13:58:42 ]
>>95
板違い



98 名前:デフォルトの名無しさん mailto:sage [05/02/17 13:59:16 ]
あらら、答えられないなら黙ってればいいのにw
UNIX厨っていつも余計な事するよね

99 名前:95 [05/02/17 14:04:38 ]
もうしわけないです、どこの質問すればいいですか?
誘導願いしますw

UNIXの環境上からmailxで添付ファイルの送り方
があればききたいのですけれども




100 名前:デフォルトの名無しさん mailto:sage [05/02/17 14:05:32 ]
なんでマニュアル読まないの?

101 名前:デフォルトの名無しさん [05/02/17 14:06:43 ]
マジレスすると
$ man mailx

102 名前:デフォルトの名無しさん mailto:sage [05/02/17 14:08:06 ]
$ man ko

103 名前:95 [05/02/17 14:08:38 ]
manなんてインストールしてません
おねがいします
教えてください

104 名前:デフォルトの名無しさん mailto:sage [05/02/17 14:10:09 ]
マニュアル熟読しないと使えない時点で糞だよね
UNIXなんて捨てたら?

105 名前:デフォルトの名無しさん mailto:sage [05/02/17 14:11:45 ]
man入れてないんだったらオンラインマニュアルでもなんでもあるだろが
考えろよ

106 名前:デフォルトの名無しさん mailto:sage [05/02/17 14:13:13 ]
つーかおまえがmanなんて見ても参考にならねーと思う
あきらめろ

107 名前:95 mailto:sage [05/02/17 14:14:06 ]
ばーか



108 名前:デフォルトの名無しさん [05/02/17 14:14:20 ]
ここはプログラミングのスレであって、ツールの使い方のスレではない。

109 名前:デフォルトの名無しさん mailto:sage [05/02/17 14:15:16 ]
シグナルってシグナルハンドラからすぐにリターンしないとだめ?
そのまま延々と処理を続けてもいい?


110 名前:95 mailto:sage [05/02/17 14:15:25 ]
なんだかんだと言い訳ばっかでつかえねーやつら。
氏んだらいいと思うよ。

111 名前:104 mailto:sage [05/02/17 14:15:27 ]
はいはいそうですね
そのとうりです
だからもうUNIXと言う文字があるところにはかかわらなくていいですよ
じゃぁね ばいばい

112 名前:デフォルトの名無しさん [05/02/17 14:16:37 ]
いやでも、
UNIXで挫折って、わかる気がするなあ。
ずっと意味不明なコマンドの文字列打ってたら頭おかしくなりそうだし、
ずっと真っ暗なコンソール眺めてると鬱になりそうじゃん?
かといって思想のまるでないXは、オタ絵とただ沢山コンソール開くしか脳ないし、
こんなの与えても娯楽を常に要求する一般人は見向きもしない。
そもそもWebでしか見掛けない、哀れなOS、というのが一般人の見解だし。
そうそう、最近LindowsがUNIXの印象かなり悪くしたよね。
この事件でUNIXはビジネスで成功できないことがまた証明されてしまったわけだ。
昔からUNIXは関係者同士で常に足を引っ張って成長しない。
お金の匂いしないよね。全然。
そんなOSだから、挫折が常態であるのは必然なんだと思う。

113 名前:デフォルトの名無しさん mailto:sage [05/02/17 14:18:01 ]
>>109
いいよ
Xのメセージは全部シグナルだし

114 名前:デフォルトの名無しさん mailto:sage [05/02/17 14:25:17 ]

元95です。偽者発生してもうきけるふんいきじゃないですね。残念です。

man 英語だったんでうーんって感じだったんですけど
あとSHELLからコマンドで毎日定時に送るようにしたかったんですけど、

まあがんばって訳してみます。

結果あらしてすみませんw

115 名前:デフォルトの名無しさん [05/02/17 14:33:24 ]
ここは役立たずの巣窟

116 名前:デフォルトの名無しさん mailto:sage [05/02/17 14:36:52 ]
95は何を使ってるんだ?
話はそれからだ

117 名前:デフォルトの名無しさん mailto:sage [05/02/17 14:45:51 ]
オソル オソル キイテミル
現在実行中のプロセスが「自分自身」の絶対パスを知る方法ってありますか?
適当な path がとおってる環境下で、$ hoge <arguments...> とやったときに、
そのプログラムのなかで、hoge が /usr/bin/hoge なのか /usr/local/bin/hoge
なのかを知る方法でつ。
argv[0] を拾っても、上記の例だと hoge が得られるだけだし・・・



118 名前:デフォルトの名無しさん mailto:sage [05/02/17 14:53:28 ]
>>117
Linux なら自身のpidを取得して/proc/pid/exe辺りを見ればいいんだけど。
man 5 proc で説明でると思う。他のOSの場合どうするのかは知らん。

119 名前:デフォルトの名無しさん mailto:sage [05/02/17 14:55:34 ]
>>117
普通に考えると、ない。

120 名前:114 mailto:sage [05/02/17 15:40:39 ]
SunのSolaris 8です

これでこたえなってます?

121 名前:デフォルトの名無しさん mailto:sage [05/02/17 15:42:08 ]
>>118
ほんとUNIXって使えないね

122 名前:デフォルトの名無しさん mailto:sage [05/02/17 16:03:21 ]
>>114
だから、ここはプログラミング質問スレなんだから
プログラムの使い方を聞くなってば。

123 名前:デフォルトの名無しさん mailto:sage [05/02/17 16:09:39 ]
>>111
>そのとうりです
とうり?

124 名前:デフォルトの名無しさん mailto:sage [05/02/17 16:33:36 ]
>>118 ありがd 調べてみまつ。
>>119 確かに >>118 さんに教えて頂いた方法は「普通」の方法っぽくはないですね。
もっと簡単に出来そうなんだけど・・・
以下のような動作するコマンドって、珍しいものですか?
usage:
 hoge (-f <conf file>)
-f で設定ファイルが指定されればそのファイルを使うけど、オプション指定なしで起動された
場合は、hoge 自身が置かれているディレクトリ直下の conf file を使います(default)。
みたいな・・・

125 名前:デフォルトの名無しさん mailto:sage [05/02/17 17:25:45 ]
>>95 氏は自分のやりたいことが分かっていないんじゃないかな。
ここで聞くより mailx と MIME でググると少しは幸せになったのに。


126 名前:デフォルトの名無しさん mailto:sage [05/02/17 17:25:45 ]
>>117
確実に(どんな場合でも)取得する方法はない。
起動後にchroot(2)してたらパスが存在しないことすらありえるし。

127 名前:デフォルトの名無しさん mailto:sage [05/02/17 17:44:02 ]
>>124
「hoge 自身が置かれているディレクトリ直下の……」というようなことは
「しない」っていうのがUNIXでの流儀なんですよ。
デフォルトのパスは定数として埋め込むのが安全です。




128 名前:デフォルトの名無しさん mailto:sage [05/02/17 17:47:50 ]
>>124 >>127 さんの言う通りじゃ。どこぞのOSの悪い習慣は捨てなされ。

いくつか流派があるが、GNU流の設定ファイルの置き場のお作法はこうじゃ
ttp://www.sra.co.jp/wingnut/standards/standards-ja_7.html#SEC54


129 名前:デフォルトの名無しさん mailto:sage [05/02/17 18:17:03 ]
>>128
そんなに悪いものかな?
まあ、郷に入りては郷に従え、と。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<215KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef