हालांकि मैं अनिश्चित हूं कि मैकोस मानक सी कार्यक्षमता के बजाय इसका उपयोग क्यों करता है, यह मानते हुए कि मैंने "मैक ओएस एक्स अनलेशेड" में वर्षों पहले जो पढ़ा है वह सही है, यह पता चला है कि मैंने कुछ नया सीखा, फिर से।
कृपया निम्नलिखित सरल सी कार्यक्रम को देखें:
#include <stdio.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
struct timespec ts;
ts.tv_sec = 10;
ts.tv_nsec = 0;
FILE * fp;
fp = fopen("file.txt", "a");
int f = fileno(fp);
if (fp == NULL)
{
printf("Error opening file!\n");
exit(1);
}
struct stat file_stat;
int ret;
ret = fstat (f, &file_stat);
printf("inode number is %d\n", file_stat.st_ino);
nanosleep(&ts, NULL);
printf("Finished sleep, writing to file.\n");
/* print some text */
const char *text = "Write this to the file";
dprintf(f, "Some text: %s\n", text);
/* print integers and floats */
int i = 1;
float py = 3.1415927;
dprintf(f, "Integer: %d, float: %f\n", i, py);
/* printing single characters */
char c = 'A';
dprintf(f, "A character: %c\n", c);
close(f);
}
प्रोग्राम को संकलित करें, इसे पृष्ठभूमि में चलाएं और जल्दी mv file.txt file2.txt
से प्रोग्राम को प्रिंट करें "नींद पूरी करें, लेखन को फाइल करें।" (आपके पास 10 सेकंड हैं)
ध्यान दें कि file2.txt
आपके प्रोग्राम का आउटपुट है, हालांकि इसे टेक्स्ट में फाइल (फाइल डिस्क्रिप्टर के माध्यम से) प्रिंट करने से पहले ले जाया गया था।
$ gcc myfile.c
$ ./a.out &
[1] 21416
$ inode number is 83956
$ ./mv file.txt file2.txt
$ Finished sleep, writing to file.
[1]+ Done ./a.out
$ cat file2.txt
Some text: Write this to the file
Integer: 1, float: 3.141593
A character: A
अस्वीकरण: मैंने "शामिल" सूची को छंटनी नहीं की है, यह एक बिंदु साबित करने के लिए जल्दी से एक साथ हैक किया गया था।
stat
यहां से अधिक उपयोगी कमांड हैls -di
, क्योंकि यह आपको वॉल्यूम / डिवाइस आईडी के साथ-साथ फाइल आईडी / इनकोड नंबर बताता है।