私のプログラムに少し問題がありますが、解決方法はわかりません。 getopt
(引数なし)を含まない限り、私のプログラムは正常に動作します。 stdout/stdinとパラメータ
Serverはstdout
に数字を書き込み、クライアントがstdin
でそれらを読んでください2つの、簡単なプログラムを書きました。
さらに、プログラムは引数(パラメータ)で呼び出すことができるはずです。プログラムの呼び出しのようになります例えば
:私は、プログラムを実行すると
Terminal: ./Server -f72 | ./Client -r22
それだけで印刷し、引数「22」と「彼女をr」と「サーバーを待っています"しかし、それはサーバーから番号を印刷する必要があります
私は間違いを見つけることができません。私は本当にあなたの助けに感謝します。それを読んだすべての人に事前に感謝します。
サーバー:
int main(int argc , char *argv[])
{
int i;
FILE *ziel;
ziel=stdout;
int option;
char buf[50];
while ((option = getopt(argc, argv,"f:tr:d:j")) != -1)
{
switch (option)
{
case 'f' :
strcpy(buf,optarg);
break;
case 't' :
break;
case 'r' :
strcpy(buf,optarg);
break;
default:
//printf("1ERROR");
exit(EXIT_FAILURE);
}
}
for(i=1;i>0;i++)
{
fprintf(ziel,"%d\n",i);
sleep(1);
}
return 0;
}
クライアント:
int main(int argc , char *argv[])
{
FILE* cl;
cl=stdin;
int i;
int zahl[10];
int option;
char buf[50];
while ((option = getopt(argc, argv,"f:tr:")) != -1)
{
switch (option)
{
case 'f' :
puts("Here is f");
strcpy(buf,optarg);
puts(buf);
break;
case 't' :
puts("Here is t");
break;
case 'r' :
puts("Here is r");
strcpy(buf,optarg);
puts(buf);
break;
default:
printf("ERROR");
exit(EXIT_FAILURE);
}
}
puts("Waiting for Server");
for(i=0;i<10;i++)
{
fscanf(cl,"%d",&zahl[i]);
printf("Received %d\n ",zahl[i]);
}
return 0;
}
) './Server -f72'を実行すると数字が正しく表示されますか? –
はい。私は別のプログラムでも、パラメータが重要であり、パイプでは引数の文字列を出力するプログラムを使用しています。 – Mossi
これは上の例で動作しますか?その場合、それは[mcve]ではありません。他のプログラムが 'stdout'ではなく' stderr'を使用していると確信していますか?実際のケースとコンソールの出力をポストする必要があります。あなたは 'getopt'が犯人であることを本当に確信していますか?私はそれを真剣に疑うからです。 –