# [Język C] Programowanie - podstawy.

## nUmer_inaczej

Witam serdecznie. 

Wziąłem się za język C. Podoba mi się - jednak:

1. Jak używać podstawień w tekście (zamiennik seda?)

2. Czy w zamian za np. 'system ("find $HOME -type f - name *.jpg")' znajdę jakąś bibliotekę klasyczą, czy właśnie przeszukiwanie tak się realizuje?

3. Czym zastąpić potoki (znane mi z basha)?

Moje pytania wynikają ze skrzywień (używania tylko basha).

Mam nadzieję, że ktoś mnie nakieruje na odpowiedzi, najlepiej, jeśli będą poparte przykładem.

Dzięki za uwagę.

Pozdrawiam.

----------

## Garrappachc

Whoa, bash a C to totalnie inne światy. Jeżeli chcesz używać C do przeszukiwania systemu i podmieniania w nim znaków, to się nakodzisz, nakodzisz, a i tak nic Ci z tego ciekawego nie wyjdzie. W tego typu przypadkach lepiej zostań przy bashu. C jest raczej niskopoziomowe.

----------

## dziadu

Czy masz na mysli rzeczywiście czysty C czy może C/C++?

1. Musisz sprecyzować, co masz na myśli. Czy chesz parsować cały plik tekstowy i podmieniać tekst? Gdyby to był C++ to są biblioteki do tego.

2. Możesz zobaczyć choćby jak find jest zaimplementowane (paczka sys-apps/findutils)

3. A do czego Ci te potoki? W C odpowiednikiem pipe "|" byłoby wywołanie jednej funkcji z argumentem zwracanym przez inną, jeśli chodzi o przekierowania to są funkcje I/O.

No ale na podstawie tego co pytasz, zastanów się czy C jest najlepszym narzędziem dla Ciebie i Twoich zastosowań, może potrzebujesz języka wysokiego poziomu specjalizującego się w przetwarzaniu tekstu, np python?

----------

## sebas86

1. W bibliotece standardowej nie ma nic do wyrażeń regularnych. Musisz zaprząc do pracy jakąś bibliotekę, dla C++ jest coś w BOOST.

2. Robi się to ręcznie i niestety również nie ma wsparcia w standardowej bibliotece. Glibc dostarcza opendir i odpowiednie struktury.

3. W pliku stdio.h jest zdefiniowane stdin, stdout, stderr - dzięki nim możesz pisać i czytać przy użyciu funkcji operujących na uchwycie typu FILE (np. fread, fwrite). Możesz też po prostu używać funkcji piszczących/czytających do/z standardowego wyjścia/wejścia printf, scanf, etc. Później taki program po prostu połącz potokiem z poziomu powłoki.

----------

## nUmer_inaczej

Dziękuję Wam za informacje. 

Wynikałoby z tego, że pospieszyłem się nieco z zakupem książki Stephaena Prata "Język C. Szkoła programowania".

Doczytam ją jednak do końca, może uda mi się coś w tym języku napisać sensownego.

Póki co Wasze informacje są dla mnie w zupełności wystarczające.

Dzięki i pozdrawiam.

----------

## Jacekalex

 *Quote:*   

> 1. W bibliotece standardowej nie ma nic do wyrażeń regularnych. Musisz zaprząc do pracy jakąś bibliotekę, dla C++ jest coś w BOOST. 

 

Do regexu w C/C++ jest nie tylko Boost, jest też biblioteka PCRE, która jest o tyle sympatyczna, że ma licencję BSD, także można ją bezpiecznie brać do każdego projektu.  :Smile: 

```
dev-libs/libpcre
```

http://www.pcre.org/

Ma zresztą natywny support do C++, pliczek nagłówkowy:

```
/usr/include/pcrecpp.h
```

jest chyba w każdym Gentoo  na świecie.  :Wink: 

Jest też jakaś dodatkowa wtyczka specjalnie do C++ (której na tą chwilę nic w systemie nie wymaga):

```
dev-libs/pcre++
```

http://www.daemon.de/PCRE

Pozdro

 :Cool: Last edited by Jacekalex on Sat Jun 07, 2014 9:08 pm; edited 1 time in total

----------

## Garrappachc

Ależ oczywiście, że są takie biblioteki. Tylko że nie są one częścią biblioteki standardowej C. I taki był sens mojej wypowiedzi. Co innego C++ (standard C++11).

----------

## Jacekalex

 *Garrappachc wrote:*   

> Ależ oczywiście, że są takie biblioteki. Tylko że nie są one częścią biblioteki standardowej C. I taki był sens mojej wypowiedzi. Co innego C++ (standard C++11).

 

Nie wiem, co rozumiesz przez bibliotekę standardową w kontekście boosta, widzę (w kontekście bibliotek dotyczących wsparcie dla regexa) liczba paczek wymagających boosta i PCRE jest podobna, ale paczki wymagające PCRE są "cięższe gatunkowo":

Porównywałem wyniki:

```
equery d dev-libs/boost
```

oraz:

```
equery d dev-libs/libpcre
```

Pozdro

 :Cool: Last edited by Jacekalex on Wed Jun 11, 2014 1:08 am; edited 1 time in total

----------

## sebas86

Jest jakiś sens tych wypowiedzi? Nikt nie mówił, że BOOST jest częścią biblioteki standardowej, po prostu wskazałem prawdopodobnie najbardziej popularny zestaw dla języka C++, tym bardziej, że BOOST to nie tylko wyrażenia regularne ale masa innych elementów, które bardzo ułatwiają pracę i ładnie się ze sobą łączą (nie mówiąc już, że trzymają się konwencji dobrze ugruntowanych w STL). Ale to C++, dla C pozostają stety-niestety inne narzędzia.

----------

## lsdudi

 *nUmer_inaczej wrote:*   

> Witam serdecznie. 
> 
> Wziąłem się za język C. Podoba mi się - jednak:
> 
> 1. Jak używać podstawień w tekście (zamiennik seda?)
> ...

 

Podejrzewam że lepiej zrobisz jak chwilowo dasz sobie spokój z C.

Naucz sie najpierw jakiegoś jezyka  wyższego poziomu typu python/perl/ruby, Brakuje ci podstawowej wiedzy programistycznej, a klejenie kodu w C na podstawie kodu  z basha  to jeszcze gorzej niż pisanie w C na podstawie mieszanki jawy i PHP :]. Do wszystkiego są biblioteki ale raz trzeba wiedzieć jak je uzywać, niektóre z nich wymagają naprawdę sporej wiedzy na temat dzialania systemow operacyjnych i nieskopoziomowych wywolan. Dodakowo rozne filozofie w tworzeniu bibliotek powoduja ze uzywanie tych bibliotek to czesto katorga i meka, nie mowiac juz ze dokumentacja czetso jest tylko iluzoruczna.

PHP btw to mieszanka perla/basha/C/C++ z dodatkiem jawy.

----------

