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

■ このスレッドは過去ログ倉庫に格納されています
2011/04/18(月) 17:06:36.77
UNIXおよびUNIX clone環境一般のプログラミングに関する質問スレッド 

前スレ 
Part9 http://hibari.2ch.net/test/read.cgi/tech/1205795434/
Part8 http://pc11.2ch.net/test/read.cgi/tech/1147946176/ ;
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 ;
2013/06/20(木) 11:29:14.09
>>564
「bash ヒアドキュメント」でググれ
2013/06/22(土) 22:29:05.19
Subversionをインストールしたマシンにコミットしたファイルの
ディレクトリってデフォルトだとどこにあるかわかりますか?
2013/06/22(土) 23:24:21.76
>>567
デフォルトというのは無いと思うよ。
2013/06/23(日) 02:19:26.06
>>564
echo -e "aaa\naaa"
2013/06/23(日) 05:04:30.30
ヒアドキュメントってこういうやつね。

cat <<_END_ >test.txt
aaa
a a
_END_
2013/07/09(火) NY:AN:NY.AN
Linux で、Objective-C 使えますか?
2013/07/09(火) NY:AN:NY.AN
http://www.gnustep.org/
2013/10/23(水) 07:55:21.29
ハードリンクと違って、
シンボリックリンクはそれ自体がリンク情報を格納したファイルだとの事ですが
リンク情報ファイルとして直接見る(テキスト/バイナリエディタ)にはどのようにすればよいでしょうか?
2013/10/23(水) 08:11:05.93
>>573
どのファイルシステムの話をしてんだよ。
2013/10/23(水) 09:04:19.27
環境は MacOS10.7 ファイルシステムは HFS+ ですが
ファイルシステムによって開き方が違うんですか?
2013/10/23(水) 09:19:54.34
わかればよろしい
2013/10/23(水) 10:02:16.47
>>575
http://www.wdic.org/w/TECH/%E3%82%B7%E3%83%B3%E3%83%9C%E3%83%AA%E3%83%83%E3%82%AF%E3%83%AA%E3%83%B3%E3%82%AF

extではファイルにならないこともある。これを利用して高速なロックファイルとする方法あったね。HFS+はわかんないや。
2013/11/02(土) 07:42:13.92
>>575
マカーはこちらへ
http://toro.2ch.net/test/read.cgi/tech/1113058054/
579デフォルトの名無しさん
垢版 |
2014/03/04(火) 10:40:27.75
あらら随分と寂れちゃって
やっぱUNIX系でプログラムミングしようなんてヴァカは少ないんだろうな
2014/03/04(火) 10:44:38.16
馬鹿には無理
2014/03/04(火) 12:47:00.64
「やっぱUNIX系でプログラムミングしようなんてヴァカ」という奴はいない
2014/03/04(火) 13:49:03.30
>>579
んじゃ何でプログラミングするんだよ?
583デフォルトの名無しさん
垢版 |
2014/03/05(水) 00:05:19.95
>>579
馬鹿には無理
584デフォルトの名無しさん
垢版 |
2014/03/05(水) 03:25:53.72
わかればよろしい
585デフォルトの名無しさん
垢版 |
2014/03/07(金) 22:08:54.91
ユニックスでプログラミングとか真性のオタクだろw
586デフォルトの名無しさん
垢版 |
2014/03/08(土) 13:19:20.76
>>585
馬鹿には無理
2014/03/08(土) 14:07:00.70
まあプログラミング作業そのものはwin 上でおこなうけどな
2014/03/10(月) 03:07:52.96
プログラミングする奴はゴロゴロいるけどプログラムミングはそうそういないな
2014/03/10(月) 11:58:20.45
プログラムミングだからか、そりゃMinGWでやってりゃいらつくかもしれん
590デフォルトの名無しさん
垢版 |
2014/03/12(水) 19:32:04.52ID:cq0Wuml2
Program MinG
591デフォルトの名無しさん
垢版 |
2014/04/04(金) 11:37:49.40ID:+1zjSCgd
私は主にLinux上で、C/C++のプログラミングをするんですが、
Linux の システムコールや標準ライブラリ関数が、
スレッドセーフかどうかが公式マニュアル等には、
まず記述されていないことが多いです。

スレッドセーフでない関数をスレッドから使うと
おかしな動きになるんですが、
スレッドセーフかどうかがハッキリ記述されている例の方が
少ないです。

みなさんはどうしてますか?
2014/04/04(金) 11:56:16.78ID:5os8VUT8
man pthreads
2014/04/07(月) 00:41:04.44ID:JdSV9wAR
システムコールはされてるだろ。glibcも。
594デフォルトの名無しさん
垢版 |
2014/04/08(火) 18:36:01.77ID:nqRQMd5J
質問です。
ネットワークAPIの略号はこんな感じでいいのでしょうか?

a : ascii
h : host
hs : host short
hl : host long
n : network or numeric
ns : network short
nl : network long
p : presentation (.で区切られたアドレスを文字列で表現)

aとpは同じ意味なのでしょうか?
nはnetworkと説明されていたり、numericと説明されているのですが、
どちらでもいいのでしょうか?

よろしくお願いいたいします。
2014/04/08(火) 19:06:15.00ID:XsPn59mL
???
2014/04/08(火) 19:30:25.89ID:pfMGzHK8
>>594

まじれすすると
しいて言えばaがaddress、nがnetworkじゃ?
inet_addrとinet_networkがあるしな。
aがasciiじゃ使える文字の種類が多すぎだろw
aとpは、とりあえず関数の対応範囲が違う。

しかし、これがUNIX固有の話だと思ってここに書き込んだとしたらそれは間違いw
597デフォルトの名無しさん
垢版 |
2014/04/08(火) 19:37:10.16ID:kcd9laA9
>>596
一部の英語ページでasciiだと書かれている所があったのでasciiだと思いました。

>aとpは、とりあえず関数の対応範囲が違う。

kwsk

>しかし、これがUNIX固有の話だと思ってここに書き込んだとしたらそれは間違いw

と言ってもUNIX発祥ですよね?
2014/04/08(火) 19:55:39.16ID:pfMGzHK8
>>597
>と言ってもUNIX発祥ですよね?

まあBSDソケットのことを指すなら...
しかしじゃあC言語の話もUNIXなのか? ウェブの質問をする場合はNeXTか?
2014/04/09(水) 01:22:41.83ID:rnlf/mPK
>>579
会社を探しても見つからないのでPHPを覚えることにした
2014/04/09(水) 09:01:14.53ID:e48Xi3NQ
>>598
横だけど
>しかしじゃあC言語の話もUNIXなのか? ウェブの質問をする場合はNeXTか?
前半はカニチャーハン読むとその感じがわかるが、後半は???
2014/04/09(水) 09:32:21.34ID:5VEJdG+v
わからないなら黙ってろよ
2014/04/09(水) 09:57:21.51ID:e48Xi3NQ
適当なこと書くなよ
2014/04/09(水) 10:55:51.16ID:Lfy0Xgry
webはNeXTSTEP上で開発されたからでしょ。
2014/04/09(水) 10:59:29.84ID:3Xcjw1HB
ソースは?
2014/04/09(水) 11:10:06.95ID:Lfy0Xgry
>>604
ググればいくらでも。
http://www.w3.org/People/Berners-Lee/WorldWideWeb.html
2014/04/09(水) 11:28:38.99ID:3Xcjw1HB
ブラウザーか
2014/04/09(水) 11:30:48.25ID:3Xcjw1HB
サーバもそうだね、ごめん
2014/04/09(水) 11:53:40.04ID:LRWrSFoo
>>600
カニチャーハンに吹いた。
>>598
世に転がってるコードのほとんどがBSDソケット関連だからしょうがあるまいよ
2014/04/09(水) 12:45:03.71ID:Lf5xDRrs
cern httpdにNextSTEPのコードが残ってるのかな?調べる元気はないが
ttp://www.w3.org/Daemon/
2014/04/09(水) 14:05:10.90ID:Ih8FRvRW
aはBSD socket こっちがオリジナル
pはPOSIX
POSIXがpに変えた理由は分からん。atoi何かと共通でいいのにな。

>>609
NeXTSTEPで開発したと言っても、BSDシステムとして使ってるだけ。
ところどころNeXT亜種としてのifdefがある程度。
waitかwait3かwaitpidかとか。
2014/04/09(水) 14:32:24.39ID:ZHBwUHYP
>>610
なるほど
2014/04/09(水) 14:34:12.02ID:yn/sF65z
>>610
サーバ側はそうかもしれないけど、
クライアント側もNextStepフレームワークの機能をほぼ使ってなかったの?
613デフォルトの名無しさん
垢版 |
2014/04/09(水) 15:46:27.04ID:i8e/a0RW
>>610
POSIXで追加した関数がpになった?
POSIXでもaは残っているよね?
2014/04/10(木) 13:11:17.94ID:XJwbthao
>>612
>>609からの流れを無視してそんな答えの決まってる質問するなよ。
2014/04/10(木) 13:49:44.14ID:TvL1VyED
>>609>>600を理解せずに、頓珍漢な事を言い出しただけ
2014/04/10(木) 14:09:32.07ID:UW8P9M5z
>>606>>607>>609
普通の流れじゃないか?
2014/04/10(木) 14:50:52.67ID:J/8goZVV
>ウェブの質問をする場合はNeXTか?
ウェブといえばブラウザーの話な、これまめな
2014/04/10(木) 14:56:00.17ID:XJwbthao
つまらないボケのつもりなのか何なのか。
2014/04/10(木) 14:57:31.49ID:FMX8fFXB
つかタダでさえ人減ってるのにいがみ合ってどうすんだよ
2014/04/10(木) 14:58:53.83ID:HaZcfplR
>>612
使ってたよ。今のiOSのCocoa Touchにあたるものが既にあったからね。

当時大学でNeXTが使えたので一応リアルタイムで遊んだ。
しかし「所詮ハイパーテキストだろ」、と思った俺に先見の明はまるでなかった。
Gopherでエロ画像を配布・収集することに精を出していたのはいい思い出

その後NeXTからWebObjectが発表されて、ただの静的なハイパーテキストから
動的なWebアプリの概念が発展していった、と理解している。
2014/04/10(木) 15:47:15.93ID:J/8goZVV
Mosaicからしか知らん
tp://ftp.ncsa.uiuc.edu/Mosaic/
2014/04/10(木) 16:45:24.84ID:A86XAulB
そういやarchieを最後に使ったのがいつだったか思い出せないや
2014/04/10(木) 20:58:27.68ID:CGLbGtu7
どこまでタイムスリップしたらwwwの創始者になれるかな。
2014/04/10(木) 21:29:38.26ID:12EYUgzM
www
625デフォルトの名無しさん
垢版 |
2014/04/11(金) 09:27:55.52ID:I+yNGwZi
>>623
マジレスすると
そういう夢見るのも良いけど
20年後の世界標準(ω)になるものを
今から創造した方が楽しいぞ
2014/04/11(金) 10:02:34.34ID:F9N8K0IN
>>625
マジレスすると別に興味ない。
自分の開発環境が快適と思えればそれでいい。
627デフォルトの名無しさん
垢版 |
2014/04/11(金) 11:53:48.19ID:nfBS813s
今どき、サーバプログラムを作るときはどうするのがいいのかな
規模が小さいからxinetdで済ませたいんだけどそれでもいいんだろうか
628デフォルトの名無しさん
垢版 |
2014/04/11(金) 13:01:29.58ID:31jcxzSz
>>627
デーモンにするか、xinetd にするかは、
クライアント側からのアクセス頻度で決めるべき問題でしょ。

アクセス頻度が十分に多ければデーモンにすべきだし、
少なければ xinetd, inetd の方がいい。
2014/04/11(金) 17:18:05.86ID:aluZjTib
一般的に使われるものならinetdがないMac OS Xの事も考えてやってね。
代わりにlaunchdというのがある。
630デフォルトの名無しさん
垢版 |
2014/04/12(土) 11:46:22.55ID:0X1ZzDgt
ありがとう
inetd系でいくわ
2014/04/12(土) 15:25:30.45ID:hH6WyNhq
http://2;ch.sc/
2014/04/12(土) 15:56:33.94ID:EgrmLH2O
ひろゆきの宣伝うぜー。
10年前にあめぞうを荒らして2chに誘導したのと全く同じことをまたやろうとしてやがる。

全く変わらずクズだな、ひろゆき。
2014/04/12(土) 16:01:24.03ID:UapBJj1i
なるほどね

また鯖おちたね
634デフォルトの名無しさん
垢版 |
2014/04/30(水) 14:41:44.67ID:XBNt2TTL
----foo.sh----
#!/bin/sh
if [ bool処理 ];then
 exit 0
else
 exit 1
fi

----foo.c----
return = system("foo.sh");
if(WEXITSTATUS(return)){
 シェルスクリプトでexit 0の時の処理
}else{
 シェルスクリプトでexit 1の時の処理
}

このようにシェルスクリプトの終了ステータスで条件分岐したいのですが
いつもtrueになってしまいます。
どのようにすればいいでしょうか?
よろしくお願いします。
% uname
FreeBSD
2014/04/30(水) 15:45:33.66ID:BnmcVkVe
returnは予約語
WEXITSTATUSが非ゼロの場合のコメントが「exit 0の時」

実際に問題となったコードで出し直し
636デフォルトの名無しさん
垢版 |
2014/04/30(水) 15:55:27.10ID:23BUNUOn
http://d.hatena.ne.jp/XuHuang/touch/20070808/1186593679
2014/04/30(水) 16:47:23.85ID:+76j8OJU
2014/04/30(水) 18:11:15.11ID:ZY5HChQC
馬鹿には無理
639デフォルトの名無しさん
垢版 |
2014/05/06(火) 12:51:39.88ID:OFsDJUcu
Cで、標準入力と標準出力をひとつにして標準入出力としたい。
2014/05/06(火) 13:49:59.83ID:5cOP3XrV
すれば
2014/05/06(火) 13:52:48.20ID:OFsDJUcu
>>640
そうしたいのはやまやまだが
やり方がわからぬ
2014/05/06(火) 17:09:21.31ID:R4LFdeTL
unix ではプロセス間に生成されるパイプは基本リードまたはライトの一方向として生成されるからね‥‥
ふつうのディスクリプタのように双方向にすればいいのだが
2014/05/06(火) 18:55:48.96ID:G4//2ydq
>>641
こういうことをしたいの?

#include <stdio.h>
main()
{
    int   x;
    freopen("/dev/tty", "w+", stdin);
    freopen("/dev/tty", "w+", stdout);   // not used

    fprintf(stdin, "enter a number:"); fflush(stdin);
    fscanf(stdin,"%d", &x);
    fprintf(stdin, "number is %d\n", x);
}
2014/05/06(火) 19:01:55.55ID:G4//2ydq
fprintf, fscanf じゃなく printf, scanf の方がよかったか
2014/05/10(土) 14:44:23.71ID:W8dcXoh3
>>641
stdoutをfcloseしてから、fileno(stdin)をfdopenすればいい。
ただそれをstdoutとして使うのは処理系依存になる。
マルチスレッド対応のライブラリはstdoutに代入できなくなってるから。
fdreopenがあればいいのだが。
2014/05/10(土) 16:08:42.04ID:S6+Ypxbi
どういう使い方を想定していますか?
2014/05/10(土) 20:31:33.38ID:XNOk+z7r
>>646
ソケットやシリアルのディスクリプタを引数として
なんか通信して処理する関数があるとするじゃろ?

それに「標準入出力」を渡してTESUTOとかしたいのじゃ。
2014/05/10(土) 23:10:22.73ID:eu6ll0of
>>647
意味ねーよ、たぶん。
2014/05/11(日) 02:09:06.14ID:8Qasa1hM
xinetdなんか使うときにほしいな
2014/05/12(月) 15:49:13.01ID:iANYuL+Z
>>649
それは、stdin, stdoutにこだわらなければ、fdopenでなんとかなるしな。
>>647
テスト時はmainで切り替えるのも結構簡単。
2014/05/12(月) 16:42:43.61ID:7oRV1ywD
>>650
fdopenでなんとかなるっけ?
652デフォルトの名無しさん
垢版 |
2014/05/30(金) 18:57:46.01ID:1vuEEnaV
OpenBSD の diff コマンドのソースを
src.tar.gz というアーカイブの /usr/bin/diff から持ってきて、
わずかに修正後、cygwin でビルドには成功し、一応動作はするのですが、
「diff: : Cannot allocate memory」
というエラーが二回に一回くらい出ます。「:」は二つです。

これは何が原因で、どうやったら直せますか?


ソースの修正箇所は、__dead
・__dead void usage(void) の __dead が定義されていなかったので、
 #define __dead とした。

・fgetln() が宣言されていなかったようなので、
呼び出し箇所を my_fgetln() という名前に変更し、

/* $OpenBSD: util.c,v 1.23 2007/09/17 09:28:36 espie Exp $ */
/* $NetBSD: util.c,v 1.10 1996/12/31 17:56:04 christos Exp $ */

/*
* Copyright (c) 2001 Marc Espie.
*/
/* OPENBSD ORIGINAL: usr.bin/make/util.c */

と書かれた、fgeln() のソースを関数名を my_fgetln()に変更して追加した。
653デフォルトの名無しさん
垢版 |
2014/05/30(金) 19:05:18.54ID:1vuEEnaV
なお、diffのソース・フォルダで"Cannot" "allocate" "memory" と
いうキーワードを検索してみましたが、違うキーワードが含まれた
別の文字列の一部として存在しているだけでした。

「diff」という文字列を誰がどうやって表示しているのかさえ分かり
ません。__FILE__ マクロも検索してみましたが、見つかりません
でした。
2014/05/30(金) 19:10:41.56ID:SSvUP3u/
argv[0]
655デフォルトの名無しさん
垢版 |
2014/05/30(金) 19:31:55.39ID:1vuEEnaV
main() 関数の冒頭で、

