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

前スレ
Part4 スレリンク(tech板)
Part3 スレリンク(tech板)
Part2 スレリンク(tech板)
Part1 URLリンク(pc2.2ch.net)

Part3のミラー
URLリンク(makimo.to)
Part2のミラー
URLリンク(makimo.to)

関連スレ
Cygwin使っている人いますか? その13 (UNIX板)
スレリンク(unix板)
Cygwin使っている人いますか? 3 (Windows板)
スレリンク(win板)

関連板
URLリンク(pc5.2ch.net)
URLリンク(pc5.2ch.net)


2:名無し募集中。。。
05/01/15 02:19:15
【POSiX】
The Open Group Base Specifications Issue 6
IEEE Std 1003.1, 2004 Edition
URLリンク(www.opengroup.org)


【必読書】
Advanced Programming in the UNIX(R) Environment
URLリンク(www.amazon.com)

Unix Network Programming
Vol. 1: The Sockets Networking API, Third Edition
URLリンク(www.amazon.com)

UNIX Network Programming
Volume 2: Interprocess Communications (2nd Edition)
URLリンク(www.amazon.com)


3:名無し募集中。。。
05/01/15 02:20:16
man on www
URLリンク(www.linux.or.jp)

GNU Make 日本語リファレンス
URLリンク(www.ecoop.net)

Unix Programming Frequently Asked Questions 日本語訳
URLリンク(www.adl.nii.ac.jp)

4:名無し募集中。。。
05/01/15 02:20:51
関連スレ追加

ネットワークプログラミング相談室 Port12
スレリンク(tech板)
マルチスレッドプログラミング相談室 その3
スレリンク(tech板)

