2009-04-23 7 views
9

में हार्ड लिंक बनाना वर्तमान में मैं Runtime.exec() के माध्यम से 'ln' कमांड का उपयोग करता हूं। यह बढ़िया काम करता है। एकमात्र समस्या यह है कि इस कांटा को करने के लिए, हमें आवेदन के ढेर स्थान की दोगुनी जगह चाहिए। मेरा ऐप 10 गीगा के आसपास ढेर आकार के साथ एक 64 बिट ऐप है और इस प्रकार यह स्वैप स्पेस से बाहर चला जाता है। मुझे कोई कॉन्फ़िगरेशन नहीं मिला जो इसे ठीक कर सकता है।जावा

मैं भी इसके लिए जेएनआई का उपयोग नहीं करना चाहता हूं। इसके अलावा मैंने कहीं सुना था कि यह सुविधा जल्द ही 7.

+0

एक छोटे से धीरे। आप क्या करने की कोशिश कर रहे हैं, आपने पहले से क्या प्रयास किया है, और जब आपने कोशिश की तो क्या हुआ? –

उत्तर

6

आप (JNA JNI पर कुछ स्पष्ट फायदे हैं) JNI के स्थान पर JNA की कोशिश कर सकते जावा में प्रदान किया जाएगा; हां, JSR 203

0

आप यूनिक्स के बजाय विंडोज का उपयोग कर सकते हैं? ;) मेरा मानना ​​है कि जेडीके 7 उपलब्ध जहां फोर्क के बजाय CreateProcess के समान कॉल का उपयोग करेगा।

एक और व्यावहारिक समाधान शुरू करने के तुरंत बाद एक नई बाल प्रक्रिया बनाना होगा। यदि आप 10 जी ढेर का उपयोग कर रहे हैं, तो शायद एक और छोटी जावा प्रक्रिया इतनी खराब नहीं होगी। निष्पादित करने के लिए उस प्रक्रिया (धाराओं के उपयोग के माध्यम से) प्राप्त करें।

10

शायद इस साइट मदद की हो जाएगा: http://java.sun.com/docs/books/tutorial/essential/io/links.html

+1

उस जावाडोक के बारे में सभी उत्साहित हो गए, जब तक मैंने "@since 1.7" – Thilo

+0

@ थिलो का अर्थ नहीं देखा? – Pacerier

+0

@ पर्सियर: 12 नवंबर को 9 0 बजे, जावा 7 रिलीज के पास कहीं भी नहीं था। – Thilo

4

यह JNA के साथ बहुत आसान है:

public interface CLibrary extends Library { 
    CLibrary INSTANCE = (CLibrary) 
     Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"), 
          CLibrary.class); 
    int link(String fromFile, String toFile); 
} 

public static void main(String[] args) { 
    CLibrary.INSTANCE.link(args[0], args[1]); 
} 

संकलित करें और चलाने के!

+0

यह संकलित करता है, लेकिन यह नहीं चलता है। विंडोज के तहत नहीं, वह है। मैंने अभी तक जेएनए द्वारा किए गए जादू को दबा दिया है, लेकिन ऐसा लगता है कि एमएसवीसीआरटी में संबंधित कार्य का नाम बहुत अलग है। –

+0

http://stackoverflow.com/questions/6015006/whats-the-name-of-the-create-hard-link-function-in-msvcrt के अनुसार, फ़ंक्शन को 'CreateHardLink' कहा जाता है और यह कर्नेल 32 में स्थित है, एमएसवीसीआरटी में नहीं (जो समझ में आता है)। –

8

यह createLink का उपयोग कर जावा 7 में आसान है:

Files.createLink(Paths.get("newlink"), Paths.get("existing")); 
+2

यहां प्रलेखन है: http://docs.oracle.com/javase/tutorial/essential/io/links.html –