"ম্যাক ওএস এক্স আনল্যাশড"-এ আমি বছর কয়েক আগে যা পড়েছিলাম তা সঠিকভাবে ধরে নিয়ে ম্যাকোস স্ট্যান্ডার্ড সি কার্যকারিতার পরিবর্তে কেন এটি ব্যবহার করছে তা সম্পর্কে আমি নিশ্চিত না হলেও আমি আবার নতুন কিছু শিখলাম।
নিম্নলিখিত সহজ সি প্রোগ্রাম দেখুন:
#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
, যেহেতু এটি আপনাকে ভলিউম / ডিভাইস আইডি পাশাপাশি ফাইল আইডি / ইনোড নম্বরটি বলে দেয়।