GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengarahkan output dari system() ke file?

stdout adalah FILE * penunjuk aliran keluaran standar. dup2 mengharapkan deskriptor file, Anda juga telah mengacaukan urutan parameter.Gunakan

dup2(file, 1);

sebagai gantinya.

Pada bagian cara yang lebih baik untuk melakukan ini. Cara ini buruk karena Anda mungkin ingin mengembalikan keluaran standar Anda setelah system ini panggilan selesai. Anda dapat melakukan ini dengan berbagai cara. Anda dapat dup di suatu tempat dan kemudian dup2 kembali (dan tutup dup ped satu). Saya pribadi tidak suka menulis cat sendiri implementasi seperti yang disarankan dalam jawaban lain. Jika satu-satunya hal yang Anda inginkan adalah mengarahkan ulang satu perintah shell dengan system ke file di sistem file, maka mungkin cara yang paling langsung dan sederhana adalah membuat perintah shell untuk melakukannya seperti ini

system("ls -l > Result");

Tetapi Anda harus berhati-hati jika nama file (Hasil) berasal dari input pengguna karena pengguna dapat memberikan sesuatu seperti 'Result; rm -rf /*' sebagai nama file.

Selain itu, pada topik keamanan, Anda harus mempertimbangkan untuk menentukan jalur lengkap ke ls seperti yang disarankan di komentar:

system("/bin/ls -l > Result");

Hal yang sederhana adalah dengan menggunakan > memang:

#include <stdio.h>
int main()
{
    system("ls -l > /some/file");

    return 0;
}

Alternatifnya menggunakan popen() , sesuatu yang sejalan dengan

   #include <stdio.h>
   #include <stdlib.h>
   main()
   {
           char *cmd = "ls -l";
           char buf[BUFSIZ];
           FILE *ptr, *file;

           file = fopen("/some/file", "w");
           if (!file) abort();
           if ((ptr = popen(cmd, "r")) != NULL) {
                   while (fgets(buf, BUFSIZ, ptr) != NULL)
                           fprintf(file, "%s", buf);
                   pclose(ptr);
           }
           fclose(file);
           return 0;
   }

Anda harus menggunakan popen() fungsi perpustakaan dan membaca potongan data dari FILE * yang dikembalikan dan tulis ke file keluaran apa pun yang Anda suka.

Referensi.


Linux
  1. Bagaimana Mengubah Pengalihan Output Dari Proses yang Berjalan?

  2. Cara mengarahkan output ke file dan stdout

  3. Apa perbedaan mengarahkan output menggunakan >, &>, >&dan 2&>?

  1. Bagaimana cara menambahkan output ke file?

  2. Bagaimana cara mengarahkan output dari perintah waktu ke file di Linux?

  3. Cara mengarahkan output dari layanan systemd ke file

  1. Cara Mengarahkan Output ke File dan Stdout di Linux

  2. Bagaimana cara Menyimpan output SHOW PROCESSLIST ke dalam file di MySQL?

  3. Bagaimana cara mengarahkan output dari suatu perintah ke file ketika perintah tersebut akan meminta input pengguna?