Moin,
wie kann ich in C einen Unixbefehl ausfuehren ?
z.B. ls>test
Oder gibt es eine andere Moeglichkeit, alle Dateinamen eines Verzeichnisses
einzulesen ?
schoene Gruesse, Andy
Unixbefehl im C-Programm ausführen
Re: Unixbefehl im C-Programm ausführen
GNUten Abend!
Mit
system("ls >test");
geht das. Dazu muss man stdlib.h einbinden. Siehe auch "man 3 system".
Es geht aber auch anders. Gib mal "info libc" ein. Wähle "File system interface" und "Accessing directorys". Dort gibt es dazu Informationen und der Unterpunkt "Simple directory lister" enthält auch ein Beispielprogramm dazu.
Grüße von Wolfgang
Mit
system("ls >test");
geht das. Dazu muss man stdlib.h einbinden. Siehe auch "man 3 system".
Es geht aber auch anders. Gib mal "info libc" ein. Wähle "File system interface" und "Accessing directorys". Dort gibt es dazu Informationen und der Unterpunkt "Simple directory lister" enthält auch ein Beispielprogramm dazu.
Grüße von Wolfgang
Re: Unixbefehl im C-Programm ausführen
Hallo Wolfgang,
hat prima geklappt. Ich habe ein kleines Programm geschrieben, daß alle Dateien in einem Verzeichnis in Kleinbuchstaben umwandelt. Recht sinnvoll bei M$ Import von HTML-Dokumenten.
/*
capital letters suck V0.1
compile:
gcc cl_suck.c -ocl_suck
install:
copy the binary to /usr/bin
usage:
When you start the command cl_suck all capital letter in the current
directory will be converted.
*/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <ctype.h>
#include <string.h>
int main(void)
{
char input[100];
char output[100];
int i;
FILE *filepointer;
system("ls >cl_suck_tempfile");
filepointer=fopen("cl_suck_tempfile","r");
if (filepointer == NULL)
{
fprintf(stderr,"file could not be opened
");
fprintf(stderr,"errornumber %d
",errno);
exit(1);
}
fgets(input,100,filepointer);
while (!feof(filepointer))
{
i=0;
while (i<strlen(input)-1)
{
output<i>=tolower((int) input<i>);
i++;
}
output[strlen(input)-1]='\0';
input[strlen(input)-1]='\0';
rename(input,output);
fgets(input,100,filepointer);
}
fclose(filepointer);
remove("cl_suck_tempfile");
printf("
thanks for using 'capital letters suck V0.1'
");
printf("visit www.nisse.de to get the latest version
");
return 0;
}
hat prima geklappt. Ich habe ein kleines Programm geschrieben, daß alle Dateien in einem Verzeichnis in Kleinbuchstaben umwandelt. Recht sinnvoll bei M$ Import von HTML-Dokumenten.
/*
capital letters suck V0.1
compile:
gcc cl_suck.c -ocl_suck
install:
copy the binary to /usr/bin
usage:
When you start the command cl_suck all capital letter in the current
directory will be converted.
*/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <ctype.h>
#include <string.h>
int main(void)
{
char input[100];
char output[100];
int i;
FILE *filepointer;
system("ls >cl_suck_tempfile");
filepointer=fopen("cl_suck_tempfile","r");
if (filepointer == NULL)
{
fprintf(stderr,"file could not be opened
");
fprintf(stderr,"errornumber %d
",errno);
exit(1);
}
fgets(input,100,filepointer);
while (!feof(filepointer))
{
i=0;
while (i<strlen(input)-1)
{
output<i>=tolower((int) input<i>);
i++;
}
output[strlen(input)-1]='\0';
input[strlen(input)-1]='\0';
rename(input,output);
fgets(input,100,filepointer);
}
fclose(filepointer);
remove("cl_suck_tempfile");
printf("
thanks for using 'capital letters suck V0.1'
");
printf("visit www.nisse.de to get the latest version
");
return 0;
}
Re: Unixbefehl im C-Programm ausführen
Hallöle !
Gute Idee ! Aber müßte es statt
...
i=0;
while (i<strlen(input)-1)
{
output=tolower((int) input);
i++;
}
...
wegen Inkompatibilitäten zwischen int und char[100] nicht
...
i=0;
while (i<strlen(input)-1)
{
output<i>=tolower((int) input<i>);
i++;
}
...
heißen ?
Gute Idee ! Aber müßte es statt
...
i=0;
while (i<strlen(input)-1)
{
output=tolower((int) input);
i++;
}
...
wegen Inkompatibilitäten zwischen int und char[100] nicht
...
i=0;
while (i<strlen(input)-1)
{
output<i>=tolower((int) input<i>);
i++;
}
...
heißen ?
Re: Unixbefehl im C-Programm ausführen
Toll, jetzt haut man schon mal auf die Kacke
und dann das ! <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">
Kann es sein, daß das Forum keine eckigen
Klammern darstellen kann ?!
Z.B. sowas wie
output<ECKIGE_KLAMMER_AUF>i<ECKIGE_KLAMMER_ZU>=tolower((int) input<ECKIGE_KLAMMER_AUF>i<ECKIGE_KLAMMER_ZU>);
und dann das ! <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">
Kann es sein, daß das Forum keine eckigen
Klammern darstellen kann ?!
Z.B. sowas wie
output<ECKIGE_KLAMMER_AUF>i<ECKIGE_KLAMMER_ZU>=tolower((int) input<ECKIGE_KLAMMER_AUF>i<ECKIGE_KLAMMER_ZU>);
Re: Unixbefehl im C-Programm ausführen
Ok ! Ich habe das Ziel dieses Forum alleine
zu füllen ... Sorry, bin noch auf der Arbeit und nicht mehr so ganz fit ...
Warum sagt mir keiner, daß
<ECKIGE_KLAMMER_AUF>i<ECKIGE_KLAMMER_ZU> den Text rekursiv darstellt ?
Also, ich meinte weiter oben, daß es
...
A=0;
while (A<strlen(input)-1)
{
output[A]=tolower((int) input[A]);
i++;
}
...
heißen müsste. (Statt dem "A" denkt Euch jetzt bitte ein "i" )
... ja, ich weiß daß es die Vorschau-Funktion gibt
zu füllen ... Sorry, bin noch auf der Arbeit und nicht mehr so ganz fit ...
Warum sagt mir keiner, daß
<ECKIGE_KLAMMER_AUF>i<ECKIGE_KLAMMER_ZU> den Text rekursiv darstellt ?
Also, ich meinte weiter oben, daß es
...
A=0;
while (A<strlen(input)-1)
{
output[A]=tolower((int) input[A]);
i++;
}
...
heißen müsste. (Statt dem "A" denkt Euch jetzt bitte ein "i" )
... ja, ich weiß daß es die Vorschau-Funktion gibt
Re: Unixbefehl im C-Programm ausführen
Hi,
ja offensichtlich ist da was mit den eckigen Klammern verlorengegangen. Aber Du kannst es Dir auch runterladen unter:
www.nisse.de/cl_suck.c
schöne Grüße, Andy
ja offensichtlich ist da was mit den eckigen Klammern verlorengegangen. Aber Du kannst es Dir auch runterladen unter:
www.nisse.de/cl_suck.c
schöne Grüße, Andy