{
char **oargv; // main のローカル変数
oargv = argv;
while ((ch = getopt_long(argc, argv, OPTIONS, longopts, NULL)) != -1) {
・・・
lastch = ch;
newarg = optind != prevoptind;
prevoptind = optind;
}
argc -= optind;
argv += optind;
・・・
set_argstr(oargv, argv);
・・・
}

のようになっており、oargv は上記以外では参照されておらず、
argv[0]を参照できる可能性が有るとすれば、
getopt_long() と set_argstr()
しかないようです。

これらの関数のうちどちらかが、メッセージを出しているのでしょうか?
2014/05/30(金) 20:04:01.04ID:SSvUP3u/
餅は餅屋
cygwinはcygwinから
657デフォルトの名無しさん
垢版 |
2014/05/31(土) 07:45:18.26ID:6bjDZoIF
OpenBSDのdiffソースをもってきた理由は、ライセンスの問題からです。

ところで、エラーの原因が判明しました。

set_argstr()の中で、argsize が負の値になり、xmalloc(argsize)
が内部で呼び出しているmalloc(argsize)に失敗し、err(2,NULL) を呼び、
err()が、malloc()が設定したグローバル変数 errno に応じたメッセージ
として「Cannot allocate memory」を出していたのでした。

なお、set_argstr(av,ave)のavには、main() に渡された状態の argv がそのまま
渡され、ave には、-オプションを除いた後にあるファイル名まで移動したargvの
値が渡されています。

どうも、OpenBSD では、argv[k] が、0終端文字列が隙間無く並べら
れている性質を利用しているようです。

argv[0],argv[1],argv[2],…
"cmd名",0,"-opt1",0,"-opt2",0,…,"file1",0,"file2",0

途中の 0x00 を0x20(空白)に置き換えるだけなので、argsize は、
そのままのバイト数で良いからこのようなコードになっている
ようです。4足しているのは"diff"という文字列のバイト数の分のようです。
658デフォルトの名無しさん
垢版 |
2014/05/31(土) 07:46:03.82ID:6bjDZoIF
【修正前】
void set_argstr(char **av, char **ave)
{
size_t argsize;
char **ap;

argsize = 4 + *ave - *av + 1;

diffargs = xmalloc(argsize);
strlcpy(diffargs, "diff", argsize);
for (ap = av + 1; ap < ave; ap++) {
if (strcmp(*ap, "--") != 0) {
strlcat(diffargs, " ", argsize);
strlcat(diffargs, *ap, argsize);
}
}
}
659デフォルトの名無しさん
垢版 |
2014/05/31(土) 07:46:54.80ID:6bjDZoIF
【修正後】
void set_argstr(char **av, char **ave)
{
size_t argsize;
char **ap;

argsize = 4; // "diff" 文字列の長さ
for (ap = av + 1; ap < ave; ap++) {
argsize += 1 + strlen( *ap ); // 間の空白 + 引数の文字数
}
argsize++; // 最後の NUL終端文字列

diffargs = xmalloc(argsize);
strlcpy(diffargs, "diff", argsize);
for (ap = av + 1; ap < ave; ap++) {
if (strcmp(*ap, "--") != 0) {
strlcat(diffargs, " ", argsize);
strlcat(diffargs, *ap, argsize);
}
}
}
660デフォルトの名無しさん
垢版 |
2014/05/31(土) 07:52:02.32ID:6bjDZoIF
なお、エラー表示に「diff」が表示されているのは、argv[0]を使って
いるわけではなく、ライブラリの err() 関数が自分でやってるんですね。

av に argv が渡されているので混乱しそうですが、たまたまです。
2014/05/31(土) 10:56:57.68ID:DtdLdmhz
ううむ。確かに試してみるとcygwinのargv[n]はバラバラなアドレスだな
2014/05/31(土) 14:38:59.00ID:iRT5FyvM
この糞なdiffのコードはargvがらみ以外にも地雷がたくさんありそう。
argvがらみでも/usr/bin/diffがargv[0]に渡されたらダメなんじゃないか?
4ってmagic numberが糞だから。
>>661
連続してることに依存したコードは糞。
2014/06/01(日) 00:52:00.45ID:MxSjB8Q5
>>662
なぜダメ?ソース見て言ってる?
2014/06/01(日) 00:57:21.10ID:MxSjB8Q5
というか、これぐらいで糞糞って言ってるのは初心者なんだろうな
2014/06/01(日) 02:19:51.86ID:e/SJ8pUJ
>>664
プロはクソでも美味しく調理してみせる ってだけで
クソはクソ、とくにそこに変わりはないだろ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況