Unixbefehl im C-Programm ausführen

Post Reply
Message
Author
andy
Posts: 150
Joined: 07. Nov 1999 12:51
Location: Kiel
Contact:

Unixbefehl im C-Programm ausführen

#1 Post by andy »

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

Shellschrubber(tm)

Re: Unixbefehl im C-Programm ausführen

#2 Post by Shellschrubber(tm) »

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

andy
Posts: 150
Joined: 07. Nov 1999 12:51
Location: Kiel
Contact:

Re: Unixbefehl im C-Programm ausführen

#3 Post by andy »

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;
}

Andreas

Re: Unixbefehl im C-Programm ausführen

#4 Post by Andreas »

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 ?

Andreas

Re: Unixbefehl im C-Programm ausführen

#5 Post by Andreas »

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

Andreas

Re: Unixbefehl im C-Programm ausführen

#6 Post by Andreas »

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

andy
Posts: 150
Joined: 07. Nov 1999 12:51
Location: Kiel
Contact:

Re: Unixbefehl im C-Programm ausführen

#7 Post by andy »

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

Post Reply