Estoy tratando de encontrar la forma exacta de usar stat() para capturar información sobre un archivo. Lo que necesito es poder imprimir varios campos de información sobre un archivo. Entonces ...Uso de Struct Stat()
#include <iostream>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
using namespace std;
int main() {
struct stat buf;
stat("file",&buf);
...
cout << st_dev << endl;
cout << st_ino << endl;
cout << st_mode << endl;
cout << st_nlink << endl;
cout << st_uid << endl;
cout << st_gid << endl;
cout << st_rdev << endl;
cout << st_size << endl;
cout << st_blksize << endl;
cout << st_blocks << endl;
cout << st_atime << endl;
cout << st_mtime << endl;
cout << st_ctime << endl;
...
}
Estoy completamente confundido acerca de cómo hacer esto. ¿Por qué & buf es un parámetro para stat? No me importa almacenar esta información en la memoria, solo necesito los campos de salida dentro de mi programa C++. ¿Cómo accedo a la información contenida en la estructura? Se supone que buf realmente contiene la información devuelta de stat()?
veo, gracias a todos por las respuestas. Fueron bastante útiles. ¿Alguien sabe cómo usar stdin, stdout o stderr como parámetros para stat works? Estas son transmisiones y no archivos, entonces, ¿cómo puede una base de datos llenar una estructura con datos? –
Use 'fstat', que toma un descriptor de archivo como primer argumento en lugar de una ruta. –
Normalmente haría esto pero el entorno es algo artificial ya que esta es la parte del sistema operativo de un simulador arquitectónico que he escrito. Entonces, cuando un syscall abre un archivo, tengo mi propio vector para actuar como una tabla de descriptores de archivos. ¿Hay una buena manera de capturar el descriptor de archivo real en la máquina para un archivo cuando se abre? Si ese fuera el caso, usaría fstat porque no se requeriría traducción entre las estadísticas del flujo y las estadísticas del archivo. –