The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Помогите разобратся с С"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Помогите разобратся с С"  
Сообщение от Slava_D (??) on 30-Янв-09, 15:24 
Привет Всем!
пытаюсь написать маленькую прогу, которая с stdin пишет все в файл, но вот не хочет она у меня записывать в файл никак, пример

#include <stdio.h>
#define BUFSIZE 1024

int main(int argc, char* argv[])
{
    char line[BUFSIZE];
    FILE *fp;
    fp = fopen("param", "a");
    while (fgets (line, sizeof (line), stdin))
        {
            fputs(line, fp);
            printf("OK\n");
        }
    fclose(fp);
    return 0;
}
в чем может быть проблемма?

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Помогите разобратся с С"  
Сообщение от phpcoder email(??) on 30-Янв-09, 15:28 
>в чем может быть проблемма?

Советую начать с проверки значения, которое возвращает fopen()


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Помогите разобратся с С"  
Сообщение от Slava_D (??) on 30-Янв-09, 15:42 
>Советую начать с проверки значения, которое возвращает fopen()

Оно создаёт файл, но в него ничего не пишет, попробывал под виндой скомпилировать, после первого запуска писала в файл, потом фигу...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Помогите разобратся с С"  
Сообщение от phpcoder email(??) on 30-Янв-09, 15:49 
>>Советую начать с проверки значения, которое возвращает fopen()
>
>Оно создаёт файл, но в него ничего не пишет, попробывал под виндой
>скомпилировать, после первого запуска писала в файл, потом фигу...

Только что скомпилировал и запустил под Линуксом. Всё работает.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Помогите разобратся с С"  
Сообщение от Slava_D (??) on 30-Янв-09, 15:57 
>>>Советую начать с проверки значения, которое возвращает fopen()
>>
>>Оно создаёт файл, но в него ничего не пишет, попробывал под виндой
>>скомпилировать, после первого запуска писала в файл, потом фигу...
>
>Только что скомпилировал и запустил под Линуксом. Всё работает.

А у меня не хочет под фрёй, создаёт файл и не пишет ничего туда.
    if (fp==NULL)
    {
        printf("Error");
        return 0;
    }
все проходит нормально!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Помогите разобратся с С"  
Сообщение от Slava_D (??) on 30-Янв-09, 16:07 
причем если написать так, то работает

#include <stdio.h>

int main (int argc, char* argv[])
{
FILE *file;
file = fopen("text.txt","a");
fputs("test", file);
fputs("\n", file);
fclose(file);
return 0;
}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Помогите разобратся с С"  
Сообщение от Slava_D (??) on 30-Янв-09, 16:11 
>Только что скомпилировал и запустил под Линуксом. Всё работает.

Попробуй phpcoder запусти её несколько раз, будет ли работать, мож она не делает fclose(fp), и эти записи в буфере хронятся, т.к. while (fgets (line, sizeof (line), stdin)) - это как я понимаю бесконечный цикл, и выход из него Ctrl-C, и файл не закрывается - может такое быть???

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Помогите разобратся с С"  
Сообщение от phpcoder email(??) on 30-Янв-09, 16:16 
>>Только что скомпилировал и запустил под Линуксом. Всё работает.
>
>Попробуй phpcoder запусти её несколько раз, будет ли работать, мож она не
>делает fclose(fp), и эти записи в буфере хронятся, т.к. while (fgets
>(line, sizeof (line), stdin)) - это как я понимаю бесконечный цикл,
>и выход из него Ctrl-C, и файл не закрывается - может
>такое быть???

fgets() ждет конца файла (EOF), так что выходить надо по Ctrl+D

А по Ctrl+C ты просто программу вырубал, вот и не работало ничего.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Помогите разобратся с С"  
Сообщение от Slava_D (??) on 30-Янв-09, 16:26 
>[оверквотинг удален]
>>Попробуй phpcoder запусти её несколько раз, будет ли работать, мож она не
>>делает fclose(fp), и эти записи в буфере хронятся, т.к. while (fgets
>>(line, sizeof (line), stdin)) - это как я понимаю бесконечный цикл,
>>и выход из него Ctrl-C, и файл не закрывается - может
>>такое быть???
>
>fgets() ждет конца файла (EOF), так что выходить надо по Ctrl+D
>
>А по Ctrl+C ты просто программу вырубал, вот и не работало ничего.
>

