return -1;
}
num = read(fdr,buf,sizeof(buf));
if( num < 0)
{
printf("\nSERVER ERR (nothing to write)");
return -1;
}
printf("SERVER: IN READ CHAN [%s]\n",buf);
printf("end server \n");
return;
}
Входной файл inp.txt:
first_line
some info
Результаты:
# ./server inp.txt &
[3] 4255782
[2] - Done (255) ./server inp.txt
# file name inp.txt
# ./client
file name2 inp.txt 7
client read from file inp.txt
[first_line
some info0В°"Гњ7В°o]
SERVER: IN READ CHAN [first_line
some info0В°"Гњ7В°oU3В°]
end server
[3] + Done ./server inp.txt
#
Именованные каналы (FIFO) могут использоваться как средство взаимодействия между неродственными и даже удаленными процессами, хотя работают медленнее, чем неименованные.
V. Очереди сообщений
#include <mqueue.h>
mqd_t mq_open( const char * name,
int oflag,
... ) - открытие очереди сообщений
int mq_close( mqd_t mqdes ) - закрытие канала
int mq_unlink( const char* name ) - удаление канала
int mq_send( mqd_t mqdes,
const char * msg_ptr,
size_t msg_len,
unsigned int msg_prio ) - отправка сообщения в очередь
ssize_t mq_receive( mqd_t mqdes,
char* msg_ptr,
size_t msg_len,
unsigned int* msg_prio ) - принятие сообщения из очереди
Функциональные структуры программ
Рис.1. Функциональная структура клиента
Рис.2. Функциональная структура сервера
Листинги исходных кодов
posix_client.c
#include <mqueue.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/neutrino.h>
#include <errno.h>
#define PROGNAME "posix_client: "
int main(int argc, char *argv[]) {
char *smsg = "HELLO! IT IS CLIENT"; // A pointer to a buffer that contains the message that we want to send
mqd_t mq_des; // The message-queue descriptor, returned by mq_open()
struct mq_attr mq_stat; // Structure to store the attributes of the message queue
sleep( 2 );
// Open a message queue
if( (mq_des = mq_open("/serv_mq", O_WRONLY | O_CREAT, 0777, NULL)) == -1){
perror( PROGNAME "mq_open" );
exit( EXIT_FAILURE );
}
// Get a message queue's attributes
mq_getattr( mq_des, // The message-queue descriptor, returned by mq_open()
&mq_stat); // Structure to store the attributes of the message queue
// Send a message to a queue
if( mq_send ( mq_des, // The ID of a channel that we established by calling ChannelCreate()
smsg, // A pointer to a buffer where the function can store the received data
strlen( smsg )+ 1, // The size of the buffer
NULL ) == -1 ){
perror( PROGNAME "mq_send" );
exit( EXIT_FAILURE );
}
// printf ( "Message send\n " );
mq_close( mq_des );
return EXIT_SUCCESS;
}
posix_server.c
#include <mqueue.h>
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.