मैं कुछ एलएलवीएम उपकरण (जैसे) स्थिर पुस्तकालयों के रूप में उपयोग कर रहा हूं। अर्थात। मैंने स्रोत llvm-nm.cpp की प्रतिलिपि बनाई, जिसका नाम बदलकर main(..)
llvm_nm(..)
और इसे स्थिर लाइब्रेरी के रूप में संकलित किया गया। मैं अपनी फाइल में मानक आउटपुट अग्रेषित करना चाहता हूं।llvm :: outs() को फ़ाइल करने के लिए कैसे रीडायरेक्ट करें?
मैं अगले दृष्टिकोण का उपयोग करने की कोशिश की है:
int out_fd, err_fd;
fpos_t out_pos, err_pos;
// redirect out
fflush(stdout);
fgetpos(stdout, &out_pos);
out_fd = dup(fileno(stdout));
freopen(outFilename, "w", stdout);
// execute
int ret = llvm_nm(argc_, argv_);
// restore output
fflush(stdout);
dup2(out_fd, fileno(stdout));
close(out_fd);
clearerr(stdout);
fsetpos(stdout, &out_pos);
समस्या यह है कि यह अग्रेषित नहीं है (अगर मैं एनएम स्रोत कोड में printf()
जोड़ने लेकिन nm
उत्पादन के लिए नहीं यह काम करता है)। मैं स्रोत के लिए looke है और मैं देख सकता हूँ llvm::outs()
धारा का उपयोग कर उत्पादन किया जाता है:
outs() << "Archive map" << "\n";
और it's implemented अगले रास्ता:
/// outs() - This returns a reference to a raw_ostream for standard output.
00702 /// Use it like: outs() << "foo" << "bar";
00703 raw_ostream &llvm::outs() {
00704 // Set buffer settings to model stdout behavior.
00705 // Delete the file descriptor when the program exits, forcing error
00706 // detection. If you don't want this behavior, don't use outs().
00707 static raw_fd_ostream S(STDOUT_FILENO, true);
00708 return S;
00709 }
मैं कैसे अनुप्रेषित कर सकते हैं मेरी फाइल करने के लिए है कि उत्पादन?