Um... to nie ma sensu.
char *x;
OK, masz wskaźnik na znak(i), niezainicjalizowany...
*x = i;
Do wartości pod adresem x (który nie ma żadnej wartości) przypisujesz inta (przy okazji zmniejszasz też inta do chara)
write(stream, &x, 1024);
Następnie piszesz 1024 bajty pod adresem &x, czyli bajty x'a (wciąż niezainicjalizowanego) i reszta kompletnie losowa.
Co... chciałeś żeby ten kod zrobił?