Результаты получили точно такие же, как при использовании стандартных функций.
2.2.3. Посылка пульса по событию (срабатывание таймера).
Текст программы:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <signal.h>
#include <unistd.h>
#include <errno.h>
#include <sys/dispatch.h>
#include <sys/siginfo.h>
#include <sys/neutrino.h>
#define BUF_LEN 256
typedef union
{
struct
_pulse pulse_msg;
char msg_buff[ BUF_LEN ];
}Msg_T;
#define ATTACH_POINT "qnx_msg_server"
#define BUF_LEN 256
#define CODE_TIMER 1
name_attach_t *msg_chanel;
void Setup_Timer( );
int main(int argc, char *argv[])
{
int rcv_id;
time_t tmm;
struct tm *now;
msg_chanel = name_attach( NULL, ATTACH_POINT, 0 );
Setup_Timer( );
Msg_T msg;
while(1)
{
rcv_id = MsgReceive( msg_chanel->chid, &msg, sizeof(msg), NULL );
if( rcv_id == 0 ) // Принят пульс
{
if( msg.pulse_msg.code == CODE_TIMER )
{
tmm = time( NULL );
now = localtime( &tmm );
printf("Recieve pulse. Time - %2.2d:%2.2d:%2.2d.\n", now->tm_hour, now->tm_min, now->tm_sec );
}
}
else // Принято сообщение от клиента
{
printf( "Server: receive message.\n" );
printf( "Message: %s\n", msg.msg_buff );
strcpy( msg.msg_buff, "OK!" );
MsgReply( rcv_id, EOK, msg.msg_buff, sizeof(msg.msg_buff) );
}
}
return EXIT_SUCCESS;
}
/* Настройка таймера */
void Setup_Timer( )
{
timer_t timer_id;
struct sigevent timer_event;
struct itimerspec timer;
int connect_id;
connect_id = name_open( ATTACH_POINT, 0 );
if( connect_id == -1 )
{
printf( "ConnectAttach error.\n" );
}
SIGEV_PULSE_INIT( &timer_event, connect_id, SIGEV_PULSE_PRIO_INHERIT, CODE_TIMER, 0 );
if( timer_create( CLOCK_REALTIME, &timer_event, &timer_id ) == -1 )
{
printf( "timer_create error.\n" );
}
timer.it_value.tv_sec = 5;
timer.it_value.tv_nsec = 0;
timer.it_interval.tv_sec = 5;
timer.it_interval.tv_nsec = 0;
timer_settime( timer_id, 0, &timer, NULL );
}
Результаты:
Recieve pulse. Time - 19:53:04.
Recieve pulse. Time - 19:53:09.
Recieve pulse. Time - 19:53:14.
Recieve pulse. Time - 19:53:19.
2.3. Использование файловой модели.
При такой реализации один процесс будет записывать в файл данные, а другой считывать их оттуда.
Текст программы:
Программа, которая записывает строку в файл:
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "file_header.h"
int main (int argc, char *argv[]) {
printf("This process writes to file!\n");
char buf[50] = "The sun is shining!";
printf ("Process wrote string: %s\n",buf);
int fd = open (FILE_ADDRES, O_WRONLY | O_CREAT);
write(fd, buf, sizeof(buf));
close(fd);
return EXIT_SUCCESS;
}
Программа, которая читает данные из файла:
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "../msg_file_write/file_header.h"
int main(int argc, char *argv[]) {
int size_read;
char buf[50];
printf("This process reads from file!\n");
int fd = open(FILE_ADDRES, O_RDONLY);
size_read = read(fd, buf, sizeof(buf));
if (size_read == -1) {
printf("Error reading %s", argv[1]);
return EXIT_FAILURE;
}
close(fd);
printf ("Process read from file %s: \"%s\"\n",FILE_ADDRES, buf);
return EXIT_SUCCESS;
}
#ifndef FILE_HEADER_H_
#define FILE_HEADER_H_
#define ATTACH_POINT "msg_server"
#define FILE_ADDRES "/net/QNX1/home/sam/file.txt"
#endif /* FILE_HEADER_H_ */
Результаты:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.