UNIX関数?(popen)について
Cプログラムでpopen関数?を使用しコマンド(rcp)を実行するプログ
ラムを造ったのですが、当分が動作していたのですが、何のタイミングか分からないのですが、失敗する時が有ります。一度失敗するとそれ以降はずーと失敗します
。どのような原因が考えられるのでしょうか?
ちなみにプログラムの一部をとりあえずのせておきます。(ファイル名及び相手先
のディレクトリ名は現状存在します)
又、system関数とpopen関数の大きな違いは何でしょうか?
ご教示お願い致します。
(cプログラムの一部)
char buff[256] ;
char cmnd[256] ; /* コマンド文字列 */
int fp_rtc ;
memset( buff, NULL, sizeof(buff) ) ;
memset( cmnd, NULL, sizeof(cmnd) ) ;
strcpy( buff, argv[1] ) ;
sprintf(cmnd, RCP_FMT , buff, RCP_DIR, buff ) ;
printf( "rcp cmnd ( %s )\n", cmnd ) ;
fp = popen(cmnd, "r") ;
fflush(stdout) ;
fp_rtc = pclose(fp) ;
if ( fp_rtc != 0 ){
printf( "pclose err [ rtc:%d ] \n", fp_rtc ) ;
}
補足
Cの処理系はgccです。 プログラムの全文は下記にある前半のプログラムです。 http://www.fireproject.jp/feature/c-language/pipe/open-close.html perror("popen"); を入れましたら popen No error になりましたが、画面には何も出ません。 以上、よろしくお願いします。 include "stdlib.h" #include "stdio.h" #define BUFSIZE 100 /* 出力用関数 */ int output(char *buffer); int main(void) { /* 読み込み用パイプ */ FILE *in_pipe; /* 読み込み用バッファ */ char buffer[BUFSIZE + 1]; int readed_num; /* バッファを初期化 */ memset(buffer,'\0',sizeof(buffer)); /* パイプを読み込みモードで開く */ in_pipe = popen("date","r"); /* 処理は通常のファイルストリームと同様に扱える */ if(in_pipe != NULL){ readed_num = fread(buffer,sizeof(char),BUFSIZE,in_pipe); while(readed_num > 0){ output(buffer); readed_num = fread(buffer,sizeof(char),BUFSIZE,in_pipe); } fflush(stdout); /* 忘れずに閉じる */ pclose(in_pipe); exit(EXIT_SUCCESS); } else { /*fprintf(stderr, "popen error");*/ perror("popen"); } exit(EXIT_FAILURE); } /* 出力用関数 */ int output(char *buffer) { while(*buffer != '\0'){ if(*buffer == ' '){ fprintf(stdout,"\n"); buffer++; }else{ fprintf(stdout,"%c",*buffer++); } } return 0; }