Macos'un neden standart C işlevselliği yerine bunu kullandığından emin olmasam da, yıllar önce "Mac OS X Unleashed" de okuduğumun doğru olduğunu varsayarsak, yeni bir şey öğrendim.
Lütfen aşağıdaki basit C programına bakın:
#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);
}
Programı derleyin, arka planda çalıştırın ve hızlı bir şekilde mv file.txt file2.txt
program yazdırmadan ÖNCE "Bitmiş uyku, dosyaya yazma." (10 saniyeniz var)
file2.txt
Metin dosyaya yazdırılmadan önce taşınmasına rağmen programınızın çıktısına sahip olduğuna dikkat edin (dosya tanımlayıcı aracılığıyla).
$ 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
YASAL UYARI: "Dahil" listesini bulamadım, bu bir nokta kanıtlamak için hızla birlikte kesmek oldu.
stat
buradals -di
birim / cihaz kimliğinin yanı sıra dosya kimliği / inode numarasını da söylediğinden daha yararlı bir komuttur .