Forum Linux.pl

Programowanie => C/C++ => Wątek zaczęty przez: DamianK w 2005-12-05, 16:34:06

Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: DamianK w 2005-12-05, 16:34:06
Witajcie,
chciałbym podzielić internet na 2 komputery, wcześniej tak miałem na windowsie. Próbowałem różnych regułek masquerade iptables wypisanych w różnych tutorialach, rowniez probowalem podzielic przez firestarter

Z gory dziekuje za pomoc,
Damian
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: chmooreck w 2005-12-05, 17:28:13
a ip_forward (opcja jadra) ustawiles ?
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: DamianK w 2005-12-05, 17:32:44
2005-12-05 17:28:13 chmooreck napisał:

> a ip_forward (opcja jadra) ustawiles ?

nie kompilowałem sam jądra bo mam te domyślne
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: chmooreck w 2005-12-05, 17:43:32
nie chodzi o kompilowanie, tylko o zalaczenie tej opcji...

a dokladnie wpisanie jedynki do odpowiedniego pliku... niestety w tej chwili nie pamietam pelnej sciezki - znajdziesz gdzies na googlach ;-)

Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: DamianK w 2005-12-05, 17:46:20
2005-12-05 17:43:32 chmooreck napisał:

> nie chodzi o kompilowanie, tylko o zalaczenie tej opcji...
 >
 > a dokladnie wpisanie jedynki do odpowiedniego pliku... niestety w tej chwili nie pamietam
 > pelnej sciezki - znajdziesz gdzies na googlach ;-)
 >
 >
jeśli chodzi ci o echo 1 > ... to tak
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: FROGER w 2005-12-05, 17:51:14
jesli cie dobrze rozumiem to chcesz stworzyc mini-siec (serwer-komputer)
czyli tak:
eth0 - interfejs na net :)
eth1 - interfejs na kompa

dopisz do /etc/network/interfaces   (zakładam ze na \\"serwerze\\" masz juz skonfigurowany net)

auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0

teraz dajesz /etc/init.d/networking restart
 teraz tworzysz /etc/init.d/firewall i nadajesz mu uprawnienia do uruchomienia:
chmod +x /etc/init.d/firewall

teraz trzeba go uzupelnic
...
(kolacja, poszukaj na google :) albo niech ktos inny napisze)
...

update-rc.d firewall defaults 20
teraz odpal /etc/init.d/firewall i juz powinno smigac :)
Mam nadzieje ze chodzilo ci o cos takowego. Tak sie mi wydaje ze tu gdzies byl dokladny opis, łącznie z konfiguracją firewall\\'a , oraz tworzeniem serwera DHCP i dzielenia po adresach MAC.
jak nie znajdziesz tutaj to napewno bedzie na www.dug.net (czy jaklos tak w kazdym razie DebianUsersGang) kompletny opis
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: FROGER w 2005-12-05, 17:56:38
Teraz załapałe,m ze to nie debian ;P ale nie przerażaj sie - zdecydowana większość jest pewnie taka sama albo bardzo podobna\\' :):)
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: DamianK w 2005-12-06, 14:40:00
Pingi ida najdalej do bramki domyslnej polaczenia internetowego (z 2-giego kompa) tracerty ida wczesniej, a nawet przy tracercie pokazuje mi dns serwera a przy www nie
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: DamianK w 2005-12-06, 15:34:41
2005-12-06 14:40:00 DamianK napisał:

> Pingi ida najdalej do bramki domyslnej polaczenia internetowego (z 2-giego kompa) tracerty ida
 > wczesniej, a nawet przy tracercie pokazuje mi dns serwera a przy www nie

Stronka mojego usługodawcy która jest wewnątrz sieci działa (nawet przez DNS bo mam go w sieci). Podaje tutaj jak mam skonfigurowany plik który uruchamia wszystkie komendy:
/sbin/modprobe iptable_nat
/sbin/modprobe iptable_mangle
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_TTL
echo \\"1\\" > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -F
/sbin/iptables -F INPUT
/sbin/iptables -F OUTPUT
/sbin/iptables -F FORWARD
/sbin/iptables -F -t mangle
/sbin/iptables -F -t nat
/sbin/iptables -X
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -A FORWARD -p all -s 172.16.0.2/32 -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -s 172.16.0.2/32 -j SNAT --to-source (moje IP interfejsu internetowego)

Maske mam na obydwoch: 255.255.255.0 i bramke na tym drugim 172.16.0.1 (takie IP mam ustawione na interfejsie LAN) PROSZE NAJLEPIEJ O KONTAKT NA GG 4620051
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: FROGER w 2005-12-05, 14:43:48
Potrzebuje odczytac N-tą linie pliku i zapisać ją do tablicy. Problem w tym , ze nie wiem jak odczytywac z konkretnej lini.
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: devilan w 2005-12-05, 14:52:29
2005-12-05 14:43:48 FROGER napisał:

> Potrzebuje odczytac N-tą linie pliku i zapisać ją do tablicy. Problem w tym , ze nie wiem jak
 > odczytywac z konkretnej lini.

Zainteresuj sie strumieniami iostream w szczegolnosci fstream.
Do tego strumien.ignore(); powinno Ci troche pomoc
Calosc w petli wykonujesz N-1 razy, a pozniej zapodajesz strumien.getline();

Oczywiscie obie te funkcje maja swoje parametry itp, ale w tym wypadku odsylam Cie do manuali w internecie lub podrecznikow (np. Symfonia C++ tom III).
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: FROGER w 2005-12-05, 17:30:27
A móglby ktos zapodac kod , przenoszacy moj wskaznik czytania do konkretnej lini ? Potem juz sobie poradze.

 Myslałem nad czyms w stylu :
czytaj plik az napodkasz N-1 znak "n" badz EOF (tylko juz nie wiem czy nie powinno byc czasem "nr" ale to sie juz dopracuje :) .Czytaj linie po znkau do napotkania EOF badz znaku "n". Tylko obawiam sie ze moj sposob bedzie troche czasochłonny , jesli w pliku byloby np. 100 000 lini po 1024 znaki w kazdej. Wiec dlatego prosze o cos szybszego . O ile jest mozliwe to prosze o kod. Wystarczy, ze przeniesie mnie na koniec/poczatek lini ktora chce czytac.

Za odpowiedz z gory dziekuje
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: jk33 w 2005-12-05, 17:56:19
2005-12-05 17:30:27 FROGER napisał:

> A móglby ktos zapodac kod , przenoszacy moj wskaznik czytania do konkretnej lini ? Potem juz
 > sobie poradze.
 >
 >  Myslałem nad czyms w stylu :
 > czytaj plik az napodkasz N-1 znak "n" badz EOF (tylko juz nie wiem czy nie powinno
 > byc czasem "nr" ale to sie juz dopracuje :) .Czytaj linie po znkau do napotkania
 > EOF badz znaku "n". Tylko obawiam sie ze moj sposob bedzie troche czasochłonny ,
 > jesli w pliku byloby np. 100 000 lini po 1024 znaki w kazdej. Wiec dlatego prosze o cos
 > szybszego . O ile jest mozliwe to prosze o kod. Wystarczy, ze przeniesie mnie na
 > koniec/poczatek lini ktora chce czytac.
 >
 > Za odpowiedz z gory dziekuje

To jest nie bardzo możliwe do zrobienia
w inny sposób, bo program nie widzi
pliku jako zbioru linii, ale jako zbiór
kolejnych znaków ( nie ważne, czy to
są normalne znaki alfanumeryczne,
czy znaki niedrukowalne, czy jakiekolwiek
inne).

Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: FROGER w 2005-12-05, 18:02:16
Czyli mam rozumiec, ze moge sie spokojnie wziac za pisanie i to nie bedzie jakis superwolny algorytm :) Ale musze przynac ze myslałem, że będzie na to krótszy sposób :):) Chociaz mam jeszcze jeden pomysl :)
Napisze sobie progs uzupelniajacy / skracajacy tekst w lini do 1024 znakow(znakami ' ' (spacja)), a potem juz tez bede mial łatwe i szybki liczenie :):). A takie rozwiazanie mi wystarczy, bo rzadko kiedy tekst w 1 lini bedzie przekraczal 500 znakow :)

Co wy na to?
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: jk33 w 2005-12-05, 18:47:06
2005-12-05 18:02:16 FROGER napisał:

> Czyli mam rozumiec, ze moge sie spokojnie wziac za pisanie i to nie bedzie jakis superwolny
 > algorytm :) Ale musze przynac ze myslałem, że będzie na to krótszy sposób :):) Chociaz mam
 > jeszcze jeden pomysl :)
 > Napisze sobie progs uzupelniajacy / skracajacy tekst w lini do 1024 znakow(znakami ' '
 > (spacja)), a potem juz tez bede mial łatwe i szybki liczenie :):). A takie rozwiazanie mi
 > wystarczy, bo rzadko kiedy tekst w 1 lini bedzie przekraczal 500 znakow :)
 >
 > Co wy na to?


Myślę, że ten program uzupełnaijący/skracający,
będzie bardziej spowalniał działanie całości,
niż jakbyś zrobił to poprostu licząc znaki 'n'.

Najlepiej, żebyś wykorzystał w celu czytania
znaków funkcję getc() z stdio.h,
albo funkcję read() z unistd.h
unistd.h jest dostępny tylko na systemach
*NIX, i nie jest częścią standardu C
Więc nie ma go na przykład w Dosie/Windzie

pozdrawiam
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: FROGER w 2005-12-05, 20:37:57
Ten program by byl oddzielnym progsem!Po prostu polegaloby to na tym, ze "sformatowal" bym sobie nowa wersje pliku (plik zawiera specyficzne dane, ktore sie raczej nie zmieniają, a już na pewno nie podczas pracy programu!. A ze do pliku dopisuje recznie to mysle ze to powinno przejsc (a bardzo zalezy mi na szybkosci)
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: jk33 w 2005-12-05, 20:45:15
2005-12-05 20:37:57 FROGER napisał:

> Ten program by byl oddzielnym progsem!Po prostu polegaloby to na tym, ze "sformatowal"
 > bym sobie nowa wersje pliku (plik zawiera specyficzne dane, ktore sie raczej nie zmieniają, a
 > już na pewno nie podczas pracy programu!. A ze do pliku dopisuje recznie to mysle ze to powinno
 > przejsc (a bardzo zalezy mi na szybkosci)

Ale generalnie nie ma takiej potrzeby,
program formatujący przyspieszyłby pdrugi rogram
tylko gdyby plik miał linie o długości >1024,
dla krótszych linii czas wzrośnie,
(bo zamiast wczytać np. 300bajtów
na linię musisz wczytać 1024)

A wykonanie programu formatującego zajmowałoby
przawdopodobnie więcej czasu niż wykonanie
właściwego przeszukania.

Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: FROGER w 2005-12-05, 22:46:03
Chyba mnie nie zrozumiales do konca :) Program formatujacy sfoja droga :) a to swoją :)

Powiedzmy ze nie ma problemu z progsem formatujacym bo plik sie przeformatuje, bo jakichkolwiek zmianach w nim, i takie rzeczy mozna sobie zrobic "osobno". W samym pliku podczas uzywania programu zmian nie bedzie :) i zreszta prgram w nim tez nie wykonuje zadnych zmian - po prostu ma odczytac, a to czy juz pllik jest OK to juz nie jego problem :). W kazdym razie problem uznaje za rozwiazany
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: devilan w 2005-12-06, 14:26:41
2005-12-05 18:47:06 jk33 napisał:
 > Najlepiej, żebyś wykorzystał w celu czytania
 > znaków funkcję getc() z stdio.h,
 > albo funkcję read() z unistd.h

NIE, mieszanie ze soba bibliotek (i naglowkow) z C oraz C++ co prawda działa, ale nie jest najlepszą formą prezentowania swoich umiejętności jeśli chodzi o C++!!! Wręcz przeciwnie - jeśli programujesz w C++ korzystaj z mechanizmów i bibliotek dla niego przeznaczonych jeśli załatwiają problem, bo inaczej tylko pokazujesz, że nie potrafisz do końca programować w C++, a tylko w C :/

A oto kod, który rozwiązuje problem (działa z kompilatorem obsługującym namespace'y - czyli na przykład linuksowym g++):
/* BEGIN OF C++ CODE */
using namespace std;
#include
#include

int main(int argc, char *argv[])
{
    int n;
    char bufor[1024];
    if(argc != 3)
    {
        cerr << "usage: program numer_linii plikn";
        exit(-1);
    }
    n = atoi(argv[1]);
    if(n < 1)
    {
        cerr << "Podaj jakis normalny numer liniin";
        exit(-2);
    }
    fstream plik(argv[2]);
    if(!plik)
    {
        cerr << "Nie moge otworzyc do odczytu pliku o nazwie " << argv[2] << endl;
        exit(-3);
    }

    for(int i = 0; i < n; i++)
    {
       plik.getline(bufor, sizeof(bufor));
       if(plik.bad())
       {
          cerr << "Blad odczytu pliku (moze zbyt wczesny koniec?)!n";
          exit(-4);
       }
    }
    cout << bufor << endl;
}
/* END OF SOURCE */

Od siebie dodam, że jesteś leniem (to do autora tematu). Wcześniej Ci napisałem wszystko co i jak, ale nie sprawdziłeś. Widać nie chcesz się niczego nauczyć tylko zaliczyć jakieś ćwiczenia z C++ :/
Ni mniej pozdrawiam
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: jk33 w 2005-12-06, 14:48:54
2005-12-06 14:26:41 devilan napisał:

> 2005-12-05 18:47:06 jk33 napisał:
 >  > Najlepiej, żebyś wykorzystał w celu czytania
 >  > znaków funkcję getc() z stdio.h,
 >  > albo funkcję read() z unistd.h
 >
 > NIE, mieszanie ze soba bibliotek (i naglowkow) z C oraz C++ co prawda działa, ale nie jest
 > najlepszą formą prezentowania swoich umiejętności jeśli chodzi o C++!!! Wręcz przeciwnie -
 > jeśli programujesz w C++ korzystaj z mechanizmów i bibliotek dla niego przeznaczonych jeśli
 > załatwiają problem, bo inaczej tylko pokazujesz, że nie potrafisz do końca programować w C++, a
 > tylko w C :/
 >
Chcialem powiedzieć, żeby zrezygnować
z iostream i użyć unistd.h

read() jest poprostu szybszy,
niż cin.

I nie jest to problemem w C++
Tytuł: Odczytywanie N-tej lini pliku (C++)
Wiadomość wysłana przez: devilan w 2005-12-06, 17:31:51
2005-12-06 14:48:54 jk33 napisał:
 > Chcialem powiedzieć, żeby zrezygnować
 > z iostream i użyć unistd.h
 >
 > read() jest poprostu szybszy,
 > niż cin.
 >
 > I nie jest to problemem w C++

Coz... temat kategorii chyba jednoznacznie wskazuje o jaki jezyk programowania chodzi...
No chyba, ze nie - to polecamy takie rozwiazanie:
head -n NUMER_LINII NAZWA_PLIKU | tail -n 1
:)

A ogolnie to C jest znacznie szybszy od C++:] Ale to tak offtopic :P