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
探検
UNIXプログラミング質問すれ Part10
■ このスレッドは過去ログ倉庫に格納されています
1unco ◆manko/yek.
2011/04/18(月) 17:06:36.77612デフォルトの名無しさん
2014/04/09(水) 14:34:12.02ID:yn/sF65z613デフォルトの名無しさん
2014/04/09(水) 15:46:27.04ID:i8e/a0RW614デフォルトの名無しさん
2014/04/10(木) 13:11:17.94ID:XJwbthao615デフォルトの名無しさん
2014/04/10(木) 13:49:44.14ID:TvL1VyED616デフォルトの名無しさん
2014/04/10(木) 14:09:32.07ID:UW8P9M5z617デフォルトの名無しさん
2014/04/10(木) 14:50:52.67ID:J/8goZVV >ウェブの質問をする場合はNeXTか?
ウェブといえばブラウザーの話な、これまめな
ウェブといえばブラウザーの話な、これまめな
618デフォルトの名無しさん
2014/04/10(木) 14:56:00.17ID:XJwbthao つまらないボケのつもりなのか何なのか。
619デフォルトの名無しさん
2014/04/10(木) 14:57:31.49ID:FMX8fFXB つかタダでさえ人減ってるのにいがみ合ってどうすんだよ
620デフォルトの名無しさん
2014/04/10(木) 14:58:53.83ID:HaZcfplR >>612
使ってたよ。今のiOSのCocoa Touchにあたるものが既にあったからね。
当時大学でNeXTが使えたので一応リアルタイムで遊んだ。
しかし「所詮ハイパーテキストだろ」、と思った俺に先見の明はまるでなかった。
Gopherでエロ画像を配布・収集することに精を出していたのはいい思い出
その後NeXTからWebObjectが発表されて、ただの静的なハイパーテキストから
動的なWebアプリの概念が発展していった、と理解している。
使ってたよ。今のiOSのCocoa Touchにあたるものが既にあったからね。
当時大学でNeXTが使えたので一応リアルタイムで遊んだ。
しかし「所詮ハイパーテキストだろ」、と思った俺に先見の明はまるでなかった。
Gopherでエロ画像を配布・収集することに精を出していたのはいい思い出
その後NeXTからWebObjectが発表されて、ただの静的なハイパーテキストから
動的なWebアプリの概念が発展していった、と理解している。
621デフォルトの名無しさん
2014/04/10(木) 15:47:15.93ID:J/8goZVV Mosaicからしか知らん
tp://ftp.ncsa.uiuc.edu/Mosaic/
tp://ftp.ncsa.uiuc.edu/Mosaic/
622デフォルトの名無しさん
2014/04/10(木) 16:45:24.84ID:A86XAulB そういやarchieを最後に使ったのがいつだったか思い出せないや
623デフォルトの名無しさん
2014/04/10(木) 20:58:27.68ID:CGLbGtu7 どこまでタイムスリップしたらwwwの創始者になれるかな。
624デフォルトの名無しさん
2014/04/10(木) 21:29:38.26ID:12EYUgzM www
625デフォルトの名無しさん
2014/04/11(金) 09:27:55.52ID:I+yNGwZi626デフォルトの名無しさん
2014/04/11(金) 10:02:34.34ID:F9N8K0IN627デフォルトの名無しさん
2014/04/11(金) 11:53:48.19ID:nfBS813s 今どき、サーバプログラムを作るときはどうするのがいいのかな
規模が小さいからxinetdで済ませたいんだけどそれでもいいんだろうか
規模が小さいからxinetdで済ませたいんだけどそれでもいいんだろうか
628デフォルトの名無しさん
2014/04/11(金) 13:01:29.58ID:31jcxzSz >>627
デーモンにするか、xinetd にするかは、
クライアント側からのアクセス頻度で決めるべき問題でしょ。
アクセス頻度が十分に多ければデーモンにすべきだし、
少なければ xinetd, inetd の方がいい。
デーモンにするか、xinetd にするかは、
クライアント側からのアクセス頻度で決めるべき問題でしょ。
アクセス頻度が十分に多ければデーモンにすべきだし、
少なければ xinetd, inetd の方がいい。
629デフォルトの名無しさん
2014/04/11(金) 17:18:05.86ID:aluZjTib 一般的に使われるものならinetdがないMac OS Xの事も考えてやってね。
代わりにlaunchdというのがある。
代わりにlaunchdというのがある。
630デフォルトの名無しさん
2014/04/12(土) 11:46:22.55ID:0X1ZzDgt ありがとう
inetd系でいくわ
inetd系でいくわ
631デフォルトの名無しさん
2014/04/12(土) 15:25:30.45ID:hH6WyNhq http://2;ch.sc/
632デフォルトの名無しさん
2014/04/12(土) 15:56:33.94ID:EgrmLH2O ひろゆきの宣伝うぜー。
10年前にあめぞうを荒らして2chに誘導したのと全く同じことをまたやろうとしてやがる。
全く変わらずクズだな、ひろゆき。
10年前にあめぞうを荒らして2chに誘導したのと全く同じことをまたやろうとしてやがる。
全く変わらずクズだな、ひろゆき。
633デフォルトの名無しさん
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
#!/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
635デフォルトの名無しさん
2014/04/30(水) 15:45:33.66ID:BnmcVkVe returnは予約語
WEXITSTATUSが非ゼロの場合のコメントが「exit 0の時」
実際に問題となったコードで出し直し
WEXITSTATUSが非ゼロの場合のコメントが「exit 0の時」
実際に問題となったコードで出し直し
636デフォルトの名無しさん
2014/04/30(水) 15:55:27.10ID:23BUNUOn637デフォルトの名無しさん
2014/04/30(水) 16:47:23.85ID:+76j8OJU t
638デフォルトの名無しさん
2014/04/30(水) 18:11:15.11ID:ZY5HChQC 馬鹿には無理
639デフォルトの名無しさん
2014/05/06(火) 12:51:39.88ID:OFsDJUcu Cで、標準入力と標準出力をひとつにして標準入出力としたい。
640デフォルトの名無しさん
2014/05/06(火) 13:49:59.83ID:5cOP3XrV すれば
641デフォルトの名無しさん
2014/05/06(火) 13:52:48.20ID:OFsDJUcu642デフォルトの名無しさん
2014/05/06(火) 17:09:21.31ID:R4LFdeTL unix ではプロセス間に生成されるパイプは基本リードまたはライトの一方向として生成されるからね‥‥
ふつうのディスクリプタのように双方向にすればいいのだが
ふつうのディスクリプタのように双方向にすればいいのだが
643デフォルトの名無しさん
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);
}
こういうことをしたいの?
#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);
}
644デフォルトの名無しさん
2014/05/06(火) 19:01:55.55ID:G4//2ydq fprintf, fscanf じゃなく printf, scanf の方がよかったか
645デフォルトの名無しさん
2014/05/10(土) 14:44:23.71ID:W8dcXoh3 >>641
stdoutをfcloseしてから、fileno(stdin)をfdopenすればいい。
ただそれをstdoutとして使うのは処理系依存になる。
マルチスレッド対応のライブラリはstdoutに代入できなくなってるから。
fdreopenがあればいいのだが。
stdoutをfcloseしてから、fileno(stdin)をfdopenすればいい。
ただそれをstdoutとして使うのは処理系依存になる。
マルチスレッド対応のライブラリはstdoutに代入できなくなってるから。
fdreopenがあればいいのだが。
646デフォルトの名無しさん
2014/05/10(土) 16:08:42.04ID:S6+Ypxbi どういう使い方を想定していますか?
647デフォルトの名無しさん
2014/05/10(土) 20:31:33.38ID:XNOk+z7r648デフォルトの名無しさん
2014/05/10(土) 23:10:22.73ID:eu6ll0of >>647
意味ねーよ、たぶん。
意味ねーよ、たぶん。
649デフォルトの名無しさん
2014/05/11(日) 02:09:06.14ID:8Qasa1hM xinetdなんか使うときにほしいな
650デフォルトの名無しさん
2014/05/12(月) 15:49:13.01ID:iANYuL+Z651デフォルトの名無しさん
2014/05/12(月) 16:42:43.61ID:7oRV1ywD >>650
fdopenでなんとかなるっけ?
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()に変更して追加した。
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__ マクロも検索してみましたが、見つかりません
でした。
いうキーワードを検索してみましたが、違うキーワードが含まれた
別の文字列の一部として存在しているだけでした。
「diff」という文字列を誰がどうやって表示しているのかさえ分かり
ません。__FILE__ マクロも検索してみましたが、見つかりません
でした。
654デフォルトの名無しさん
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()
しかないようです。
これらの関数のうちどちらかが、メッセージを出しているのでしょうか?
{
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()
しかないようです。
これらの関数のうちどちらかが、メッセージを出しているのでしょうか?
656デフォルトの名無しさん
2014/05/30(金) 20:04:01.04ID:SSvUP3u/ 餅は餅屋
cygwinはcygwinから
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"という文字列のバイト数の分のようです。
ところで、エラーの原因が判明しました。
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);
}
}
}
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);
}
}
}
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 が渡されているので混乱しそうですが、たまたまです。
いるわけではなく、ライブラリの err() 関数が自分でやってるんですね。
av に argv が渡されているので混乱しそうですが、たまたまです。
661デフォルトの名無しさん
2014/05/31(土) 10:56:57.68ID:DtdLdmhz ううむ。確かに試してみるとcygwinのargv[n]はバラバラなアドレスだな
662デフォルトの名無しさん
2014/05/31(土) 14:38:59.00ID:iRT5FyvM この糞なdiffのコードはargvがらみ以外にも地雷がたくさんありそう。
argvがらみでも/usr/bin/diffがargv[0]に渡されたらダメなんじゃないか?
4ってmagic numberが糞だから。
>>661
連続してることに依存したコードは糞。
argvがらみでも/usr/bin/diffがargv[0]に渡されたらダメなんじゃないか?
4ってmagic numberが糞だから。
>>661
連続してることに依存したコードは糞。
663デフォルトの名無しさん
2014/06/01(日) 00:52:00.45ID:MxSjB8Q5 >>662
なぜダメ?ソース見て言ってる?
なぜダメ?ソース見て言ってる?
664デフォルトの名無しさん
2014/06/01(日) 00:57:21.10ID:MxSjB8Q5 というか、これぐらいで糞糞って言ってるのは初心者なんだろうな
665デフォルトの名無しさん
2014/06/01(日) 02:19:51.86ID:e/SJ8pUJ666652
2014/06/01(日) 13:29:53.55ID:uUGuheMf OpenBSD の diff ソースは、本質的に複雑な処理の割にはソースが驚くほど
短いです。正直言って、腕のよさを感じました。ソースは:
diff.c 11KB
diffdir.c 7KB
diffreg.c 39KB
xmalloc.c 3KB
の4つしかソースが無く、本質的には、diffreg.c のみの 1522 行しか
ありません。こんなに簡潔に書ける人は、世界でも余りいないのではない
でしょうか?
ただし、
・複数の変数を同一行でカンマで区切って宣言している。
・ローカル変数の名称には1文字など、とても短い物が多い。
・if () で処理が一行の場合、ブロック {} にせずに書いてある。
・空行が少ない。
などの特徴があります。
短いです。正直言って、腕のよさを感じました。ソースは:
diff.c 11KB
diffdir.c 7KB
diffreg.c 39KB
xmalloc.c 3KB
の4つしかソースが無く、本質的には、diffreg.c のみの 1522 行しか
ありません。こんなに簡潔に書ける人は、世界でも余りいないのではない
でしょうか?
ただし、
・複数の変数を同一行でカンマで区切って宣言している。
・ローカル変数の名称には1文字など、とても短い物が多い。
・if () で処理が一行の場合、ブロック {} にせずに書いてある。
・空行が少ない。
などの特徴があります。
667デフォルトの名無しさん
2014/06/01(日) 15:42:24.51ID:fiMuA4/7668652
2014/06/01(日) 18:18:52.63ID:uUGuheMf このdiffに関して、プログラミング技術の秀逸さ以外にソースが
短い理由があるとする666に書いたことに加えて、
・getopt() を使ってオプションの処理が短く出来ている。
・pread() を使って、lseek(), read()に分けずに書けている。
・正規表現ライブラリを使っている。
・fnmatch()なるワイルドカード式のパターンマッチテストを
使っている。
もあるようです。
短い理由があるとする666に書いたことに加えて、
・getopt() を使ってオプションの処理が短く出来ている。
・pread() を使って、lseek(), read()に分けずに書けている。
・正規表現ライブラリを使っている。
・fnmatch()なるワイルドカード式のパターンマッチテストを
使っている。
もあるようです。
669652
2014/06/01(日) 18:20:16.83ID:uUGuheMf670652
2014/06/01(日) 18:38:13.52ID:uUGuheMf さらに:
・goto 文を使っている。
・goto 文を使っている。
671デフォルトの名無しさん
2014/06/03(火) 06:34:30.54ID:mwJyftym gotoは、finallyの代わりに、エラー処理で使う場合や、
2重ループを一気に抜け出す場合はOK
2重ループを一気に抜け出す場合はOK
672デフォルトの名無しさん
2014/08/05(火) 09:27:23.16ID:wh+qTY5L MonoBehaviourの読み方が気になってプログラミングに集中できません
どなたか教えて下さい!
どなたか教えて下さい!
673デフォルトの名無しさん
2014/08/05(火) 13:21:49.58ID:AfbB56Nf モゥノゥ・ビヘイヴュア
674デフォルトの名無しさん
2014/08/05(火) 13:24:41.41ID:AfbB56Nf 英和辞書の発音記号を見ればいいだろう
675デフォルトの名無しさん
2014/08/05(火) 13:37:09.15ID:v4Qe9qZY >>672
今頃気がついたが、
ここはUnixプログラミング質問スレであって
Unityプログラミング質問スレじゃねぇ!wwww
今頃気がついたが、
ここはUnixプログラミング質問スレであって
Unityプログラミング質問スレじゃねぇ!wwww
676デフォルトの名無しさん
2014/08/05(火) 17:46:28.53ID:X8aW0ARF 分かりづらいボケだな 嫌いじゃない
677デフォルトの名無しさん
2014/08/06(水) 22:36:42.77ID:ZYxq9t1Q /tmp/test/下に20140801.txt〜20140805.txt
があるときに以下のシェルを流すと
------------------------------
#!/bin/sh
files="/tmp/test/"
for a in {20140801,20140806}
do
for filepath in ${files}*${a}*
do
echo ${filepath}
done
done
------------------------------
/tmp/test/20140801.txt
/tmp/test/*20140806*
と表示されてしまいます。
20140806.txtは存在しないので
/tmp/test/*20140806*
が表示される理由が分かりません。
これを表示しないようにしたいのですが、
if文で存在確認するくらいしかないでしょうか?
があるときに以下のシェルを流すと
------------------------------
#!/bin/sh
files="/tmp/test/"
for a in {20140801,20140806}
do
for filepath in ${files}*${a}*
do
echo ${filepath}
done
done
------------------------------
/tmp/test/20140801.txt
/tmp/test/*20140806*
と表示されてしまいます。
20140806.txtは存在しないので
/tmp/test/*20140806*
が表示される理由が分かりません。
これを表示しないようにしたいのですが、
if文で存在確認するくらいしかないでしょうか?
678デフォルトの名無しさん
2014/08/06(水) 23:31:46.47ID:XlJsEfbX コマンドライン展開じゃないから
for filepath in ${files}*${a}*
のin句にテキストとして ${files}*${a}* の結果として "/tmp/test/*20140806*"が展開されているだけじゃないの?
for filepath in ${files}*${a}*
のin句にテキストとして ${files}*${a}* の結果として "/tmp/test/*20140806*"が展開されているだけじゃないの?
679デフォルトの名無しさん
2014/08/06(水) 23:44:01.31ID:ZYxq9t1Q >>678
なるほど。コマンドライン展開したらできました。
ありがとうございます。
------------------------------
!/bin/sh
files="/tmp/test/"
for a in {20140801,20140806}
do
for filepath in `find ${files} -name ${a}*`
do
echo ${filepath}
done
done
------------------------------
なるほど。コマンドライン展開したらできました。
ありがとうございます。
------------------------------
!/bin/sh
files="/tmp/test/"
for a in {20140801,20140806}
do
for filepath in `find ${files} -name ${a}*`
do
echo ${filepath}
done
done
------------------------------
680デフォルトの名無しさん
2014/08/06(水) 23:47:40.87ID:JVlCh9Ly *は何もマッチしないときはそのまま*になる。
一般的には、確かに、ファイルの存在確認をするとかになるんじゃ。
シェルによっては*の挙動を変えられたはず。
一般的には、確かに、ファイルの存在確認をするとかになるんじゃ。
シェルによっては*の挙動を変えられたはず。
681デフォルトの名無しさん
2014/08/07(木) 00:09:15.66ID:mcWZAFW+682デフォルトの名無しさん
2014/08/07(木) 00:35:24.70ID:WSmP9CNZ 天才のみなさん教えてください。
「fork」した子プロセスで「popen」したのですが、「pclose」で終えると、「errno」に「29(ESPIPE)」が設定されていました。
以降の処理では前出のエラーによる影響は無く、正常に終了しているに見えるのですが、
子プロセスで「popen」は使用するべきではないのでしょうか?
ご教示お願いいたします。
「fork」した子プロセスで「popen」したのですが、「pclose」で終えると、「errno」に「29(ESPIPE)」が設定されていました。
以降の処理では前出のエラーによる影響は無く、正常に終了しているに見えるのですが、
子プロセスで「popen」は使用するべきではないのでしょうか?
ご教示お願いいたします。
683デフォルトの名無しさん
2014/08/07(木) 01:51:37.36ID:QaqdPvt4 error 29 espipe
ttp://docs.oracle.com/cd/E19455-01/806-2720/x-94fni/index.html
lseek(2)はパイプに対して使えないので、
一旦ファイルに書き込んでから、そのファイルに対して使う
ttp://docs.oracle.com/cd/E19455-01/806-2720/x-94fni/index.html
lseek(2)はパイプに対して使えないので、
一旦ファイルに書き込んでから、そのファイルに対して使う
684デフォルトの名無しさん
2014/08/07(木) 09:06:04.03ID:gf97lcsK685682
2014/08/07(木) 10:21:02.27ID:Nj16SWmn686デフォルトの名無しさん
2014/08/07(木) 11:01:30.95ID:56isn469 >>685
どちらも問題ない
どちらも問題ない
687682
2014/08/07(木) 11:58:56.21ID:Nj16SWmn >>686
ありがとうございました。
ありがとうございました。
688デフォルトの名無しさん
2014/08/07(木) 14:54:41.05ID:FIDAVWXd 恐ろしい罠だった
689デフォルトの名無しさん
2014/08/08(金) 00:48:08.28ID:W2uIddTc 正常終了した後に、errnoを見たの?
何じゃそれ!
何じゃそれ!
690デフォルトの名無しさん
2014/08/09(土) 11:23:56.87ID:B1dFLZrJ 正常終了したときもerrnoセットしろよ
何のためのE_OKだよ殺すぞクソが
と思ったことはあるのでバカにしたりしない。
何のためのE_OKだよ殺すぞクソが
と思ったことはあるのでバカにしたりしない。
691デフォルトの名無しさん
2014/08/09(土) 11:37:13.03ID:Mi20wbO0 どんなコード書いてるのかな?
692デフォルトの名無しさん
2014/08/12(火) 06:15:41.33ID:7nSDT24w try{
ここでエラーが発生した時のみ、errnoを設定し、catchへ飛ぶ
}catch{
ここでerrnoを参照
}
C++風に表現すれば、正常時にはerrnoは設定されていないし、
catchブロックも通らないから、errnoを参照できない
ここでエラーが発生した時のみ、errnoを設定し、catchへ飛ぶ
}catch{
ここでerrnoを参照
}
C++風に表現すれば、正常時にはerrnoは設定されていないし、
catchブロックも通らないから、errnoを参照できない
693デフォルトの名無しさん
2014/08/12(火) 17:15:08.49ID:hsJ6ic3B694デフォルトの名無しさん
2014/08/13(水) 10:46:20.48ID:03jARyf4 if(result==1)result=errno;
みたいに正規化してから処理るといいよ
みたいに正規化してから処理るといいよ
695デフォルトの名無しさん
2014/08/13(水) 10:49:25.22ID:03jARyf4 マイナス書き忘れた
まあいいや
まあいいや
696デフォルトの名無しさん
2014/08/20(水) 06:24:54.38ID:L79Zu2V+697デフォルトの名無しさん
2014/09/01(月) 11:59:31.72ID:5QQ1Caz+ Xlibについて質問します。
ウィンドウ・マネージャを使用する一般的な環境では、ウィンドウの淵をドラッグすると
ConfigureNotifyを受け取ることができます。
ところで、ドラッグの開始と終了を知ることができる通知は受けられますか?
Win32APIで言うところのWM_ENTERSIZEMOVEとWM_EXITSIZEMOVEに相当するものを
探しています。
あるいは何らかの方法で知ることは出来ますか?
よろしくおねがいします。
ウィンドウ・マネージャを使用する一般的な環境では、ウィンドウの淵をドラッグすると
ConfigureNotifyを受け取ることができます。
ところで、ドラッグの開始と終了を知ることができる通知は受けられますか?
Win32APIで言うところのWM_ENTERSIZEMOVEとWM_EXITSIZEMOVEに相当するものを
探しています。
あるいは何らかの方法で知ることは出来ますか?
よろしくおねがいします。
698デフォルトの名無しさん
2014/09/09(火) 23:38:03.45ID:/ZjY2rNK xlibにdragなんて高級なイベントはないです。
自分でdragと何であるか定義して、そのように自分で書いたコードで解釈してください。
自分でdragと何であるか定義して、そのように自分で書いたコードで解釈してください。
699デフォルトの名無しさん
2014/09/10(水) 21:03:14.76ID:zerYkwqt よく知らんけどDNDを使うらしい
もちろんツールキットならドラッグ&ドロップサポートしてる思うが
もちろんツールキットならドラッグ&ドロップサポートしてる思うが
700デフォルトの名無しさん
2014/12/23(火) 17:29:19.99ID:BQHHJ9UZ ところで、viってなんであんなに変態的な操作感なんでしょうか?
701デフォルトの名無しさん
2014/12/23(火) 18:48:55.43ID:g0vcdaad ところで、emacsってなんであんなに変態的な操作感なんでしょうか?
702デフォルトの名無しさん
2014/12/23(火) 18:52:34.58ID:SVPjuZy1 カスタムできるんだから、設定した、またはしてない自分が変態ってことだ。
703デフォルトの名無しさん
2014/12/23(火) 19:03:45.03ID:BQHHJ9UZ ただのカーソル移動のためにESCでコマンドモードに戻る必要がある点が
素晴らしく変態的だと感じるのですが、皆さんのご感想はいかがでしょうか?
素晴らしく変態的だと感じるのですが、皆さんのご感想はいかがでしょうか?
704デフォルトの名無しさん
2014/12/23(火) 19:06:48.73ID:BQHHJ9UZ 今、あらためてviをものすごく久しぶりに使ってみたのですが、
insertモードで普通にカーソルキーでカーソル移動できますねw
行追加や行削除もできちゃいます
これならいいっすw
勘違いだったのかなぁ。。前はもっと使いにくかった気がしたのですが。
insertモードで普通にカーソルキーでカーソル移動できますねw
行追加や行削除もできちゃいます
これならいいっすw
勘違いだったのかなぁ。。前はもっと使いにくかった気がしたのですが。
705デフォルトの名無しさん
2014/12/23(火) 19:15:34.69ID:1AeA5HA2706デフォルトの名無しさん
2014/12/23(火) 19:25:20.96ID:BQHHJ9UZ >>705
すみません、いちおうvimです
触ってみたのはVIM 7.3です
ちょっと懐かしくなっていろいろいじり始めたのですが、
Windows Tera termのssh経由だと、挙動が違って、insertモードで
カーソルキーが効かなかったり(AとかBとか入力される)
文字が消せなかったり
前経験したイケてない感じに似てます
すみません、いちおうvimです
触ってみたのはVIM 7.3です
ちょっと懐かしくなっていろいろいじり始めたのですが、
Windows Tera termのssh経由だと、挙動が違って、insertモードで
カーソルキーが効かなかったり(AとかBとか入力される)
文字が消せなかったり
前経験したイケてない感じに似てます
707デフォルトの名無しさん
2014/12/23(火) 22:25:53.16ID:u51zFo5t >>706 ひょっとすると :set nocompatible でなおったりしませんか(自信ないけど)?
// ノーマルモードに戻ったほうが単語単位とかいろんな動き方ができて結局有利
// ノーマルモードに戻ったほうが単語単位とかいろんな動き方ができて結局有利
708デフォルトの名無しさん
2014/12/23(火) 22:34:24.66ID:BQHHJ9UZ709デフォルトの名無しさん
2014/12/23(火) 22:39:03.14ID:BQHHJ9UZ710デフォルトの名無しさん
2014/12/24(水) 11:12:32.34ID:Mlxryodi >>708-709 おおそれはなによりです。vimrc 作っとくとそれだけで自動的に nocompatible になるので便利
ハッピークリスマス!
ハッピークリスマス!
711デフォルトの名無しさん
2015/02/04(水) 04:25:26.78ID:2A4M88bu MacOS X 10.8.5でpollがうまく動作せず、困っています。
lessなどのpagerで、標準入力をpipeからttyに切り替えるために、
/dev/ttyをstdinにdupする処理をしていますが、Macではその後の
stdinに対する有限時間のpollがタイムアウトしなくなります。
サンプルコードはこんな感じです。
#include <fcntl.h>
#include <poll.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main() {
char *ttyold, *ttynew;
int fd;
struct pollfd pfd[1];
ttyold = strdup(ttyname(STDIN_FILENO));
fd = open("/dev/tty", O_RDONLY);
dup2(fd, STDIN_FILENO);
close(fd);
ttynew = strdup(ttyname(STDIN_FILENO));
printf("old:%s, new:%s\n", ttyold, ttynew);
pfd[0].fd = STDIN_FILENO;
pfd[0].events = POLLIN;
if (poll(pfd, 1, 1000) == 0)
printf("timeout\n");
return 0;
}
lessなどのpagerで、標準入力をpipeからttyに切り替えるために、
/dev/ttyをstdinにdupする処理をしていますが、Macではその後の
stdinに対する有限時間のpollがタイムアウトしなくなります。
サンプルコードはこんな感じです。
#include <fcntl.h>
#include <poll.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main() {
char *ttyold, *ttynew;
int fd;
struct pollfd pfd[1];
ttyold = strdup(ttyname(STDIN_FILENO));
fd = open("/dev/tty", O_RDONLY);
dup2(fd, STDIN_FILENO);
close(fd);
ttynew = strdup(ttyname(STDIN_FILENO));
printf("old:%s, new:%s\n", ttyold, ttynew);
pfd[0].fd = STDIN_FILENO;
pfd[0].events = POLLIN;
if (poll(pfd, 1, 1000) == 0)
printf("timeout\n");
return 0;
}
712711
2015/02/04(水) 04:26:55.16ID:2A4M88bu (承前)
NetBSD, FreeBSD, Linux, Solarisでは1秒間でタイムアウトします。
BSDとLinuxでは/dev/ttyをオープンすると、実際に使用中のttyを
開きますが、MacとSolarisは/dev/ttyそのものがopenされるようです。
Mac上で/dev/ttyではなく、元のttyデバイスを明示的にopenして
stdinにdupすると、pollはタイムアウトするようになります。
これはOS Xのバグでしょうか?
NetBSD, FreeBSD, Linux, Solarisでは1秒間でタイムアウトします。
BSDとLinuxでは/dev/ttyをオープンすると、実際に使用中のttyを
開きますが、MacとSolarisは/dev/ttyそのものがopenされるようです。
Mac上で/dev/ttyではなく、元のttyデバイスを明示的にopenして
stdinにdupすると、pollはタイムアウトするようになります。
これはOS Xのバグでしょうか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 【卓球】早田ひな、「総額100万スられた」「ずっと憧れていたスペインとイタリア…」ヨーロッパ旅行で悲劇 スリ被害を告白 [muffin★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 日経平均の下落率3%超す、財政懸念で長期金利上昇 ★2 [お断り★]
- 【実況】博衣こよりのえちえち歌枠🧪★2
- 【画像】外務省局長「この度はうちの🦎がすみません…」中国「……」 [165981677]
- 産経新聞「高市早苗の答弁さぁ……思慮が足りてなくね?官僚と詰めずに思いつきで話しているでしょ」 [175344491]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【雑談】暇人集会所part18
- 外務省局長、よくわからないまま帰国へ [834922174]
