Sementara saya tidak yakin mengapa makro menggunakan ini alih-alih fungsi C standar, dengan anggapan apa yang saya baca tahun lalu di "Mac OS X Unleashed" benar, ternyata saya belajar sesuatu yang baru, lagi.
Silakan lihat program C sederhana berikut:
#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);
}
Kompilasi program, jalankan di latar belakang dan dengan cepat mv file.txt file2.txt
SEBELUM program mencetak "Selesai tidur, menulis ke file." (Anda punya 10 detik)
Perhatikan bahwa file2.txt
memiliki output dari program Anda meskipun dipindahkan sebelum teks dicetak ke file (melalui deskriptor file).
$ 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
PENOLAKAN: Saya belum memotong daftar "sertakan", ini dengan cepat diretas bersama untuk membuktikan suatu hal.
stat
adalah perintah yang lebih berguna di sini daripadals -di
, karena ini memberi tahu Anda volume / ID perangkat serta ID file / nomor inode.