M
Rainbow-Warrior schrieb:
Hi,
// functions-header
char nmblookup(char* client, char* winsx);
// global vars
char result[50];
...
result = nmblookup(client,wins1);
...
Was mach ich falsch, es sind doch die erwarteten variablentypen oder nicht?
result ist nicht vom Typ char, sondern es ist ein Array vom Typ char.
Damit du was lernst, gebe ich dir hier mal den berichtigten Code an:
nmblookup.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "nmblookup.h"
char* nmblookup(char* client, char* winsx) {
FILE *stream;
char s_command[150];
char buffer[40];
char *result = malloc(1024); /* neu hinzufügen */
sprintf(s_command, "nmblookup -U %s -R %s", winsx, client );
printf("command: %s\n", s_command); /* debug zeile */
stream = popen(s_command, "r");
while ( fgets( buffer, 40, stream ) != NULL );
pclose(stream);
sprintf(result, "%s", strtok( buffer, " "));
/* hier müsstest du result noch auf Zulässigkeit überprüfen! */
/* es kann ja sein, dass nmblookup nicht erfolgreich war */
printf("result: %s\n", result); /* debug zeile */
return result;
}
nmblookup.h
#ifndef NMBLOOKUP_H
#define NMBLOOKUP_H
char* nmblookup(char* client, char* winsx);
#endif
ping.c
#include <stdio.h>
#include "ping.h"
void ping(char *client) {
FILE *stream;
char s_command[ 150 ];
sprintf( s_command, "ping %s", client );
stream = popen(s_command, "w");
pclose(stream);
return;
}
ping.h
#ifndef PING_H
#define PING_H
void ping(char *client);
#endif
nping.c
#include <stdio.h>
#include <stdlib.h>
#include <libgen.h>
#include "nmblookup.h"
#include "ping.h"
#define version "1.01\n"
#define wins1 "192.168.0.101"
#define wins2 "192.168.0.102"
void help(char *prog) {
printf("%s von Bjoern, 05.02.2008\n", basename(prog));
printf(version);
printf("usage: %s [-?] Clientname\n", basename(prog));
printf("\t-?/-h/--help : Print help information\n");
}
int main(int argc, char *argv[]) {
char *result;
char *client;
if ( argc != 2 ) {
help(argv[0]);
return 1;
}
client = argv[1];
printf("\033[32mDas folgende Geraet soll erreicht werden:\033[0m %s\n\n", client);
result = nmblookup(client, wins1);
printf("result: %s\n", result); /* debug zeile */
ping(result);
free(result);
return 0;
}
Makefile
#
# Makefile
#
nping: nping.o nmblookup.o ping.o
gcc -W -Wall -pedantic nping.o nmblookup.o ping.o -o nping
nping.o: nping.c
gcc -W -Wall -pedantic -c nping.c
nmblookup.o: nmblookup.c
gcc -W -Wall -pedantic -c nmblookup.c
ping.o: ping.c
gcc -W -Wall -pedantic -c ping.c
clean:
rm -f nping.o nmblookup.o ping.o
So, ich hoffe, du lernst da etwas draus.
Gruß mcr
PS: du brauchst nicht für jede Funktion eine eigene Datei erzeugen.