Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Windows API:Modifikacije primjera čitač-pisač u Windows API

[es] :: C/C++ programiranje :: Windows API:Modifikacije primjera čitač-pisač u Windows API

[ Pregleda: 2381 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

djemo
Gasal Djemal

Član broj: 25396
Poruke: 2
*.as53.sa-ap.bih.net.ba.



Profil

icon Windows API:Modifikacije primjera čitač-pisač u Windows API 26.04.2004. u 19:57 - pre 243 meseci
Zadatak 1:
Varijabilna veličina bafera i njegovo pražnjenje
UVESTI neophodne modifikacije u programe citac.c i pisac.c kojima se omogućuje:
zadavanje poruka koje će se upisati u bafer
varijabilna veličina bafera
čitanje zadatog broja poruka iz bafera i pražnjenje bafera (čitanje svih poruka koje su prisutne u baferu

Zadatak 2
DLL sa funkcijama za čitanje i pisanje
Napravite DLL sa funkcijama:

int upis( char *poruka) - upisivanje zadane poruke u bafer. Povratna vrijednost je 0 ako nije bilo greške.

int citanje( char *poruka, int maxduzina) - čitanje poruke i njeno smještanje u prostor određen parametrom poruka sa maksimalnom dužinom (veličinom poruke) određenom parametrom maxduzina. Povratna vrijednost je 0 ako nije bilo greške

int prazno() - vraća 0 ako je bafer prazan u momentu pozivanja

Ujedno, programe citac.c i pisac.c promijenite tako da koriste funkcije iz DLL.



PROGRAM CITAC.C JE SLJEDECI:

#include <windows.h>
#include <assert.h>
#include <stdio.h>


#define BufferSize 100
#define Buffers 10
static const char MemoryName[]="Share Memory Name";
static char * Memory[Buffers];
char * addr;
static const char WriterSemaphoreName[]="Writer Semaphore";
static const char ReaderSemaphoreName[]="Reader Semaphore";

static HANDLE hWriterSemaphore;
static HANDLE hReaderSemaphore;
static HANDLE hMemory;

int main(void)
{
int i;
hWriterSemaphore=CreateSemaphore(NULL,Buffers,Buffers,WriterSemaphoreName);
hReaderSemaphore=CreateSemaphore(NULL,0,Buffers,ReaderSemaphoreName);
hMemory=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0
,sizeof(char [Buffers][BufferSize]),MemoryName);
addr=MapViewOfFile(hMemory
,FILE_MAP_WRITE,0,0,sizeof(char [Buffers][BufferSize]));
for (i=0;i<Buffers;i++)
{
Memory=(char *)addr;
addr=addr+BufferSize;
}

for(i=0;;++i)
{
WaitForSingleObject(hReaderSemaphore,INFINITE);
puts(Memory[i%10]); // Reader reads data
ReleaseSemaphore(hWriterSemaphore,1,NULL);
}


UnmapViewOfFile(Memory);
CloseHandle(hWriterSemaphore); CloseHandle(hReaderSemaphore);
return 0;
}



PROGRAM PISAC.C JE SLJEDECI:

#include <windows.h>
#include <assert.h>
#include <stdio.h>


#define BufferSize 100
#define Buffers 10
static const char MemoryName[]="Share Memory Name";
static char * Memory[Buffers];
char * addr;
static const char WriterSemaphoreName[]="Writer Semaphore";
static const char ReaderSemaphoreName[]="Reader Semaphore";

static HANDLE hWriterSemaphore;
static HANDLE hReaderSemaphore;
static HANDLE hMemory;

int main(void)
{
int i;
hWriterSemaphore=CreateSemaphore(NULL,Buffers,Buffers,WriterSemaphoreName);
hReaderSemaphore=CreateSemaphore(NULL,0,Buffers,ReaderSemaphoreName);
hMemory=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0
,sizeof(char [Buffers][BufferSize]),MemoryName);
addr=MapViewOfFile(hMemory
,FILE_MAP_WRITE,0,0,sizeof(char [Buffers][BufferSize]));
for (i=0;i<Buffers;i++)
{
Memory=(char *)addr;
addr=addr+BufferSize;
}
for(i=0;;++i)
{
WaitForSingleObject(hWriterSemaphore,INFINITE);
printf("Writing to Buffer %i\n",i);
wsprintf(Memory[i%10],"This is the writer - %i\n",i);

Sleep(1000);

ReleaseSemaphore(hReaderSemaphore,1,NULL);
}

UnmapViewOfFile(Memory);
CloseHandle(hWriterSemaphore); CloseHandle(hReaderSemaphore);
return 0;
}



 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.smin.sezampro.yu.



Profil

icon Re: Windows API:Modifikacije primjera čitač-pisač u Windows API 27.04.2004. u 00:02 - pre 243 meseci
Pitanje upuceno autoru teme: da li smatras, da je posetiocima ovog foruma, u velikoj meri dosadno, pa si im (iz cisto "dobre namere") poslao zadatke kako bi ih "probudio" ili pak, na jedan vrlo ne suptilan nacin, trazis/zahtevas da ti neko, uradi _kompletan_ "domaci zadatak"?
Ovo pitam, jer ne vidim da si _bilo_sta_ sam uradio po pitanju zadat(a)ka, osim sto si poslao iste.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Windows API:Modifikacije primjera čitač-pisač u Windows API

[ Pregleda: 2381 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.