Bagaimana saya bisa menggunakan panggilan sistem execl() untuk menjalankan perintah tr di Unix?

Saya mencoba menerjemahkan semua karakter kecil file ke huruf kapital terakhir menggunakan perintah tr dengan panggilan sistem exec dari unix.

execl("/usr/bin/tr","tr [a-z] [A-Z] ‹ emp.lst",NULL);


person coder92    schedule 26.04.2014    source sumber


Jawaban (1)


   #include <stdio.h>
   #include <stdlib.h>
   #include <sys/types.h>
   #include <unistd.h>
   #include <sys/wait.h>
   #include <unistd.h>
   #include <ctype.h>
   #define MAX 5000
   int main( int argc, char *argv[])
     {  int pipen[2];
       pipe(pipen);
       int pipe2[2];
       pipe(pipe2);
       char buf[MAX];
           pid_t child_pid;


         if((child_pid = fork()) < 0 )
         {
            perror("fork failure");
            exit(1);
         }

      if(child_pid == 0)
    {    
      close(pipen[1]);
          close(pipe2[0]);
          dup2(pipen[0],0);
          dup2(pipe2[1],1);
          close(pipen[0]);
      close(pipe2[1]);
          execl("/usr/bin/tr","/usr/bin/tr","[:lower:]", "[:upper:]",NULL);

    }

    else
   {
    FILE* inputfile;
    inputfile = fopen("in","r");
     char c;
     if (inputfile) {
     int i=0;
     while ((c = getc(inputfile)) != EOF){
    buf[i]=c;
            i++;
            if(i>=MAX){break;
        buf[i-1]='\0';
    }
    }
     buf[i]='\0';    
     fclose(inputfile);
  }

  close(pipen[0]);
  close(pipe2[1]);
  write(pipen[1],buf,sizeof(buf));
  close(pipen[1]);
  read(pipe2[0],&buf,sizeof(buf));
  close(pipe2[1]);
  printf("----->\n%s\n",buf);

  }

   return 0;
}

Ini adalah salah satu cara untuk mengatasi masalah ini, Seperti yang saya tahu kita bisa langsung menulis

execl("/bin/ls","ls","/home/Martin/Documents","-l",NULL); or something but cant 

langsung tulis perintah tr yang telah Anda sebutkan, Itu sebabnya saya menggunakan dup2 dan panggilan sistem fork untuk melakukan pekerjaan sesuai keinginan Anda. Saya juga baru dalam hal ini. Jika ada yang salah, harap jelaskan :)

person GPrathap    schedule 11.05.2014