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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как передать информацию через файловую систему? и что это вообще значит? 
V
    Опции темы
abskura
  Дата 12.12.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Обращаюсь к достопочтенным форумчанам со следующим вопросом:
- Что на практике означает (какие системные вызовы используются): "Передать полученную информацию через файловую систему в параллельный процесс"?

Понятно, что тут юзается fork(), а вот что значит передать через файловую систему? Это как? Это же явно не pipe(), тут что-то другое, подскажите что.

Полный текст задания:
Написать программу определения типа файла, указанного при зап­росе. Полученную информацию через файловую систему передать в параллельный процесс, где вывести на печать. Предусмотреть возможность поступления неоднократного прерывания от клавиатуры. При поступлении каждого сигнала прерывания выводить количество файлов (из числа ука­занных при запросе), содержащих текст программ на Си.
PM MAIL   Вверх
MAKCim
Дата 12.12.2009, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



скорее всего имеется в виду либо именованный канал (man mkfifo), либо обычный файл


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
djamshud
Дата 12.12.2009, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


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

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



Плюсую fifo. Но и через файл можно: man select, man poll.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
abskura
Дата 13.12.2009, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Реализую через mkfifo

Код
                        
#include <stdlib.h>  
#include <sys/types.h>
#include <unistd.h>  
#include <stdio.h>     
#include <fcntl.h>
#include <string.h>
int main()
{
    char str[256];
    char fileName[80];
    char buf[256];
    int childpid;
    int fd_fifo_w, fd_fifo_r;
    
    printf("\nEnter file name: ");
    scanf("%s", fileName);
    strcpy(str, "file ");
    strcat(str, fileName);
    
    unlink("/tmp/fifo0001.1");
    if((mkfifo("/tmp/fifo0001.1", 0666)) == -1)
        perror("mkfifo");        
    if(childpid=fork() == -1)
        perror("fork");
        
    if(childpid == 0)
    {
        printf("\nСын\n");
        if((fd_fifo_w = open("/tmp/fifo0001.1", O_WRONLY)) == -1)
            perror("open");    
        dup2(fd_fifo_w,1);
        system(str);
        close(fd_fifo_w);
    }
    else
    {
        printf("\nОтец\n");
                wait(0);
        if((fd_fifo_r = open("/tmp/fifo0001.1", O_RDONLY)) == -1)
            perror("open");    
        if(read(fd_fifo_r, &buf, 256) == -1)
            perror("read");
        printf("\nbuf: %s\n", buf);
        close(fd_fifo_r);
    }
    printf("\n");
    return 0;
}


В итоге при выполнении программы появлятеся это:
Код

user@Computer:~/working$ ./prog

Enter file name: file.c

Сын1

Сын1



И программа остаётся не завершённой. На чём-то виснет и не выходит. В процесс отец она получается вообще не попадает, а в сына аж два раза запускала. Завершить её можно нажав ctrl+C. Все перроры молчат... В чём тут может быть загвоздка? Просто первый раз использую mkfifo.

Это сообщение отредактировал(а) abskura - 13.12.2009, 00:33
PM MAIL   Вверх
abskura
Дата 13.12.2009, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добавил флаг O_NONBLOCK в оба open().
Теперь ситуация выглядит следующим образом
Код

usr@Computer:~/working$ ./prog

Enter file name: file.c

Сын1
open: No such device or address
file.c: ASCII C program text

Сын1
open: No such device or address
file.c: ASCII C program text


usr@Computer:~/working$


Чем не доволен опен?
PM MAIL   Вверх
MAKCim
Дата 13.12.2009, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(abskura @  13.12.2009,  00:32 Найти цитируемый пост)
 if(childpid=fork() == -1)
        perror("fork");

тут логическая ошибка

Добавлено через 9 минут и 8 секунд
Цитата(abskura @  13.12.2009,  00:57 Найти цитируемый пост)
Чем не доволен опен? 

в неблокирующем режиме открыть канал на запись можно только если некоторый _уже_ открыл его на чтение


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
abskura
Дата 13.12.2009, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



MAKCim Спасибо вам огромное, всегда выручаете).
if проглядел). С mkfifo разобрался.

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

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

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


 




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


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

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