Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2012, 22:30   #1
spamerr
Новичок
Джуниор
 
Регистрация: 16.01.2010
Сообщений: 1
По умолчанию Именнованные каналы.Непонятки по коду

Всем привет.Задана была лабораторная по Линуксу.

С помощью именнованных каналов написать - клиент передает серверу полный путь к серверу. Сервер читает данный файл и передает клиенту результат.Если файл недоступен для чтения или же его нет в каталоге - отправляем ошибку клиенту.

Клиент
Код:
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#define NAME "sfifo.txt"
int main() 
{
int fd;
char text[100];
char textin[100];
printf("Vvedit pytb k faily\n");
fgets(text,sizeof(text),stdin);
if((fd=open(NAME, O_RDWR))==-1)
{
perror("Pomilka vidkrutya klienta");
return 1;
}
write(fd, text, strlen(text));
printf("Otrimano->\n");

while ((read(fd, textin, sizeof(textin))) > 0)
{
printf("%s",textin);
if (read(fd, textin, sizeof(textin)) <= 0)
{
close(fd);
perror("Vikonano");
_exit(-3);
}
}
close(fd);
unlink(NAME);
return 0;
}
Сервер

Код:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#define NAME "sfifo.txt"

int main() 
{
int fd;
int fp;
char ret;
char buf[100];
char out[100];
unlink(NAME);

if(mkfifo(NAME, S_IFIFO| S_IRWXU| S_IRWXG| S_IRWXU)) {
perror("Error FIFO");
return 1; 
}
if((fd=open(NAME, O_RDWR))==-1)
{
perror("Pomilka vidkrutya fayla servera");
return 1;
}
read(fd, buf, sizeof(buf));

printf("Otrimano->%s\n",buf);

fp = open(buf, O_RDONLY);
if (fp < 0)
{
	fprintf(stderr, "Cannot file open\n");
	exit(-1);
}
else
{
while ((ret = read(fp, &out, 100)) > 0)
write(fd, out, 100);
} 

close(fd);
close(fp);
return 0;
}
Проблема в том, что когда в коде использую:

fp = open(buf, O_RDONLY);


то сервер не может найти файл который нужно считать, в переменной buf - путь к файлу.

Если же использую:

fp = open("home/user/text.txt", O_RDONLY);

сервер отправляет содержимое файла клиенту без проблем.

Помогите решить проблему и подскажите как реализовать отправку клиенту ошибку о том что файл не найден или же запрещен для чтения.

Спасибо заранее
spamerr вне форума Ответить с цитированием
Старый 28.12.2012, 09:27   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

А вы напечатайте buf перед вызовом fopen - наверно сразу все станет понятно.
Подсказка - чем должен заканчиваться стринг?
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Editbox и анонимные каналы kmsboy Win Api 1 05.09.2012 15:09
каналы и сигналы в си(я запуталась в задаче) Reginsi Помощь студентам 7 04.01.2012 17:29
Анонимные каналы RAZOR1703 Win Api 1 29.11.2011 21:47
Межпроцессное взаимодействие. Каналы. Zefick Win Api 3 02.03.2009 20:48