katalogi.c

/*
 * plik ma na celu prezentację podstawowych zagadnień z programowania w języku C / C++
 * prezentuje metodę odczytu katalogów
 *
 */

 
// będziemy coś wypisywać ...
#include <stdio.h>

// funkcja exit
#include <stdlib.h>

// katalogi
#include <dirent.h>

// obsługa błędów
#include <errno.h>

main() {
  DIR* katalog = opendir( "/tmp" ); // otwieramy katalog
  // obsługa błędów - np nie istniejącego katalogu
  if (katalog == NULL) {
    // nie udało się - zapamiętujemy kod błędu
    int kod_bledu=errno;
    
    // mamy parę metod wypisania ...
    perror( "próba otwarcia katalogu" );
    fprintf(stderr, "błąd (kod %d): \"%s\" (%s : %d)\n", kod_bledu, strerror(kod_bledu), __FILE__, __LINE__);
    
    // kończymy zwracając informację o niepowodzeniu (1) do rodzica
    exit (1);
    
    // warto takze zapoznac sie z funkcjami z rodziny: err(), warn(), a także error() i syslog()
    // w szczególności uzyteczny jest w nich output formatowany printf z obsługą %m (wwstawia komunikat z ernno)
    //
    // error(-1, 0, "Ala ma %d kotow: %m", 5); lub errx("Ala ma %d kotow: %m", 5);
    //    wypisze komunikat podstawiając za %m aktualny błąd errno i zakonczy progam z kodem -1
    // error(0, 0, "Ala ma %d kotow: %m", 5); lub warnx("ooo %m ppp %i", 5);
    //    wypisze komunikat podstawiając za %m aktualny błąd errno ale nie zakończy programu
    // error(0, 1, "Ala ma %d kotow: %m", 5);
    //   wypisze komunikat podstawiając za %m błąd odpowiadjący errno=1
  }
  
  printf("typ\tnazwa\n");
  struct dirent* pozycja = 0; // tworzymy strukturę odpowiedzialną za przechowywanie informacji o pozycji katalogu
  while (pozycja = readdir(katalog)) { // pętla po kolejnych pozycjach katalogu
    printf("%d\t%s\n", (*pozycja).d_type, (*pozycja).d_name);
  }
  
  closedir(katalog); // zamknięcie katalogu
  
  // warto także spomnieć o POSIXowych funkcjach do operacji na plikach i katalogach takich jak:
  //    rename, chmod, chown, mkdir
  // należy zaznaczyć tutaj iż nie ma funkcji systemowej kopiującej plik
  //    - kopiowanie odbywa się przez otwarcie odczyt w pętli i zapis pod nową nazwą
  
  exit (1);
}

XHTML generated by highlight (http://www.andre-simon.de/) from katalogi.c



Copyright (c) 1999-2015, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This text/program is free document/software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/programing/c_cpp/katalogi.c) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: '2014-01-07 19:27:41 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).