2016-09-30 11 views
1

だから私がやろうとしているのは、system()という機能を持つシステムコマンドを呼び出して、その出力を何とかしてそれをクライアントに送ることですソケット接続)。システムコマンドをsystem()で実行し、出力を送信する

クライアントはさまざまなメッセージを送信できます。 lsでも構いませんが、qwertyでもかまいません。出力を取り出してwrite()ファンクションのconst void* buffer引数に配置したいと思います。私はthis topicを見ましたが、私はそれが働くようにすることができます。これまで私はそれがこれらの行のどこかに行くことができると思ったが、何を試してもうまくいかなかった。それはあなたがリンクされ、問題の説明として

/* buffer is message from the client: ls, ls -l, whatever*/ 
system(buffer) 
fp = popen(buffer, "r"); 
if(fp == NULL) 
    printf("Failed ot run command\n"); 

while(fgets(path, sizeof(path), fp) != NULL) { 
    //modify output here? 
} 
pclose(fp); 
write(socket_fd, output, strlen(buffer)); 
+0

? –

+0

右上の@ Code-Apprentice – Lisek

+0

コマンドラインからのコマンドもファイル名ではないようです。 –

答えて

2

あなただけのpopen()なくsystem()を使用する必要があります。

リンクされた質問の変数pathが間違っているようです。これにはシステムコールの出力が含まれます。必要に応じて名前を変更して出力することができます。

write()は、送信するバッファの長さになります。この場合、長さはではなく、outputの長さになります。すべて一緒にこれを置く

は、次のようになります:

char output[1035]; 
fp = popen(buffer, "r"); 
if(fp == NULL) 
    printf("Failed ot run command\n"); 

while(fgets(output, sizeof(output), fp) != NULL) { 
    write(socket_fd, output, strlen(output)); 
} 
pclose(fp); 
あなたは `システム()`を呼び出します
関連する問題