5:名無し募集中。。。
05/01/15 02:22:57
           /◇
 oノハヽo  /◇◇
 从*・ 。.・) / ◇ ◇ センター試験がんばってね
 /o y/ |`p
 し!|||ii|||J
  |||||||||


6:名無し募集中。。。
05/01/15 02:24:17
空気読まずに立てちゃったけどOK?


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

8:デフォルトの名無しさん
05/01/15 02:27:53
ほらきた。
UNIX使いって貶されると、
すぐ言葉少なになるよね。
もう貶されるのに慣れちゃった?

ちょっと、心をおちつけて。
UNIXを知らなかったあの頃を思い出してごらん。
あの頃の君達は希望に満ち溢れていたよね。
そう、今まで君達は、とっても悪い夢を見ていたんだ。
UNIXなんか捨てて、あの頃見ていた希望を取り戻そうよ!


9:デフォルトの名無しさん
05/01/15 02:50:47
>>1

10:デフォルトの名無しさん
05/01/15 15:25:13
どこの板の名無しだよ

11:デフォルトの名無しさん
05/01/15 15:39:53
>>6
問題なし。

前スレのスレリンク(tech板:944番)
GNUは仕様だけじゃなくて、こうしましょうってガイドラインも出してるよ。
URLリンク(www.sra.co.jp)

ちなみに--に決めた時は、(+って候補もあった)
メーリングリストで投票していた。ストの仕切りで。

12:デフォルトの名無しさん
05/01/15 17:16:03
モーヲタがUNIX使う時代なのか

13:デフォルトの名無しさん
05/01/19 15:11:41
ここら辺もテンプレに入れとかない?

Advanced Programming in the UNIX(R) Environment 和訳
URLリンク(www.amazon.co.jp)

Unix Network Programming 和訳
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)

UNIX プログラミング環境
URLリンク(www.amazon.co.jp)

14:デフォルトの名無しさん
05/01/19 15:16:21
あと俺、これも好きなんだけどねえ。

UNIX システムコールプログラミング
URLリンク(www.amazon.co.jp)

古いから、今のとの相違点をマニュアルと比較しながらでないと
使えないんだけど。逆にそれができる香具師には、単純だった頃の
UNIX の姿から学習できるから、かえって入門に向いてる気がする
んだが。


15:デフォルトの名無しさん
05/01/19 15:30:05
ちなみに↑は去年新版が出たんだが(20年ぶりくらい?)
和訳の予定ってないんかなあ。
最近、原著で読み通すほどの暇と気力がない。orz

URLリンク(www.amazon.com)


16:デフォルトの名無しさん
05/01/19 21:06:44
ここ2,3年の間にUNIXのプログラミング題材にした書籍が
アメリカで何冊か出てるよね。

17:デフォルトの名無しさん
05/01/19 23:27:33
Linuxのみだけど、↓これもなかなかいい内容の本だったよ。
古典的なところをちょっと外れたのも盛り込んでいて。
新人さん向けの本を捜しての斜め読みだけどもね…

Linuxプログラミング―例題で学ぶUNIXプログラミング環境のすべて
URLリンク(www.amazon.co.jp)

18:デフォルトの名無しさん
05/01/19 23:46:23
Linux Is Not UniX

19:デフォルトの名無しさん
05/01/28 11:29:30
質問させていただきます
Xのプログラムをコンパイルしようとおもったのですが
[root@cf root]# gcc -I /usr/X11R6/include -lX11 -L /usr/X11R6/include -I/usr/X11R6/lib -L /usr/X11R6/lib xaa.c -o xaa
[root@cf root]# ./a.out
Shared object "libX11.so.6" not found
といわれて、動作させることができません

[root@cf root]# find /usr/X11R6/ -name "libX11.so.6"
/usr/X11R6/lib/libX11.so.6
で、libX11.so.6はあるのですが‥
どこか根本的にまちがっているのでしょうか?


20:デフォルトの名無しさん
05/01/28 11:42:56
コンパイルする時に-R/usr/X11R6/libするか、
$ env LD_LIBRARY_PATH /usr/X11R6/lib ./a.out あるいは
# vi /etc/ld.so.confに/usr/X11R6/lib 加えて、# ldconfig

ちなみにその糞OSは何?

21:デフォルトの名無しさん
05/01/28 18:22:34
おそらくTurboかと

22:デフォルトの名無しさん
05/01/28 18:46:58
>>20
> $ env LD_LIBRARY_PATH /usr/X11R6/lib ./a.out あるいは

$ env LD_LIBRARY_PATH=/usr/X11R6/lib ./a.out


23:デフォルトの名無しさん
05/02/02 11:35:16
皆さんに質問で
ファイルから設定を読みこむときって皆さんはどうやってますか?
width=500
height=600
と、設定ファイルにかかれているとき
Perlなら、widthを変数名に、500を値にいれていたのですが
C言語ではどうするのでしょうか?

もしよろしければ適当にソースを書いていただければ幸です


24:デフォルトの名無しさん
05/02/02 11:58:14
マルチすんなボケ

25:デフォルトの名無しさん
05/02/02 11:59:21
>>24
こいつぼけ

26:デフォルトの名無しさん
05/02/02 13:25:31
>>23
C言語の初心者スレへ。

27:デフォルトの名無しさん
05/02/03 23:25:08
>>19
./a.out <==./xaa の間違い?

28:デフォルトの名無しさん
05/02/04 12:08:09
詳解UNIXに載ってるIPCの機能は、いまあるメジャーなUNIXでは
殆ど使えてるんでしょうか?それともプロセス間通信はpipeや
mmapみたいな基本的なものに限定しておいて、スレッドを使う
方向で考えた方が、推奨されるやり方なのですか?

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

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


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

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


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

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

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


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

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

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

38:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
05/02/05 08:12:12
>>41
ソースの先頭で
#define _XOPEN_SOURCE


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

お騒がせしました。

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

46:デフォルトの名無しさん
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
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:デフォルトの名無しさん
05/02/08 22:45:01
上司を部下に書き換えるとか、勤務先を書き換えるとか

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

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

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

56:デフォルトの名無しさん
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:デフォルトの名無しさん
05/02/09 12:19:18
入れ替えられても元のdllはロードされたままの罠。

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

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


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

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

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

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

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

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

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

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

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

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




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

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

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

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

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

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

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


75:デフォルトの名無しさん
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:デフォルトの名無しさん
05/02/11 21:33:20
そういうもんです

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


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

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

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

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

81:76
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:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
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:デフォルトの名無しさん
05/02/17 06:11:03
どうしてUNIX厨のソースはこんな醜いんだろう

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

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

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


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

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

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

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

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

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

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

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




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

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

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

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

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

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

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

107:95
05/02/17 14:14:06
ばーか

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

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


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

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

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

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

114:デフォルトの名無しさん
05/02/17 14:25:17

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

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

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

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

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

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

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

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

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

120:114
05/02/17 15:40:39
SunのSolaris 8です

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

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

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

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

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

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


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

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


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

いくつか流派があるが、GNU流の設定ファイルの置き場のお作法はこうじゃ
URLリンク(www.sra.co.jp)


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

130:デフォルトの名無しさん
05/02/17 18:33:07
そもそも1つのファイルは複数の場所に存在できるんだから、
「自身が置かれているディレクトリ」なんて特定できるわけがない。

131:デフォルトの名無しさん
05/02/17 18:35:51
↑馬鹿?

132:デフォルトの名無しさん
05/02/17 18:39:31
>>129
動作を既定する設定ファイルなら、利用者ごとに設定できるようにするべき。
実行モジュールと同じディレクトリに置くという悪しき習慣の弊害は、
Win95時代のソフトウェアがAdministratorでないと設定を変えられない+
利用者ごとに設定できないという形でも現れている。

また、環境に依存するような設定ファイルなら、アプリケーションに埋め込むか
システムで管理するデータベースなどに登録するのがいい。
ここでもやはり、実行モジュールと同じディレクトリに置くというメリットは殆ど無い。

133:デフォルトの名無しさん
05/02/17 18:41:21
>>130
ああそうか、そういう問題もあるね。今まで気付かなかったよ。

134:デフォルトの名無しさん
05/02/17 18:55:36
>>132
つーか一体いつの時代のWindowsとアプリを批判してるんだよ・・・

135:デフォルトの名無しさん
05/02/17 18:57:37
>>132
95くらいだとまだシングルユーザーだったからなぁ……
確かにそういう習慣はあったけれど今ではそれなりに改善されてるよ。
まだ昔の習慣引きずってるアプリケーション多いけどね。
普段Windowsしか使ってなかったから気付かなかったよ。参考になった。ありがとう。

136:デフォルトの名無しさん
05/02/17 19:29:19
>>126-135
サンクスです。 脳内仕様を、も一回見直してみます。


137:デフォルトの名無しさん
05/02/17 21:09:15
つーかインストール先のデータ使うなんて普通にありそうだが

138:デフォルトの名無しさん
05/02/17 21:36:16
>>137 守ってね。管理面倒になるから。
URLリンク(www.pathname.com)


139:デフォルトの名無しさん
05/02/18 00:13:21
自己解凍書庫とか作れないじゃん


140:デフォルトの名無しさん
05/02/18 00:24:45
>>139
そこでsharですよ

141:デフォルトの名無しさん
05/02/18 01:04:11
つーかシェルでは自分自身取得できるってことじゃん
無茶苦茶だな

142:デフォルトの名無しさん
05/02/18 01:09:34
馬鹿が多いな
自己パス得られないのはUNIXの欠陥の1つだよ

こいつ(>>138)こんなリンク張れば騙される奴がいるとでも思ってんだろうなw

143:デフォルトの名無しさん
05/02/18 01:15:35
UNIXはそういう便利関数が標準化される前に廃れちゃったからね。
POSIXにもないってのは失敗かもな。

144:デフォルトの名無しさん
05/02/18 01:19:47
まー、それでもなんとかなってるから別にいいけどね。

145:デフォルトの名無しさん
05/02/18 01:21:20
>>141
シェルとCで機能の同期が取れてないのはヤバイ
創作の妨げでしかない


146:デフォルトの名無しさん
05/02/18 01:23:14
はい、これでUNIXのヤバさが1つわかりましたね

147:デフォルトの名無しさん
05/02/18 01:27:05
ハイハイ

148:デフォルトの名無しさん
05/02/18 01:30:22
WindowsではAPI一個呼べば済む問題が、
UNIXでは流儀やら互換性やら実現不能やらで大騒ぎ
たしかにアフォすぎる

149:デフォルトの名無しさん
05/02/18 01:33:30
ファイルシステムのセマンティクスからして違うのに無視して騒ぐバカがいるな。


150:デフォルトの名無しさん
05/02/18 01:35:17
ム板なんてWin厨ばっかなんだからしょうがないべ。


151:デフォルトの名無しさん
05/02/18 01:35:57
こんどは意味論で擁護か
おめでたい頭だな
UNIX板で普及スレとか立ってたけど
こんなアフォばっかじゃ永久に無理

152:デフォルトの名無しさん
05/02/18 01:42:16
それ結構昔だね。
おれも無理だと思う。

153:デフォルトの名無しさん
05/02/18 01:45:20
まあ、ファイルがバラけるのを良しとしない人は多い気がする。
2chでそういう便利関数集めた汎用ライブラリ作らない?
主要UNIX環境で動くようなやつを。
完全PDSで。

154:デフォルトの名無しさん
05/02/18 01:50:15
PDSて・・・
PC98出身のフリーウェア作者かい?

155:デフォルトの名無しさん
05/02/18 01:50:35
じゃあ、とりあえず
・Linux、*BSD、SunOS等のメジャーな奴のやり方教えてくれ
Linuxでのやり方は上に書いてたっけ。

156:デフォルトの名無しさん
05/02/18 01:51:50
シェルスクリプトならフルパスが得られるんだから、バイナリでもフルパスが
欲しいなら
#! /bin/sh
dir=$(dirname $0)
exec ${dir}/../lib/hoge/hoge.bin "$@"
みたいにするだけだよ。
jdk とか firefox とかでも使ってる、割とメジャーな手法。

157:デフォルトの名無しさん
05/02/18 01:53:40
じゃあそれ最初に言えよ・・

158:デフォルトの名無しさん
05/02/18 01:56:54
>>157
そういうシェルスクリプトを作るってことだから。
たぶん何の解決にもなってない。
UNIXは製作者側のセキュリティ保護をまったく考慮しないOS。

159:デフォルトの名無しさん
05/02/18 01:57:51
つまり嘘ファイルを掴まされてもわからんてことね。

160:デフォルトの名無しさん
05/02/18 01:58:12
それ引数にフルパス渡せばフルパスが分かるっていってるだけですから〜残念!

161:デフォルトの名無しさん
05/02/18 02:02:25
シェルスクリプトで出来ることがCで出来ないとでも思ってるのか?


162:デフォルトの名無しさん
05/02/18 02:04:10
ここはひどく汚染された釣堀ですね

163:デフォルトの名無しさん
05/02/18 02:06:33
釣り師もレッテル貼るしか能が無いしな。


164:デフォルトの名無しさん
05/02/18 02:12:52
>>134
>>132の言う問題が明確に問題視されたのは、
Windows 2000 TSEのマルチユーザアプリケーションのガイドラインができてからですね。
その時からWindows(TSEやXP)でも>>124のやり方はガイドライン違反です。
今やMac OS Xでもそうです。


165:デフォルトの名無しさん
05/02/18 02:14:22
実行可能ならパスは通っているはずだから環境変数PATHを走査して…ってwhichみたいなことをする他ないのか…

166:デフォルトの名無しさん
05/02/18 02:16:40
違反って言い方は不正確だな。
Windowsロゴを取得する際に要求される仕様だってだけ。
しかもそれはユーザーデータの保存場所の指定に関してであって
カレントディレクトリのコンフィグレーションを読むのは
.NETアプリだって普通にやってるよ。

167:デフォルトの名無しさん
05/02/18 02:21:38
>>165
パスが通ってない所のものでも実行できるべ?

168:デフォルトの名無しさん
05/02/18 02:22:13
元々UNIXは専用マシンと一緒に買わせる抱き合わせ商法。
抱き合わせ商法が許されたのは20年以上前の秋葉原ぐらいだが、
現在も生き残ってるベンダーは、今でもその商法で売っている。
まさに20年前の思想。
当然ソフトウェアの保護にはものすごく疎い。
ぶっちゃげ自分のシステム以外の事はどうでもよく、問題を認識してすらいない。
ベンダーはマシンを買ってもらえれば元が取れるからわれ関せず。
不正ユーザーにとっては、動いているソフトは勝手にクラックしてください
と言わんばかりの無法地帯。

169:デフォルトの名無しさん
05/02/18 02:24:49
>>167
それなら明確に起動時にパスを指定してるから位置がとれるだろうよ。

170:デフォルトの名無しさん
05/02/18 02:27:18
>>168
とはいえ、今のUNIX(互換OS)の主流であるLinux系やら
BSD系は通常ハードウェアについてこないぞ。

MacOSはついてくるな。

PCは、MSとの契約でWindowsを抱き合わせしないと販売できない
(Windowsを供給してもらえない、仕切り値が高くなる)ようになってる。

171:デフォルトの名無しさん
05/02/18 02:28:16
>>169
まあ1クッション置けばそうかもしれんが・・・

172:デフォルトの名無しさん
05/02/18 02:28:36
>>167
あぁ、そうか。あかんね。
カレントディレクトリとargv[0]を繋げるとか…駄目っぽい。

173:デフォルトの名無しさん
05/02/18 02:35:26
lsは常に/bin/lsでないとこまる。
たとえば/tmp/.../lsとか、./lsはあやしい。

174:デフォルトの名無しさん
05/02/18 02:38:15
そういう話じゃないだろ。

175:デフォルトの名無しさん
05/02/18 02:40:36
UNIX板には、シェルスクリプト、よくてperlやrubyスクリプトを
ネチネチいじってオナニーしてる連中しか居らんべ?

176:デフォルトの名無しさん
05/02/18 02:42:52
argv[0][0]が
・'/'なら絶対パス。
・'/'でなくargv[0]に'/'を含むなら相対パス。
・そうでないならPATHを調べる。
でどう?

177:デフォルトの名無しさん
05/02/18 02:45:05
argv[0] はただの引数
execl("/path/to/your/program", "/bin/cat", "hoge", NULL);
されたらどうするよ。

178:デフォルトの名無しさん
05/02/18 02:46:49
出来ません。デフォルトパスは~/にするよろし。
でいいじゃん。

179:デフォルトの名無しさん
05/02/18 02:47:40
>>177
もちろんお手上げ。

180:デフォルトの名無しさん
05/02/18 02:49:16
というかmain()に入ったときには
ファイルはunlinkされてるかもしれんし

181:デフォルトの名無しさん
05/02/18 02:53:23
どうしてできません。ごめんなさい。の一言がいえないのか。

182:デフォルトの名無しさん
05/02/18 02:54:20
>>180
確かにそれはそうなんだが、そこまで含めてしまうとなあ・・・
せめて自分自身の実体があった場所とか欲しいな

183:デフォルトの名無しさん
05/02/18 02:57:09
psの -o comm とか -o args は
プロセス構造体とかユーザ構造体から
取得してるのですか??

184:デフォルトの名無しさん
05/02/18 03:05:32
>>177
ところでpsコマンドで見れるのは
>execl("/path/to/your/program", "/bin/cat", "hoge", NULL);
で言うと"/path/to/your/program"?それとも"/bin/cat"?
今端末の前に居ないんで確認できないんだ。
折角自身のPIDが分かるのにそこから引き出せないのかな?

すみません、ごめんなさい、出来ないみたいです、諦めます。

185:デフォルトの名無しさん
05/02/18 03:16:40
ld.so(1)さんが、頑張ってますんで参考に。

186:デフォルトの名無しさん
05/02/18 03:30:38
>>181
ここまでの議論は既にできないことを前提に、
ではどうするかということに移ってると思うんだが。

なぜ謝る必要があるのかわからんな。
そういうことはKen ThonmsonやらPOSIX作ったやつらやらに言っとくれ。

187:117 = 124
05/02/18 08:35:27
>>117>>124 でつ。 @自宅なので、ID 変わっとります。
自分の書き込みに、こんなにたくさんレスがついたの、初めてです。 やっと、ヒッキー卒業
できそうな気がしてきました。 釣り師の快感も理解でき(ry
とまれ、>>127 >>128 のご意見は参考になりますた。
それと、>>181。 一番、オモシロカターヨ。
ミンナ、アリガd

188:117 = 124
05/02/18 08:36:01
↑ つーか、ID ないじゃん

189:デフォルトの名無しさん
05/02/18 09:30:24
>>184
psで見れるのはどのUNIXでもargv[0]だと思う。

190:デフォルトの名無しさん
05/02/18 10:20:06
んだから、unixのファイルシステムでは、
1このファイルに対してファイル名(パス)がいくつでもつけられるから、
実行ファイルのある場所は?っていう質問には無理があるのよ。

実行ファイルといっしょに置いた設定ファイルを使おうとした場合、
最悪でも今のPATHと照らし合わせれば、どのファイル名で実行されたかは
わかるだろうけど(which)、そこに一緒に置かれた設定ファイルが
あるかどうか保証できないじゃん。


191:デフォルトの名無しさん
05/02/18 10:54:10
>>190
というか、ユーザー空間からpathnameを取得するための関数って
POSIXには含まれてないの?pathnameの有効性ともかくとしてさ。

192:デフォルトの名無しさん
05/02/18 10:57:22
man 〜すると、
| pathnameの有効性はともかく、こうなります
って書いてあんのかよ…いらねーよ。つーか有害。


193:デフォルトの名無しさん
05/02/18 11:01:41
>>192
なにを言ってるのかよく分らないんだけど、
execveシステムコールを発行する時点で、
pathnameは決まってるんじゃないの?だったら
それをユーザー空間から取得できるよう、共通のインターフェイスを
提供してもいいんじゃないの?っていう話なんだけど。

194:117 = 124
05/02/18 11:13:30
♪ 喧嘩をやめて〜 二人を止めて〜
♪ 私のため〜に〜 争わな〜い〜で〜

195:デフォルトの名無しさん
05/02/18 11:22:17
>>193
アプリは /usr/xxx/app
設定ファイルは /usr/xxx/app.conf
だとして

ln /usr/xxx/app /usr/bin/app
とやったらどうなのよ?
/usr/bin/app として実行したら
/usr/bin/app.conf は存在しないだろ?


196:デフォルトの名無しさん
05/02/18 11:41:17
>>195
それは「設定ファイルが見付かりません」でいいんじゃないの。

Linux で readlink("/proc/self/exe", ...) するとパスが取れるよう
な仕組みの、共通の API が欲しいぞ、と。



197:デフォルトの名無しさん
05/02/18 11:44:43
それを見付かりませんなんてするよりパスを固定する方がはるかに建設的じゃん。
>>195みたいなのはUNIXでは完全にlegalな使い方なんだから、
それをわざわざ制限するのはアホ。


198:デフォルトの名無しさん
05/02/18 11:53:45
つまり Sun の Java はアホだと。

少ないとは思うけど需要はあるので、共通の手段があってもいいと思う
けどねえ。自分は使わないけど。



199:デフォルトの名無しさん
05/02/18 12:01:48
>>198
いったいいつごろのJavaの話をしているのかねえ。


200:デフォルトの名無しさん
05/02/18 12:11:10
>>198
JDKはその配布形態から定数を埋め込めないが、
代わりにちゃんとJAVA_HOMEという環境変数をみるよ。
それがない場合にやむを得ずdirname $0をとってるだけ。



201:デフォルトの名無しさん
05/02/18 12:26:42
>>196
>>192

202:デフォルトの名無しさん
05/02/18 12:48:45
ちっちゃなアプリなら、インストールパスを固定
(configure 時に --prefix で指定する) で十分だ
と思うけどなあ。そんなに大きなアプリなん?
インストールされた場所から設定ファイルを探すっ
てのは、UNIX 的にはむしろ嫌われることが多い。
どうしてかっていうと、インストールされたもの
は NFS などで共有される可能性があるけど、
設定ファイルは各マシンごとあるいは各ユーザー
ごとで別々にしたいから/etc か $HOME に置くの
が普通だから。

203:デフォルトの名無しさん
05/02/18 12:51:30
大きなアプリで、設定ファイルじゃなくて、アプリ
に附属するデータファイルがあり、その場所を変更
したい場合には、JDK みたいに環境変数で指定可能
にして、環境変数がない場合には wrapper script
経由で dirname $0 を見るってのがまあ習慣。

Linux 方式は、カーネルメモリがちょっと無駄になる
(普通のカーネルは、わざわざ使えないかもしれない
情報を記憶して、物理メモリを無駄にするなんて
ことはしない) ってことの他に、>>126 の言うよう
に chroot 環境からは、そのアプリが使えないって
問題もあるな。


204:デフォルトの名無しさん
05/02/18 12:59:37
あと、だから UNIXは… なんて言ってる Win厨は、
シンボリックリンクがないせいで、固定パス名
(たとえば C:\Program Files\アプリ名\data) から
データを検索するように作ると、起動ドライブにしか
データファイルを置けなくて実用に耐えないとか、
実行中のアプリケーションやDLLを削除することが
できないせいで、セキュリティフィックスを当てる
間は実行中のサービスを止める必要があるし、結局
一度はリブートが必要になることが多いっていう
Windows の欠陥を欠陥だと認識できてないんだと
思うな。

UNIX の場合、プログラム実行中でも削除できてしまう
から、パス名の検索はもともとできない変わりに、
サービスを止める時間はほんとに一瞬で済むし、
リブートは必要ないんだが。

205:デフォルトの名無しさん
05/02/18 13:03:04
ムキになった海栗糞厨の見当違いなWindows批判が始まりました。

206:デフォルトの名無しさん
05/02/18 13:05:36
>>204
NTFS 使ってるならハードリンクもシンボリックリンクも使えるよ。

207:デフォルトの名無しさん
05/02/18 13:05:53
そのへんにしか反応できないって哀しいね。


208:デフォルトの名無しさん
05/02/18 13:10:19
>>206
XPに限定されるけどね。

209:デフォルトの名無しさん
05/02/18 13:13:19
WindowsにUnixスタイルを持ち込むのはアホ。
同じように、UnixにWindowsスタイルを持ち込むのはアホ。
どっちが良いとか悪いとかはケースバイケースでしょ。

210:デフォルトの名無しさん
05/02/18 13:41:18
結局、
できない
ということでまとまりましたか?

211:デフォルトの名無しさん
05/02/18 13:50:34
>>206
シンボリックリンクってどうやるの?
.lnkの話?

212:デフォルトの名無しさん
05/02/18 13:54:17
>>210
wrapperスクリプト経由ならできるでまとまったのでは?

213:デフォルトの名無しさん
05/02/18 13:56:59
つまり、
できないと

214:デフォルトの名無しさん
05/02/18 14:00:18
>>211
URLリンク(homepage1.nifty.com)

215:デフォルトの名無しさん
05/02/18 14:01:26
>>209
そうなんだけどそれがわからん奴が多過ぎ。ム板にあるせいか
自分の無知からくる妄想的な優越感にかこつけて
昏いコンプレックスを晴らそうとする厨が絶えないね。
まあ元から知性に欠けるので馬脚を現しまくりなんだけど。

>>212
まとめは>>202-203だろ。
別にラッパースクリプトでしなければならない必然性はないけどね。
単にそれが手間がかからないからそうすることが多いってだけで。
あえて言えば、Cのコード書くより早いのと、動作を知るのに
特にドキュメントを探し回らなくても読めばわかるってのが利点だね。


216:204
05/02/18 14:01:34
>>206
ははあ、Windows 2000 からリバースポイントって機能が追加されて
たのか。勉強になりますた。
これって、ディスクが足らなくなって増設した場合とか、画期的に
便利だと思うんだけど、広まってないのはなんでかな?

>>211
URLリンク(support.microsoft.com)
とか
URLリンク(homepage1.nifty.com)
とかあるみたい。
ntfs.sys にパッチを当てないとディレクトリしか指せないみたいだ
けど、ディスクが足りなくなった場合とかはそれでも問題なかろう。

通常はマシンごとにある設定ファイルを、ネットワークで共有したい
から /etc/設定ファイル → /global/etc/設定ファイル みたいな
シンボリックリンクを作りたいっていう要求に相当するのは無理だけ
ど。ファイルを指せないだけじゃなくて、リモートファイルシステム
も指せないみたいだから。



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5367日前に更新/215 KB
担当:undef