Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Команда read(), прочитать меньше байт 
:(
    Опции темы
Voldemar2004
  Дата 9.3.2009, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



Прочитал описание по команде read()Мне нужно прочитать меньше байт, чем есть в наличии, в канале связи.  smile 


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
azesmcar
Дата 9.3.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



не понял в чем проблема..функция read принимает количество байт которые нужно прочитать..

Добавлено через 3 минуты и 28 секунд
кстати, позволю себе заметить что статья немного некорректная...
Цитата

Системный вызов read(), объявленный в файле unistd.h, позволяет читать данные из файла. 


создается ощущение что функция читает только из файла...функция read может читать из любого дексриптора..будь то сокет, файл, консоль или что нибудь еще.
PM   Вверх
Voldemar2004
Дата 9.3.2009, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



azesmcar, меня смущает фраза "чем есть в наличии, в канале связи." - я с Linux'ом 2-ой раз в жизни сталкиваюсь, что за канал связи ? Может попробовать просто файл.


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
azesmcar
Дата 9.3.2009, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



немного теории..

в линуксе существует такая удобная штука как дескриптор..

все что вы открываете - сокеты, файлы, stdin, stdout, stderr и.т.д... это дескрипторы т.е. обычный integer. К примеру вы можете спокойно написать

Код

int sock = socket(...)
fwrite(sock, "chto-to" ... )


можете перенаправить например stdout в ваш сокет и все что будет выводится в консоль будет отправлено в сеть по данному сокету. Удобная штука. Конкретно функция read как первый параметр принимает этот дескриптор..

к примеру

Код

int main()
{
   int fd = open ("myfile.txt", O_RDONLY);
   if (fd < 0)
      return 1;
   char buf[10];
   ssize_t realsize = ret = read (fd, buf, 5))  
   // realsize показывает сколько на самом деле прочиталось байтов
   //т.е. вы запросили 5, а у него всего 2, он прочитает все вернет 2.
   //Если прочитал все, вернет 5.
}



Добавлено через 10 минут и 4 секунды
Цитата

azesmcar, меня смущает фраза "чем есть в наличии, в канале связи." - я с Linux'ом 2-ой раз в жизни сталкиваюсь, что за канал связи ? Может попробовать просто файл.


а без разницы, файл или что-то другое...я же говорю он читает из всего что под руку попадается smile

Это сообщение отредактировал(а) azesmcar - 9.3.2009, 16:14
PM   Вверх
Voldemar2004
  Дата 9.3.2009, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



azesmcar, понятно, что без разницы файл или что-то еще, но если файл пустой, то как 
Цитата

прочитать меньше байт, чем есть в наличии, в канале связи.


Вот создал файл с именем "13" только для чтения: 

user posted image

И 
Цитата

как прочитать меньше байт, чем есть в наличии, в канале связи. 
 если этот файл пустой ?  smile 

Это сообщение отредактировал(а) Voldemar2004 - 9.3.2009, 20:18


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
azesmcar
Дата 9.3.2009, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



Ээээ, я не выспался или я чего-то не понимаю?

А что ты хочешь из него прочитать если он пустой?
читай сколько хочешь, read вернет 0, поскольку файл пустой и ничего не прочиатно...вопрос сводится к тому как прочитать количество байт меньше нуля из файла? smile

Это сообщение отредактировал(а) azesmcar - 9.3.2009, 20:48
PM   Вверх
Voldemar2004
Дата 9.3.2009, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



Цитата(azesmcar @  9.3.2009,  21:46 Найти цитируемый пост)
вопрос сводится к тому как прочитать количество байт меньше нуля из файла? 
Ну и я про тоже  smile Я так понял: если в файле написано: "Hello, world!", то значит например прочитать 5 байт, т.е. первые 5 символов ? Типа "Hello" ?

Добавлено через 3 минуты и 56 секунд
Просто в задании написано 
Цитата
создать файл с помощью системного вызова open() только для чтения
, и 
Цитата
прочитать меньше байт, чем есть в наличии в канале связи


Или по-русски:

1. создать файл с помощью open()
2. записать в него что-то
3. определить количество символов (один символ - один байт) 
4. и прочитать на n-ое количество символов меньше




--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
azesmcar
Дата 9.3.2009, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 1
Всего: 211



Цитата

1. создать файл с помощью open()
2. записать в него что-то
3. определить количество символов (один символ - один байт) 
4. и прочитать на n-ое количество символов меньше

5. если количество байт меньше n, вывсти ошибку smile

размер файла и другую информацию о нем дает системный вызов stat (man 2 stat) и функцию fcntl посмотри..

думаю так задание решается
PM   Вверх
nickless
Дата 10.3.2009, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 4
Всего: 181



Voldemar2004, у нас специальный раздел по программированию в никсах есть

Модератор: перенесено из "*NIX системы: Общие вопросы"


Это сообщение отредактировал(а) nickless - 10.3.2009, 16:19


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Roman2010
Дата 9.4.2009, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 9.4.2009

Репутация: нет
Всего: нет



#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(void)
{
 size_t size;
 int fd[2];
 char read_buffer[5]="";
 char write_buffer[15]="Hello, world!";

 /* Создание pipe */
 if  (pipe(fd)<0)
 {
  /* Если создать pipe не удалось - вывод 
          сообщения на экран и прекращение работы */
  printf("Can\'t create pipe\n ");
  return 0;
 }
 if  ((size=write(fd[1],write_buffer,15))<0)
 {
  printf("Can\'t data write\n");
  return 0;
 }
 if  ((size=read(fd[0],read_buffer,5))<1)
 {
  printf("Can\'t data read\n");
  return 0;
 }
 printf("Read : %d byte\n",size);
 printf("Buffer : %s\n",read_buffer);
 return 0;
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1198 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.