Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Nickysys
3 / 3 / 0
Регистрация: 26.11.2009
Сообщений: 15
1

Перенаправление потокового вывода, отладка и проверка производится на терминале UNIX'а

17.10.2010, 22:28. Просмотров 687. Ответов 6
Метки нет (Все метки)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <wait.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdbool.h>
 
int main(){
 
    int i, j, y, c,f2, f3;
    bool f1;
    const int Slen = 4096;
    int fd[2];
    i = 0;
    j = 0;
    y = 0;
    c = 0;
    f1 = false;
    f2 = -1;
    f3 = 0;
    char **b;
    b=malloc(256*sizeof(char*));
    for (i = 0; i < 256; i++) b[i]=malloc(Slen);
    i=0;
    while (c != EOF) 
    {
       for (i = 0; i < 256; i++) b[i][0] = '\0';
       while (((c = getchar() != '\n' || (c != EOF)) && ((f3 + y) < Slen)) { 
          if ((c != ' ' && (c != '\t' && (c != '>' )
          {
                 b[i][j] = c;
                 y++;
                 j++;
          }
          if ((c == ' ' && (c == '\t' ) 
          {
                 i++;
                 j=0;
                 f3++;
          }
          if (c == '>' f2 = i;
          if (y == Slen) 
          {
                 printf("String is too long" ;
                 f1 = true;
          }
       } 
       if (f1){
       fd[0] = open(b[f2], 0);
       b[i]=0;
       if(fork()==0)
       {
dup2(fd[0],1);
                    execvp(b[0],b+1);
                    exit(0);
       }
       wait(&c);
       
       }
}
       else
{ while (((c = getchar()) != EOF) && (c != '\n' );}
    close(fd[0]);
    close(fd[1]);
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2010, 22:28
Ответы с готовыми решениями:

Перенаправление принтера в терминале
Добрый день, стоит Windows Server 2008 R2, установлена служба терминалов, служба печати. Клиенты...

Работа с файлами в консоли(терминале) (использование и перенаправление конвейера)
Привет! Необходимо из информации, содержащейся в файлах query, определить города, в которых...

Библиотека потокового ввода/вывода
А верно ли, что данная библиотека является вещью абсолютно бесполезной для Windows-программирования...

Перегрузка потокового ввода/вывода
Вот сама перегрузка ostream&amp; operator&lt;&lt; (ostream&amp; out, Poli&amp; outstream) { out&lt;&lt;&quot;Степень...

Перегрузка потокового ввода-вывода
Доброго времени суток!!! Возникла такая проблема: необходимо сделать перегрузку операций &lt;&lt; и &gt;&gt;....

6
accept
4838 / 3260 / 464
Регистрация: 10.12.2008
Сообщений: 10,569
18.10.2010, 02:07 2
C
1
while (((c = getchar() != '\n' || (c != EOF))
C
1
while ((c = getchar()) != '\n' && c != EOF && f3 + y < Slen)
1
Nickysys
3 / 3 / 0
Регистрация: 26.11.2009
Сообщений: 15
18.10.2010, 06:45  [ТС] 3
Строка ввоидмой команды должна быть ограничена по длине.
В итоге должен получиться минибаш, который реализует команду перенаправления вывода и др.команды.
Она должна падать на тесте "пустой файл", а не выдавать "сегментейшен фолз".
Еще есть тесты "бесконечный ls", "один миллион строк", "1 строка", "10 строк" и тд.
0
accept
4838 / 3260 / 464
Регистрация: 10.12.2008
Сообщений: 10,569
18.10.2010, 14:16 4
а system("cat >file") не подходит ?
есть ещё нестандартный popen
0
Nickysys
3 / 3 / 0
Регистрация: 26.11.2009
Сообщений: 15
20.10.2010, 22:04  [ТС] 5
надо именно так
0
accept
4838 / 3260 / 464
Регистрация: 10.12.2008
Сообщений: 10,569
21.10.2010, 05:22 6
сначала нужно сделать без перенаправления
чтобы при вводе команды, она выводила ответ
перенаправление обычно идёт на файл

то есть сначала у тебя программа не умеет перенаправлять, а потом ты добавляешь в неё возможность
она отлавливает символ '>', оставшуюяс за ним чать берёт в качестве имени файла
и тут popen бы прокатил (можно было бы запустить ls, и вывод переписывать в открытый файл)

Она должна падать на тесте "пустой файл"
это какой файл проверяется ?
если выводится "echo -n > file" то что с того, что файл пустой ?
0
Nickysys
3 / 3 / 0
Регистрация: 26.11.2009
Сообщений: 15
22.10.2010, 12:04  [ТС] 7
да, а system("cat >file") использовать нельзя
0
22.10.2010, 12:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2010, 12:04

Функции потокового ввода/вывода
Подскажите, пожалуйста, чем отличается fwrite/fread от fprintf/fscanf?

Итераторы потокового ввода/вывода stl
Возник такой вопрос при изучении stl. Берем файл, из которого нужно считать данные, через copy...

Перегрузка операторов потокового ввода-вывода
Пожалуйста, ответе на такой вопрос: почему при написании класса, при перегрузке операторов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru