User Tools

Site Tools


Table of Contents

Samples

C lang

readfile.c
/*
 * Author, Copyright: Oleg Borodin <onborodin@gmail.com>
 */
 
#include <stdio.h>
#include <string.h>
 
#define BUFFER_SIZE 128
 
int main(int argc, char **argv) {
 
    // открываем файл с именем sample.txt на чтение (r - read) и сохраняем
    // результат в переменной-ссылке fd (fd - file descriptor)
    //
    FILE* fd = fopen("sample.txt", "r");
    // проверяем, удачно ли открыт файл
    // если указатель на структуру-дескриптор
    // равен НИЧЕГО, то выводим на терминал сообщение
    // и завершвем работу функции main()
    if (fd == NULL) {
        printf("cannot open file for read\n");
        return 0;
    }
 
    // объявляем массив символов размером BUFFER_SIZE + 1
    // почему + 1 ниже, это маленький трюк
    char buffer[BUFFER_SIZE + 1];
 
    // расписываем массив нулями, потому
    // что в нем  может быть мусор
    memset(buffer, 0, BUFFER_SIZE + 1);
 
    // пытаемся читать из файла fd по 1 байту-символу,
    // результат сколько прочитано сохраняем  в переменной
    // r типа size_t (это на самом деле число int,
    // но вот такой придумали псевдоним)
 
    size_t r = fread(buffer, 1, BUFFER_SIZE,  fd);
 
    // выводим на термина сколько выведено символов
    // при этом явно преобразуем переменную r из типа size_t в тип int
    // если в файле будет символов меньше чем BUFFER_SIZE,
    // то прочитается сколько есть
    printf("read: %d\n", (int)r);
 
    // выводим строку-символы из буфера
    // концом строки считается байт со значением 0
    // поэтому мы указали размер буфера в памяти BUFFER_SIZE + 1
    // расписали нулями тоже BUFFER_SIZE + 1,
    // а считали только BUFFER_SIZE, на байт меньше
    // то есть гарантированно в конце будет ноль.
    if ((int)r > 0) {
        printf("buffer: %s\n", buffer);
    }
 
    // закрываем файл
    // на самом деле при окончании программы он будет закрыт системой,
    // но мы явно делаем закрытие файла и освобождение структур
    fclose(fd);
 
    // возвращаем результат функции main()
    // 0 - по договоренности в UNIX системах
    // значит успешное выполнение программы
    return 0;
}

Compile and run

$ cc -Wall -o readfile readfile.c
$ ls -l readfile
$ echo 12345 > sample.txt
$ ./readfile
read: 6
buffer: 12345

Go lang

readfile.go
/*
 * Author, Copyright: Oleg Borodin <onborodin@gmail.com>
 *
 */
package main
 
import (
    "fmt"
    "os"
)
 
const (
    bufferSize int = 128
)
 
func main() {
 
    file, err := os.OpenFile("sample.txt", os.O_RDONLY, 0640)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }
 
    defer file.Close()
 
    buffer := make([]byte, bufferSize)
    r, err := file.Read(buffer)
    if err != nil {
        fmt.Printf("error: %v\n", err)
        os.Exit(1)
    }
 
    fmt.Printf("read: %d\n", r)
 
    if r > 0 {
        fmt.Printf("buffer: %s\n", string(buffer))
    }
    os.Exit(0)
}

Compile and run

$ go build readfile.go
$ ls -l readfile
$ echo qwerty > sample.txt
$ ./readfile
read: 7
buffer: qwerty