
- •Урок 1: Создание среды программирования, глава 1
- •Урок 1: Создание среды программирования, глава 2
- •Урок 1: Создание среды программирования, глава 3
- •Урок 1: Создание среды программирования, глава 4
- •Урок 1: Создание среды программирования, глава 5
- •Урок 2: Создание первой собственной программы, глава 1
- •Урок 2: Создание первой собственной программы, глава 2
- •Урок 2: Создание первой собственной программы, глава 3
- •Урок 3: Шпаргалки для начинающих программистов, глава 1
- •Урок 3: Шпаргалки для начинающих программистов, глава 2
- •Урок 3: Шпаргалки для начинающих программистов, глава 3
- •Урок 4: Простейшие способы обработки изображений, глава 1
- •Урок 4: Простейшие способы обработки изображений, глава 2
- •Урок 4: Простейшие способы обработки изображений, глава 3
- •Урок 4: Простейшие способы обработки изображений, глава 4
- •Урок 4: Простейшие способы обработки изображений, глава 5
- •Урок 5: Новые методы программирования на psp, глава 1
- •Урок 5: Новые методы программирования на psp, глава 2
- •Урок 5: Новые методы программирования на psp, глава 3
- •Урок 5: Новые методы программирования на psp, глава 4
- •Урок 5: Новые методы программирования на psp, глава 5
- •Урок 6: Добавление звука в программу, глава 1
- •Урок 6: Добавление звука в программу, глава 2
- •Урок 6: Добавление звука в программу, глава 3
- •Считывание всего файла, глава 1
- •Считывание всего файла, глава 2
- •Считывание всего файла, глава 3
- •Считывание всего файла, глава 4
- •Считывание всего файла, глава 5
Считывание всего файла, глава 1
Учебные материалы, размещенные harleyg на форуме PSP-Programming.com (первоначально опубликованные под заголовком «Общий C код»).
В этой серии учебного руководства мы рассмотрим основные моменты считывания данных с диска C.
Мы будем использовать следующие функции: fopen, fread, fseek fclose, fgetc, malloc. А также будем применять общую математику и переменные.
Это первое учебное руководство, рассказывающее о выводе информации на экран. Мы научимся считывать в память весь файл, выводить содержимое на экран и завершать файл. Все это позволит вам получить основные знания о файловом вводе/выводе, которые нам пригодятся в последующих частях учебных материалов.
Во-первых, нам необходимо использовать некоторые операторы, поэтому откройте тот текстовый редактор, который вы предпочитаете (ни на чем не настаиваю), и создайте новый файл, присвоив имя main.c. Теперь введите в текстовом редакторе:
#include <pspkernel.h> #include <pspdebug.h> #include <stdio.h> #include <stdlib.h>
Они включают следующее: • pspkernel.h и pspdebug.h: для получения информации о них ознакомьтесь с учебным руководством по программированию на PSP. • stdio.h: «стандартный заголовочный файл ввода-вывода»; файл библиотеки языка программирования Си, которая содержит функции для управления стандартными операциями ввода-вывода. • stdlib.h: «стандарт общего назначения», это файл библиотеки языка программирования Си, включающей функции, которые занимаются выделением памяти, управлением процессами, преобразованием и др. Так, ладно, уже достаточно о том, что они содержат. Я вижу, вы на меня смотрите… как-то не по-доброму. Здесь мы стандартно вставляем функции обратного вызова и определяем набор значений. Для получения информации об этом ознакомьтесь с учебным руководством по программированию на PSP.
#define printf pspDebugScreenPrintf /* Exit callback */ int exit_callback(int arg1, int arg2, void *common) { sceKernelExitGame(); return 0; }
/* Callback thread */ int CallbackThread(SceSize args, void *argp) { int cbid;
cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL); sceKernelRegisterExitCallback(cbid);
sceKernelSleepThreadCB();
return 0; }
/* Sets up the callback thread and returns its thread id */ int SetupCallbacks(void) { int thid = 0;
thid = sceKernelCreateThread("update_thread", CallbackThread, 0×11, 0xFA0, 0, 0); if(thid >= 0) { sceKernelStartThread(thid, 0, 0); }
return thid; }
Продолжим урок во второй части.
Считывание всего файла, глава 2
Вторая часть учебных материалов, размещенных harleyg на форуме PSP-Programming.com (первоначально опубликованные под заголовком «Общий C код»).
Сейчас запускаем свою основную функцию:
int main(void) { pspDebugScreenInit(); SetupCallbacks();
int означает integer, используется для именования любого типа данных, который может быть представлено некоторым множеством целых чисел. void — используется, потому что в более ранних версиях Си функции, не возвращающие значения, принимали значение по умолчанию «int» и функции без параметров имели пустой список параметров. Нетипизированные указатели объявлялись как целые числа или указатель на «char». { — используется для того, чтобы показать запуск функции. Для дополнительной информации (о следующих двух строках) вы можете обратиться к предыдущим разделам данного учебного пособия по программированию на PSP.
Далее объявим некоторые переменные:
FILE * pFile; long lSize; char * buffer;
FILE: мы применяем это ключевое слово для указания того, что переменная pFile является указателем файла («file pointer«). long: такой же тип данных, что и int. Диапазон также совпадает: от -2,147,483,648 до +2,147,483,647. Обычно я использовал int, но в этом учебном руководстве, думаю, будет правильным представить тип данных long. Об int рассказывалось ранее. long может хранить большие числа по сравнению с int, но в то же время занимает большее количество памяти (такая вот альтернатива). char*: используется для объявления переменной «buffer«. Он может содержать буквы (a-z, A-Z, символы, числа, и т.д.).
После этого мы передаем переменной pFile некоторую информацию:
pFile = fopen ("myfile.txt" , "rb");
pFile – это переменная, которую мы уже ранее превращали в «file pointer«. = — оператор присваивания устанавливает «foo» равным «bar» (foo = bar). fopen – это функция в Си, которая используется для того, чтобы открыть файл (file open). Требуется два параметра: «filename» и «mode«. «myfile.txt» – первый параметр «filename«. rb включает два режима, которые мы используем: • r – открывает двоичный файл для чтения. Файл должен существовать. • b – двоичный (бинарный) режим. Сдвигается на последний байт файла (на конец файла). Никаких преобразований. Функция fopen устанавливает все для считывания. Затем она возвращает идентификатор файла (то, что pFile хранит). Теперь мы можем получить доступ к файлу, просто открыв его с помощью обращения к переменной «pFile«. Теперь мы должны проверить, имеет ли файл какие-то данные. Сделаем это так:
if (pFile==NULL) sceKernelExitGame();
Оператор if может использоваться для сравнения значения переменных (например, в случае равенства «foo» и «bar«). ( … ) — сравниваются значения в круглых скобках. Если это оценивается как «true» (истина), то следующий код выполняется.
== — оператор сравнения. Он оценивает выражение как «true» (истина), если два параметры, по обе стороны от = =, равны друг другу. Обратите внимание на различие между оператором присваивания (=) и оператором сравнения (= =). NULL означает «пусто», или «ничто», или «нет множества». sceKernelExitGame() завершает процесс (или выходит из программы). Итак, процесс закончен, если оператор выдает фразу на английском: «if pFile is empty, exit the program«.
Заканчиваем вторую часть, переходим к третьей.