Именованные каналы в Linux
Заранее благодарю за помощь.
Цитата:
Originally posted by Ramon
Пожалуста подкиньте примерчик сервера и клиента
Пожалуста подкиньте примерчик сервера и клиента
Сервер:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <linux/stat.h>
#define FIFO "SIMPLE_FIFO"
int main(void)
{
FILE *fp;
char buf[80];
// создаем фифо
umask(0);
mknod(FIFO, S_IFIFO|0666, 0);
// запускаем сервер в прослушку
while(1)
{
fp = fopen(FIFO, "r");
fgets(buf, 80, fp);
printf("Получена строка: %s\n", buf);
fclose(fp);
}
return(0);
}
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <linux/stat.h>
#define FIFO "SIMPLE_FIFO"
int main(void)
{
FILE *fp;
char buf[80];
// создаем фифо
umask(0);
mknod(FIFO, S_IFIFO|0666, 0);
// запускаем сервер в прослушку
while(1)
{
fp = fopen(FIFO, "r");
fgets(buf, 80, fp);
printf("Получена строка: %s\n", buf);
fclose(fp);
}
return(0);
}
а вот клиент
Код:
#include <stdio.h>
#include <stdlib.h>
#define FIFO "SIMPLE_FIFO"
int main(int argc, char *argv[])
{
FILE *fp;
if (argc != 2)
{
printf("USAGE: fifoclient <string>\n");
exit(1);
}
if ((fp = fopen(FIFO, "w")) == NULL)
{
perror("fopen");
exit(1);
}
fputs(argv[1], fp);
fclose(fp);
return(0);
}
#include <stdlib.h>
#define FIFO "SIMPLE_FIFO"
int main(int argc, char *argv[])
{
FILE *fp;
if (argc != 2)
{
printf("USAGE: fifoclient <string>\n");
exit(1);
}
if ((fp = fopen(FIFO, "w")) == NULL)
{
perror("fopen");
exit(1);
}
fputs(argv[1], fp);
fclose(fp);
return(0);
}
Цитата:
желательно, чтобы клиент ожидал создания канала сервером и соответственно сервер ожидал подключения клиента
ну под свои условия переделаешь. скажу только, что если попытаться писать в канал, не имеющий читателя - сервера, программа выпадет в осадок по SIGPIPE.