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);
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);
#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 :)