/* smv.c "simple move" Verschiebt eine einzelne Datei Achtung ! existierende Zieldatei wird ueberschrieben ! compile with gcc smv.c -o smv -fno-builtin-exit -fno-builtin-strcat -fno-builtin-strncat -fno-builtin-strcpy -fno-builtin-strlen -fno-builtin-calloc Unterdruckt die Warnung: warning: incompatible implicit declaration of built-in function ‘strcpy’ CFLAGS = -fno-builtin-exit -fno-builtin-strcat -fno-builtin-strncat -fno-builtin-strcpy -fno-builtin-strlen -fno-builtin-calloc */ #include #include #include /* #include #include */ #include #include #ifdef WIN32 /* Windows */ char verz_trenner[2] = "\\"; #elif __APPLE__ /* Apple */ char verz_trenner[2] = "/"; #elif __linux__ /* Linux */ char verz_trenner[2] = "/"; #endif /* int istDatei(const char* name) /* returns: 1 : eine Datei 0 : ein Verzeichnis -1 : Fehler */ /* { DIR* vz = opendir(name); if(vz != NULL) { closedir(vz); return 0; } if(errno == ENOTDIR) { return 1; } return -1; } */ /* Pruefung auf Verzeichnis */ int istVerzeichnis(const char *pfad) { struct stat statpuf; if (stat(pfad, &statpuf) != 0) return 0; return S_ISDIR(statpuf.st_mode); } /* Pruefung auf regulaere Datei */ int ist_reg_Datei(const char *pfad) { struct stat statpuf; stat(pfad, &statpuf); if (stat(pfad, &statpuf) != 0) return 0; return S_ISREG(statpuf.st_mode); } int main( int argc, char *argv[] ) { int rc; char puffer[2048]; puffer[0] = '\0'; if ( argc != 3 ) return -1; /* Falls das Ziel ein Verzeichnis ist, wird bei rename() nicht verschoben und es kommt eine Fehlermeldung vom Laufzeitsystem */ if ( istVerzeichnis(argv[2]) == 1 ) { /* Zielname anhaengen */ strcpy ( puffer , argv[2] ); strcat ( puffer , verz_trenner ); strcat ( puffer , argv[1] ); /* Testausgabe */ /* puts (puffer); */ } else { strcpy ( puffer , argv[2] ); } rc = rename (argv[1] , puffer ); if ( rc == 0 ) { /* puts ("Datei erfolgreich verschoben !"); */ printf (" Datei %s nach %s verschoben\n", argv[1] , puffer ); } else { perror ( "Datei Verschiebefehler !"); }; return rc; }