2017-02-10 6 views
0

Ich möchte Mount-Funktion verwenden, um NFS zu implementieren.Wie mount Funktion von c zu verwenden?

int mount(const char *source, const char *target, 
       const char *filesystemtype, unsigned long mountflags, 
       const void *data); 

ich es mithilfe Befehl mount implementieren können z mount 172.16.0.144:/tmp/test /tmp/test. Aber wenn ich die mount() Funktion verwende, funktioniert es nicht. Das ist mein Code hier.

#include<sys/mount.h> 
#include<iostream> 
#include<errno.h> 
#include<fstream> 
#include<string.h> 
using namespace std; 

int main(int argc, char**argv) { 
    const char* srcPath = "/tmp/watchman"; 
    const char* targetPath = "172.16.0.144:/tmp/watchman"; 
    if (argc == 3) { 
     srcPath = argv[1]; 
     targetPath = argv[2]; 
     cerr << "reset the src && target path\n"; 
    } else { 
     if (argc != 1) { 
      cerr << "wrong input argument!\n"; 
      return 0; 
     } 
    } 
    cerr << "srcPath = " << srcPath << endl; 
    cerr << "target = " << targetPath << endl; 
    int ret_val = mount(srcPath, targetPath, "", MS_SHARED, ""); 
    if (ret_val == 0) { 
     cerr << "mount succeed\n"; 
     string filename = string(srcPath) + "/" + "tmp.txt"; 
     fstream fin(filename.c_str(), ios::out); 
     fin << "there is a write test from client\n"; 
     fin.close(); 
     ret_val = umount(srcPath); 
     if (ret_val == 0) { 
      cerr << "umount succeed \n"; 
     } else { 
      cerr << "umount failed \n"; 
      printf("%s/n", strerror(errno)); 
     } 
    } else { 
     cout<<"ret_val = "<<ret_val<<endl; 
     cerr << "mount failed \n"; 
     cerr << strerror(errno) << endl; 
    } 
    return 0; 
} 

Es printf mount fehlgeschlagen, keine solche Datei oder Verzeichnis. kann mir jemand helfen? Bitte !!!

+0

Verwenden Sie die richtigen Tags. Das ist C++, nicht C. – Olaf

Antwort

1

Wenn Sie read the mount manual page Sie werden sehen, dass

mount() das Dateisystem von source angegeben legt (was oft ein Pfad zu einem Gerät bezieht, kann aber auch der Pfadname eines Verzeichnisses oder einer Datei sein, oder eine Dummy-Zeichenfolge) an den Speicherort (ein Verzeichnis oder eine Datei), der durch den Pfadnamen in target angegeben wird.

Sie haben die Quelle und das Ziel in Ihrer Anwendung umgeschaltet.

+0

Ich versuche es, aber es funktioniert immer noch nicht. Kannst du mir ein Beispiel dafür geben? Ich bin sehr verwirrt. –

+0

@CloriaD Gibt es das Verzeichnis '/ tmp/watchman'? Es muss existieren, bevor Sie es als Ziel für mount verwenden können. –

+0

ja, natürlich gibt es. Sowohl im NFS-Server als auch lokal ist der Ordner/tmp/watchman vorhanden. Kannst du das Beispiel also ausführen und ein gutes Ergebnis haben? Hilf mir bitte. –