बुनियादी सवाल लिखा के बारे में उलझन में लिखें, लेकिन मैं इस struct की उम्मीद (चार के लिए 1, 3 अहस्ताक्षरित ints के लिए 12) अंतरिक्ष के 13 बाइट्स पर कब्जा करने के लिए। इसके बजाय, sizeof(ESPR_REL_HEADER)
मुझे 16 बाइट देता है।सी में एक फ़ाइल के लिए कच्चे struct सामग्री (बाइट) वास्तविक आकार
typedef struct {
unsigned char version;
unsigned int root_node_num;
unsigned int node_size;
unsigned int node_count;
} ESPR_REL_HEADER;
मुझे क्या करना कोशिश कर रहा हूँ कुछ मान के साथ इस struct प्रारंभ और एक फ़ाइल के शुरू करने के उसमें शामिल डेटा (कच्चे बाइट्स) लिखते हैं, ताकि जब मैं मैं बाद में इस फ़ाइल को खोलने मैं कर सकते हैं इस संरचना का पुनर्निर्माण करें और बाकी फ़ाइल में क्या है इसके बारे में कुछ मेटा डेटा प्राप्त करें।
मैं struct आरंभ कर रहा हूँ और इस तरह फाइल करने के लिए इसे लिखने:
int esprime_write_btree_header(FILE * fp, unsigned int node_size) {
ESPR_REL_HEADER header = {
.version = 1,
.root_node_num = 0,
.node_size = node_size,
.node_count = 1
};
return fwrite(&header, sizeof(ESPR_REL_HEADER), 1, fp);
}
node_size
कहाँ वर्तमान में 4, जबकि मैं प्रयोग है।
-bash$ hexdump test.dat
0000000 01 bf f9 8b 00 00 00 00 04 00 00 00 01 00 00 00
0000010
मैं यह वास्तव में शामिल करने की उम्मीद:
-bash$ hexdump test.dat
0000000 01 00 00 00 00 04 00 00 00 01 00 00 00
0000010
कीजिए newbiness
फ़ाइल के बाद मैं यह करने के लिए struct बारे में निम्नलिखित डेटा होता है। मैं सीखने की कोशिश कर रहा हूं :) मैं अपनी संरचना के डेटा घटकों को फ़ाइल में कुशलतापूर्वक कैसे लिखूं?
इसके लिए धन्यवाद। तो मूल रूप से यह एक बाइट सरणी मैन्युअल रूप से बनाने और डिस्क पर लिखने के लिए नीचे आता है, फिर जब मैं इसे डिस्क से वापस पढ़ता हूं, उस सरणी से बाइट्स को एक नई आवंटित संरचना के सदस्यों में कॉपी करता हूं? मैं बस सचमुच सीख रहा हूं, लेकिन मैं इसे इस तरह से करना चाहूंगा जिसका मतलब यह होगा कि फाइल हमेशा मशीनों में समान प्रारूप रखने की गारंटी देती है, हां। – d11wtq
@ d11wtq हाँ, सर्वोत्तम पोर्टेबिलिटी के लिए आपको सरणी से बाइट्स को प्रतिलिपि बनाने के लिए 'memcpy' का उपयोग करना चाहिए और फिर बाइट ऑर्डर को ठीक करने के लिए' ntohl' (या जो भी उचित है) पर कॉल करें। – Potatoswatter
उत्कृष्ट, धन्यवाद। मेरे पास कुछ पढ़ने के लिए है। नौसिखिया होना मुश्किल है :) – d11wtq