|
>>3102 68user > ソースを見ると -not は効きそうなんだけれども。 そっか。 options はソートされていることが前提なのに (bsearch(3) に渡すから)、 { "-nouser",c_nouser,f_nouser,0 }, { "-not",c_simple,f_not,0 }, の順で並んでいるからか。 # http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/find/option.c?rev=HEAD |
|
ありがとうございます。 大変もうしわけありませんが、もう一つ教えていただけないでしょうか? SSLでの通信も行っているのですが、SSL_write()を使用する際に タイムアウトの時間を設定したいのですが、方法がわかりません。 selectを使えばできるとも聞いたのですが、具体的にどうすればよいでしょうか ソースは以下の様です。 MaxLENGTH = strlen(psz); while(sendbytes < MaxLENGTH){ syslog(LOG_DEBUG,"Send"); nSended = SSL_write(SOKET, psz, strlen(psz)); if(nSended == -1){ perror("SendError:"); s_vMsgSnd(TSK_ER , 71 , 57); return -1; psz+=nSended; sendbytes+=nSended; } return 0; } お手数ですがよろしくお願いします。 |
|
ESPIPEの件は、また別のところで起こっていたようです。 仰る通り、sendによるものではありませんでした。 お手数をおかけしました。 |
|
そういや(質問でも答でもなく雑談ですが、いいんですかね) せっかく自分のサーバー立てたんだから、XML::DOM 入れてみよう!(^^) |
|
>>3110 wataru > ESPIPEの件は、また別のところで起こっていたようです。 しょーもないミスですが、ありがちですね。 >>3109 wataru > SSLでの通信も行っているのですが、SSL_write()を使用する際に > タイムアウトの時間を設定したいのですが、方法がわかりません。 使ったことはありませんが、 http://www.openssl.org/docs/ssl/SSL_CTX_set_timeout.html とか、 http://www.openssl.org/docs/ssl/SSL_get_fd.html でディスクリプタを取得して select とか、あるいは単純に alarm とか、でしょうか。 |
|
こんばんわ CGIのフォームメールで添付ファイルを送っているのですが 途中で通信を中止すると サーバー上にファイルが残ってしまうということに悩まされています そのフォームメールはQMAILを用いてメールを配信しています POPサーバーはVPOPMAILです 対処法はなにかありますでしょうか? |
|
>>3113 Japper シグナルをキャッチするという方法もありますが、単にファイルを 消したいだけなら - 送信し終わったらファイル名をリネーム or ファイルの置き場所を 変える (mv) - フォームメールが起動したとき、リネーム前 or 実行途中の置き場所 にあるファイルで、タイムスタンプが古いものを消す。 が単純でよいと思います。 |
|
親プロセスでFILE* fpに対してファイルをオープンします。 その後、forkで子プロセスを生成し、子プロセスですぐにfclose(fp)を行います。(子プロセスではファイルを使用しない為。) 子プロセスでファイルをfcloseした後、親プロセスでは引き続きfpに対して読み込みや書き込みを行えるでしょうか。 ファイルディスクリプタは、子プロセスで閉じても親プロセスに影響無いようですが、ファイルポインタは共有されている(?)様なので影響がありそうな気がするのですが、いかがでしょうか。 ■知りたい事 1.最終的に親と子でそれぞれfclose(fp)を行う必要があるか。 (開いたものは必要であれば明示的に閉じるようにしたい。) 2.子プロセスでfcloseしても、親プロセスのfpに影響がないか。 よろしくお願い致します。 |
|
>>3115 koko > 1.最終的に親と子でそれぞれfclose(fp)を行う必要があるか。 > 2.子プロセスでfcloseしても、親プロセスのfpに影響がないか。 fork したときの出力用バッファにデータがたまっていれば、子の fclose でバッファがフラッシュされます。そこで親も fclose すれば 同じ内容のバッファがファイルに出力され、同じ内容のデータが 2回書かれることになります。 なお fclose(3) しなかったとしても、exit(3) すれば結局は fclose されます。 # _exit(2) ならされません。 よって、 1. fflush(fp) 2. fork 3. 子は fclose (*A)、親は引き続き fp を使う がよろしいかと。 *A は、してもしなくても変わりませんが、子で使わないという 意志を明確に示すために fclose(3) した方がよいと僕は思います。 |
|
>>3115 koko 早速回答頂き、ありがとうございます。 動作を確認しましたところ、fflushしないと二重でデータが書き込まれていました。 fflushして回避する事にします。 もうひとつ、教えて頂けますでしょうか。 FILE*ではなく、ファイルディスクリプタに対してopen、write、closeで同じ事をした場合、ファイルディスクリプタはバッファリングされないのでfflushのような事をしなくても二重書き込みにはならないでしょうか。 実は、FILE*とファイルディスクリプタの両方を使用して同じ事をしている為、ちょっと心配になりました。 実動作を見た限りでは、ファイルディスクリプタは二重で書き込まれていない様なので大丈夫だとは思いますが...。 よろしくお願い致します。 |
|
>>3316 tomotomo No.3317は>>3316の間違いです。 すいません。 |
|
>>3117 koko > ファイルディスクリプタはバッファリングされないのでfflushのような事を > しなくても二重書き込みにはならないでしょうか。 されません。低レベル入出力システムコールはバッファリングが ないので大丈夫です。 |
|
>>3119 68user 回答頂き、ありがとうございます。 安心しました。 |
|
>>3114 68user ご回答ありがとうございました 大変助かりました さて、findコマンドでファイルを検索をかけていますが 大きいファイル順に並べ替えるなど そのようなことはできないでしょうか? |
|
C言語のプログラムでsystem関数でプログラムを呼び出します。 引数に存在しないプログラムを指定した場合のsystem関数の戻り値が-1になる時と256になる時があります。 256の時は、上位8ビットが1なのでシェルのexitコードが1のような気がするのですが、何も環境を変えていないのに戻り値が-1や256に変わる理由が思い浮かびません。 何度も繰り返していると-1と256が不規則に交互します。 この情報だけで何か分かりますでしょうか。 よろしくお願いします。 |
|
>>3121 Japper > さて、findコマンドでファイルを検索をかけていますが > 大きいファイル順に並べ替えるなど 大きいってファイルサイズのことですか? もしそうなら find . -ls | sort +7 とか。 >>3122 koko > system関数の戻り値が-1になる時と256になる時があります。 FreeBSD の system(3) がおっしゃるには The system() function returns the exit status of the shell as returned by waitpid(2), or -1 if an error occurred when invoking fork(2) or waitpid(2). A return value of 127 means the execution of the shell failed. だそうです。 |