воскресенье, 21 марта 2010 г.
Параметры командной строки и KolibriOS
воскресенье, 14 февраля 2010 г.
Подарок девушке на ДР
Завтра у моей любимой день варения и одновременно завтра день всех влюблённых, хочу сделать оригинальный подарок, домен "iloveann.net" и хостинг оплаченные на год :) . Надеюсь ей понравиться , очень надеюсь...
вторник, 9 февраля 2010 г.
KCC - Kolibri C Compiler
Вступление (под капотом)
Я не особо великолепно разбираюсь в опциях gcc и линковщика, поэтому пошёл не стандартным путём обучения gcc компилировать код для колибри, а сделал программку на перле которая программу созданную gcc для linux в асме AT&T синтаксиса, преобразует к Intel синтаксису и в вид программы для колибри. Звучит запутанно, но описав с комментариями весь процесс будет понятнее. (В след версии весь этот процесс будет автоматизирован, как и установка)
- gcc test.c -S // gcc создаёт ассемблерный файл в AT&T синтаксисе с именем test.s
- perl kcc.pl test.s // kcc транслирует AT&T листинг в FASM Intel для колибри в файл test.asm
- fasm(./fasm) test.asm test // fasm создаёт бинарный файл для колибри test
Hello, world!
Пример "hello , world". Хочу, заметить, что kcc пока работает не очень хорошо и в качестве полноценной среды лучше его пока не применять. И да, размещаю его под 'New' BSD лицензией.
суббота, 2 января 2010 г.
Linux класс сокетов.
#include iostream //тут не хватает кавычек, подставьте сами и тд#include sys/types.h#include sys/socket.h#include netinet/in.h#include stdlib.husing namespace std;class Server {public:Server(int port, int waiters) {listener = socket(AF_INET, SOCK_STREAM, 0);if( listener <>cout<<"SERVER Error creating socket"<exit(0);} else {addr.sin_family = AF_INET;addr.sin_port = htons(port);addr.sin_addr.s_addr = INADDR_ANY;if( bind(listener, (struct sockaddr *)&addr, sizeof(addr) ) <>cout<<"SERVER Error binding port"<exit(0);} else {listen(listener, waiters);}}}~Server() {close(listener);close(user);}bool Accept() {user = accept(listener, NULL, NULL);if( user <>return true;}string Read() {string socket_data;do {bytes_read = recv(user, buff, 5000, 0);} while( bytes_read <= 0 );socket_data=buff;return socket_data;}void CloseUser() {close(user);}void CloseListener() {close(listener);}void Send(string send_data) {send(user, send_data.c_str(), send_data.size(), 0);}void operator >>(string* line) {*line=Read();}void operator <<(string* line) {Send(*line);}private:int listener;int user;int bytes_read;char buff[5000];struct sockaddr_in addr;};
int main() {Server MainServer(30000, 5);while( true ) {if( !MainServer.Accept() ) {cout<<"Error accepting"<exit(0);}if( fork() == 0 ) {MainServer.CloseListener();string data;MainServer>>&data;cout<<MainServer<<&data;MainServer.CloseUser();_exit(0);} else {MainServer.CloseUser();}}MainServer.CloseListener();return 0;}