Feststellen, ob sich zwei Dateien auf dem gleichen Dateisystem befinden
Da das Kopieren der Daten beim Verschieben nur nötig ist, wenn sich das Ziel auf einer anderen Partition befindet - ansonsten kann man ja rename(2) benutzen - benötigt man eine Möglichkeit, festzustellen, ob sich Quelle und Ziel auf der gleichen Partition befinden. Ein Blick in die Man-Page von stat(2) hilft einem da auf die Sprünge und rausgekommen ist folgende Funktion:
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int samefilesystem(const char *path1,const char *path2) { struct stat stat1,stat2; stat(path1,&stat1); stat(path2,&stat2); return stat1.st_dev==stat2.st_dev; }Zu beachten ist hier, dass der Rückgabewert von stat(2) nicht überprüft wird! Soll ja aber auch nur ein Beispiel sein.