bergetun Skrevet 1. juni 2003 Del Skrevet 1. juni 2003 Siden det er mange kompetente folk her paa linuxforumet saa spoer jeg om det er noen som kunne veare saa snill aa hjelpe meg med ett problem jeg har i linux med C programmering.. Her er problemet: http://forum.hardware.no/viewtopic.php?p=945866#945866 Haaper ikke at jeg bryter noen regler her paa hw med aa poste link til en annen thread.. Evig takknemelig til den som kan hjelpe meg. Lenke til kommentar
A_N_K Skrevet 1. juni 2003 Del Skrevet 1. juni 2003 #include <stdio.h> #include <string.h> #define MAXLINE 100 int main( int argc, char **argv ) { char line[ MAXLINE ]; char *cmd; char *explorer = "jexpl"; if ( argc == 2 ) { cmd = (char *) malloc( strlen( argv[ 1 ] + 4 ) ); sprintf( cmd, "ls %s", argv[ 1 ] ); } else cmd = strdup( "ls ." ); FILE *ip = popen( cmd, "r" ); FILE *op = popen( explorer, "w" ); if ( !ip || !op ) { fprintf( stderr, "Couldn't open pipe, abortingn" ); exit( 1 ); } while ( fgets( line, MAXLINE, ip ) ) fputs( line, op ); if ( ferror( ip ) ) fprintf( stderr, "fgets errn" ); free( cmd ); pclose( ip ); pclose( op ); return 0; } Ikke det beste programmet, men burde funke. Erstatt "jexpl" med navnet på programmet ditt. Lenke til kommentar
MailMan13 Skrevet 1. juni 2003 Del Skrevet 1. juni 2003 Er det lov å spørre hvorfor java programmet ikke kan lese /etc selv? Virker bare litt overkill å gjøre dette i en egen prosess når du kan gjøre det samme med 3-4 linjer i java. Lenke til kommentar
bergetun Skrevet 1. juni 2003 Forfatter Del Skrevet 1. juni 2003 Er det lov å spørre hvorfor java programmet ikke kan lese /etc selv? Virker bare litt overkill å gjøre dette i en egen prosess når du kan gjøre det samme med 3-4 linjer i java. Hei ... Det er en oppgave som jeg noedt aa gjoere .. foerst lage en fil explorer og saa lage ett program som styrer java programmet .. Som feks kompilerer andre java programmer / aapner text filer i emacs osv osv .. Foerste assignment var aa gjoere akkurat det samme i bash programmering som er SAAAAA mye lettere. Hadde ogsaa veart saa mye lettere visst vi fikk lov aa bruke unix kommanoer i C koden men det fikk vi self ikke lov til Jeg sliter noe sinnnsykt i C saa det er derfor jeg henvender meg her til dere for aa faa litt hjelp.. Visst du har lyst aa taa en titt paa assignmentet saa kan du lese om det her. Dette skulle lages i bash . http://jan.netcomp.monash.edu.au/Programmi...ts/assign1.html Neste assignment er helt likt men vi maatte gjoere det i C (noes som jeg ikke kan) som du kan lese om her: http://jan.netcomp.monash.edu.au/Programmi...ts/assign3.html Grunnen til jeg sliter med dette er at egentlig skal man ha ett C/C++ foer man tar dette faget men av en eller annen grunn havnet jeg i det faget... bad for meg .. Tusen takk til alle som tok seg tid til aa se posten og proeve aa hjelpe meg.. Lenke til kommentar
A_N_K Skrevet 2. juni 2003 Del Skrevet 2. juni 2003 Har du prøvd koden jeg listet da? Bruker riktignok en Unix-kommando inni der, ls, blir litt vanskeligere å liste ting selv. Men hvis du får lov til å bruke C++ finnes det i alle fall biblioteker som gjør det "enkelt" å traversere dirs programmatisk. Forresten, hvis du skal gjøre C-programmering i Unix, vil jeg definitivt anbefale Advanced Programming in the UNIX Environment. Skikkelig murstein, men god å ha. Lenke til kommentar
bergetun Skrevet 3. juni 2003 Forfatter Del Skrevet 3. juni 2003 Har du prøvd koden jeg listet da? Bruker riktignok en Unix-kommando inni der, ls, blir litt vanskeligere å liste ting selv. Men hvis du får lov til å bruke C++ finnes det i alle fall biblioteker som gjør det "enkelt" å traversere dirs programmatisk.Forresten, hvis du skal gjøre C-programmering i Unix, vil jeg definitivt anbefale Advanced Programming in the UNIX Environment. Skikkelig murstein, men god å ha. Tusen takk for koden, den virker helt fint men vi har ikke lov aa bruke unix ls og minst mulig andre unix kommandoer. Fikk ett tips om aa bruke scandir() funksjonen I C. /* print files in current directory in reverse order */ #include <dirent.h> main(){ struct dirent **namelist; int n; n = scandir(".", &namelist, 0, alphasort); if (n < 0) perror("scandir"); else { while(n--) { printf("%sn", namelist[n]->d_name); free(namelist[n]); } free(namelist); } } Denne lister filene i reverse order men tar ingen arumenter, den bare lister filene i directoriet hvor programmet kjoeres. Hadde jeg bare hatt kunnskap nok til aa implmentere dette inn i din kode saa hadde alt veart saa mye bedre. Men med min kunnskap i C saa har jeg ikke tjangs til aa faa det til. Har iallefall leart en ting i dette faget, det er ikke ta ett unix C programmering fag foer du har hatt ett C++ fag eller litt C++ programmering fra foer, iallfall ikke rett etter aa aa kommet fra java og object orientert programmering. Tenker java naar jeg proever aa programmere C og det gjoer ikke ting saa mye lettere. Fredag er due daten paa dette assignmentet og leare C programmering til fredag er ganske haaploest. Lenke til kommentar
A_N_K Skrevet 3. juni 2003 Del Skrevet 3. juni 2003 Det burde ikke være så vanskelig å erstatte mitt kall til ls etc. med et kall til scandir, det eksempelet viser jo hvordan du får en liste med dir-entries. Skrev om eksempelet litt sånn at ting skrives ut i vanlig rekkefølge. Hint: Hvis du erstatter stdout i kallet til fprintf med op (pipe til programmet ditt, som jeg viste i den tidligere koden), burde det gjøre akkurat hva du ønsker. if ( (n = scandir( dir, &nameList, 0, alphasort )) < 0 ) { perror( "scandir" ); exit( 1 ); } int i; for ( i = 0; i < n; ++i ) { fprintf( stdout, "%sn", nameList[ i ]->d_name ); free( nameList[ i ] ); } free( nameList ); Det er da ikke *så* ulikt Java? Det gjelder bare å sette seg ned og prøve. Lenke til kommentar
Egil.B Skrevet 3. juni 2003 Del Skrevet 3. juni 2003 Hmm, hvorfor ikke utnytte at ls er opensource? Ta en titt i kilden der vel :wink: Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå