Środowisko programisty/C - pliki: Różnice pomiędzy wersjami
Linia 38: | Linia 38: | ||
=== read() i write() === | === read() i write() === | ||
#include <stdio.h> | |||
#include <unistd.h> //funkcja write | |||
#include <fcntl.h> // O_WRONLY O_CREAT | |||
#include <sys/stat.h> //S_IRWXU) | |||
#include <errno.h> // errno | |||
int main() | |||
{ | |||
int fd; | |||
char* bufor = "Test"; | |||
fd = open("test.bin", O_WRONLY|O_CREAT, S_IRWXU); | |||
if (fd < 0) | |||
{ | |||
printf("Blad %d\n", errno); | |||
} else { | |||
write(fd, bufor, 4); | |||
close(fd); | |||
}; | |||
return 0; | |||
} | |||
=== rename() === | === rename() === |
Wersja z 11:10, 25 wrz 2006
Wprowadzenie
Istnieją dwie metody dostępu do plików w C:
- Dostęp wysokopoziomowy - który umożliwia wygodne operowanie na plikach tekstowych
- Dostęp niskopoziomowy - który zapewnia dostęp do plików binarnych
Dostęp niskopoziomowy
open() i close()
Podczas dostępu niskopoziomowego pliki identyfikowane są przez liczby całkowite typu int. Do otwierania plików służy funkcja open(). Po zakończeniu operowania na pliku należy ten plik zamknąć aby zwolnić zasoby systemowe. Jeśli pliku nie uda się otworzyć, to funkcja open zwróci wartość mniejszą od zera. Typowa funkcja używająca plików wygląda zatem następująco:
int identyfikator_pliku; identyfikator_pliku = open(... parametry ...) if (identyfikator_pliku < 0) { .... obsłuż błąd } else { ... rób coś z plikiem close(identyfikator_pliku) }
Funkcja open przyjmuje zazwyczaj dwa parametry. Pierwszym z nich jest nazwa pliku, który ma być otwierany, a drugim tryb w jakim plik ma być otworzony. Tryb ten to jedna z trzech wartości:
- O_RDONLY - plik będzie otwarty w trybie tylko do odczytu
- O_WRONLY - plik będzie otwarty w trybie tylko do zapisu
- O_RDWR - plik będzie otwarty w trybie do odczytu i zapisu
dodatkowo parametr ten może być zsumowany bitowo z jedną z dodatkowych wartości:
- O_CREAT - utworzenie pliku jeśli on nie istnieje, w tym przypadku należy funkcji open podać trzeci parametr, który określa prawa dostępu do tworzonego pliku
- O_EXCL - jeśli plik ma być utworzony ale już istnieje, to polecenie open zakończy się błędem
- O_APPEND - otwarcie pliku w trybie do dopisywania
Definicje wszystkich powyższych stałych są dostępne w pliku <fcntl.h>
Dodatkowe informacje o funkcji open udostępnia man 2 open.
Funkcja close przyjmuje jeden parametr - deskryptor otwartego pliku.
read() i write()
#include <stdio.h> #include <unistd.h> //funkcja write #include <fcntl.h> // O_WRONLY O_CREAT #include <sys/stat.h> //S_IRWXU) #include <errno.h> // errno int main() { int fd; char* bufor = "Test"; fd = open("test.bin", O_WRONLY|O_CREAT, S_IRWXU); if (fd < 0) { printf("Blad %d\n", errno); } else { write(fd, bufor, 4); close(fd); }; return 0; }