Спасибо, заработало, но появилась еще одна проблема, прогу пытаюсь написать для сквидЫ, что-то типо внешних аксеслистов, она не умеет выходить по Ctrl+D, чё делать?, каждый раз его закрывать и открывать?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Помогите разобратся с С"  
Сообщение от phpcoder email(??) on 30-Янв-09, 16:31 
>Спасибо, заработало, но появилась еще одна проблема, прогу пытаюсь написать для сквидЫ,
>что-то типо внешних аксеслистов, она не умеет выходить по Ctrl+D, чё
>делать?, каждый раз его закрывать и открывать?

Кто она? Ctrl+D это ты нажимаешь, чтобы обозначить конец файла, а если тебе на вход подадут файл через пайп, то там будет EOF и никакого Ctrl+D нажимать не придётся.

Вообщем, неясно кто запускает твою программу и каким образом.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Помогите разобратся с С"  
Сообщение от Slava_D (??) on 30-Янв-09, 16:38 
>>Спасибо, заработало, но появилась еще одна проблема, прогу пытаюсь написать для сквидЫ,
>>что-то типо внешних аксеслистов, она не умеет выходить по Ctrl+D, чё
>>делать?, каждый раз его закрывать и открывать?
>
>Кто она? Ctrl+D это ты нажимаешь, чтобы обозначить конец файла, а если
>тебе на вход подадут файл через пайп, то там будет EOF
>и никакого Ctrl+D нажимать не придётся.
>
>Вообщем, неясно кто запускает твою программу и каким образом.

Запускает её squid, примерно такой строкой
external_acl_type my_prog children=1 %LOGIN %SRC /usr/squid/my_prog %u %s
squid передаёт вроде логин и айпи адрес, и ему надо ответить или OK или ERR,
что бы выяснить что он передаёт проге и в каком виде, я хочу записать в файл и посмотреть что там реально есть, и отвечаю ему OK в любом случае....

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Помогите разобратся с С"  
Сообщение от phpcoder email(??) on 30-Янв-09, 16:41 
>external_acl_type my_prog children=1 %LOGIN %SRC /usr/squid/my_prog %u %s

Судя по записи, squid вам передаёт данные не через stdin, а через параметры коммандной строки. Зачем вы тогда из stdin-то читаете? ;)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "Помогите разобратся с С"  
Сообщение от Slava_D (??) on 30-Янв-09, 16:45 
>>external_acl_type my_prog children=1 %LOGIN %SRC /usr/squid/my_prog %u %s
>
>Судя по записи, squid вам передаёт данные не через stdin, а через
>параметры коммандной строки. Зачем вы тогда из stdin-то читаете? ;)

параметры командной строки не нужны это было сделано для другого, а про stdin я посмотрел в исходниках к squid, на пример ip_user_check.c, тама все через stdin....

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "Помогите разобратся с С"  
Сообщение от angra (ok) on 30-Янв-09, 17:55 
>что бы выяснить что он передаёт проге и в каком виде, я
>хочу записать в файл и посмотреть что там реально есть, и
>отвечаю ему OK в любом случае....

Зачем тогда С? Неужели вы не знаете ни одного скриптового языка общего назначения?


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

15. "Помогите разобратся с С"  
Сообщение от Slava_D (??) on 30-Янв-09, 18:58 
>>что бы выяснить что он передаёт проге и в каком виде, я
>>хочу записать в файл и посмотреть что там реально есть, и
>>отвечаю ему OK в любом случае....
>
>Зачем тогда С? Неужели вы не знаете ни одного скриптового языка общего
>назначения?

Ща написано на перле, до этого было что-то на bash, но на прокси много пользователей, плюс хочу еще некоторую обработку делать, по мимо запросов sql, работа с файлами и т.д, хочу попробывать осилить на С, мне кажется будет быстрей (моё личное мнение, хочу пропрбывать)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

16. "Помогите разобратся с С"  
Сообщение от angra (ok) on 31-Янв-09, 02:37 
Вы не поняли. конечный плагин можно и на С делать ради скорости. Но вот для быстрой проверки, что именно передает squid perl/python/etc намного удобней и быстрее.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Помогите разобратся с С"  
Сообщение от vic (??) on 30-Янв-09, 16:35 
>Спасибо, заработало, но появилась еще одна проблема, прогу пытаюсь написать для сквидЫ,
>что-то типо внешних аксеслистов, она не умеет выходить по Ctrl+D, чё
>делать?, каждый раз его закрывать и открывать?

ну так случиться EOF как и в этом случае:
echo -e "1234\n2345" | proga

если хотите чтобы каждая строка записывалась без буферизации, то либо ее отключите setbuf(), либо вызывайте fflush() после каждой записи.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру