2012-01-19 15 views
1

私はLinuxでcで単純なファイルサーバーを作成しようとしています。アイデアは、私はクライアント側のサーバーから転送されるファイルの名前を入力することです。サーバーは、接続が確立されるとそのファイル名を受け取ります。しかし、私が渡す引数は常に、現在のディレクトリの最初のファイルを開きます。それはすぐにwhileループを脱出だcプログラムを使ってlinuxでディレクトリを読む

if(strcmp(buf,dptr->d_name)==0) { 
    break; 
} 

:これは

getcwd(buf3, sizeof(buf3)); 
dirp = opendir(buf3); 

while (dptr = readdir(dirp)) { 
    if (strcmp(buf, dptr->d_name) == 0); 
     break; 
    printf("%s\n", dptr->d_name); 
} 

string(dptr->d_name); 
f = fopen(namelist[n1]->d_name, "r"); 

//f1=fopen(buf,"r"); 
if (f1 == NULL) 
    err_sys("open error"); 

while (1)   //service client till it closes connection 
{ 
    fgets(buf2, 50, f1); 

    buflen = strlen(buf2); 
    printf("Data Read From File: %d\n", buflen); 

    if ((n = send(clifd, buf2, buflen, 0)) < 0) 
     err_sys("send error"); 
    else if (n == 0) { 
     printf("\nNo Data Recieved"); 
     break; 
    } 

    buf2[n] = 0; 
};    //end of inner while 

close(clifd); 
fclose(f1); 
exit(0); 
+0

あなたの問題は、fopen(namelist ...)が期待するディレクトリからファイルを開けないということですか? namelist [n1] - > d_nameの値をprintf-ingしてデバッグしようとしましたか? –

答えて

7
if(strcmp(buf,dptr->d_name)==0); 
    break; 

があるべきサーバ・コードです。

+2

+1、良いキャッチ。 –

+0

ファイルを開きます。しかし、私が期待するものではありません。常に現在の作業ディレクトリの最初のファイルを開きます。私は現在の作業ディレクトリで "danish.txt"を持っていて、それをクライアントに転送したいと思います。しかし、常に最初のファイルを開いてクライアントに転送します。 – user1063202

+0

も、あなたが提案した変更を行った後に...今、私はエラーを取得...転送 については ファイルのファイル識別子danish.txt要求/ fileserverfinal1.exe 1200 クライアントは、次のとおりです。-1 オープンエラー:不正なアドレス – user1063202