W trakcie nauki kominukcji przez łącza nienazwane, napotkałem następujący problem. Nie mogłem przesłać liczby całkowitej pomiędzy procesem macierzystym, a potomnym. Po zmianie zmienej na tablicę charów wszytsko działa poprawnie. Czy zasadą jest, że przesyła się tylko ciągi znaków, a nie same liczby czy po prostu może coś źle zrobiłem?

- Rejestracja:ponad 10 lat
- Ostatnio:ponad rok
1
http://jedrzej.ulasiewicz.staff.iiar.pwr.wroc.pl/KomputeroweSystSter/wyklad/Lacza6.pdf
Funkcja wyczytuje ciąg danych - zatem tablica charów w tym przypadku służy jako bufor. Nie widzę w sumie problemu w wyczytaniu danej liczby, z tym że musiałbyś ją wtedy przekonwertować ze znaków do aktualnej liczby.
int _reader = 0;
DWORD _readerOffset = reinterpret_cast<DWORD>(_reader);
read(fd, (void *)_readerOffset, 4);
Oczywiście w takim przypadku wyczytujesz 4 znaki z pliku i nie są one odpowiednikiem liczby.
Pokaż swój kod, wtedy można powiedzieć coś więcej.
AdamK111
To było tylko pytanie w ramach douczenia się działania pipe. Nie mam problemu z konwertowaniem znaku na liczbę i odwrotnie. Chciałem tylko wiedzieć czy na pewno trzeba to robić. Żadne materiały w interneie nie zróciły na to uwagi

MexikanoS
@AdamK111: możesz wczytać dane nawet do unsigned chara. Pozostaje kwestia użycia danych. Wczytując plik, przesyłając dane, albo robiąc cokolwiek innego dostajesz wszystko po kolei w unsigned charach. Każda jedna literka, cyfra, bądź cokolwiek innego przesyłasz to jeden unsigned char. Wystarczy pobrać adres 'bufora'/zmiennej, której chcesz użyć i podać to jako argument do funkcji.
AdamK111
Chodzi mi tylko o to czy w buforze zawsze muszą być tylko znaki czy może być int. A nie problemy z przesłaniem itd. Zwykła krótka odpowiedź. Ale już i tak chyba rozumiem, że tylko znaki mogę przesyłać

MexikanoS
@AdamK111: odpowiedź jest trochę dłuższa i nie zmieszczę jej w komentarzu. Wytłumaczę Ci to tak - możesz przesłać znaki, możesz przesłać liczby. Zależy w jakim formacie zapisane są dane. Jeśli zapisujesz je w pliku tekstowym, np: (666 [0x36 0x36 0x36]) i wyczytasz ten tekst; wtedy najprościej w świecie masz stringa. Jeśli zapisałeś coś binarnie i 666 przybiera wartość 0x9a 0x02 i odczytasz to bezpośrednio na __int16 to nie ma najmniejszego problemu - i bezpośrednio odczytujesz liczby.
AdamK111
Ale mi nie chodzi o długą odpowiedź. Potrzebuję odpowiedzi tak/nie na 2 pytania.
1. Czy mogę przesłać int jako int bez zmian przez pipe?
2. Czy do przesłania int muszę go przekonwertować (obojętne jak) na chary
Resztę potrzebnych rzeczy sobie łatwo ogarnę

- Rejestracja:około 6 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Warszawa 🐪
- Postów:1719
0
Wrzuć kod, który napisałeś. Nie możemy za wiele powiedzieć nie widząc kodu.
To było pytanie do teoretycznego douczenia się. Nie mam probelmu z programem. po prostu zainteresowało mnie czy w pipe mogę wysłać liczbę np int czy muszę ją jednak najpierw przekonwertować na tablicę char

- Rejestracja:ponad 10 lat
- Ostatnio:ponad rok
1
#include <iostream>
void main()
{
__int16 buffer = 0;
FILE *pFile;
pFile = fopen("m.bin", "rb");
fread((char *)reinterpret_cast<unsigned long>(&buffer), sizeof(char), 2, pFile);
fclose(pFile);
std::cout << "Wartosc: " << buffer << "\n";
}
- Najwyraźniej tak.
- Tak jak wyżej.