2011-01-28 25 views

cevap

47

, bunu yapabilirsiniz: İstediğin başka genelliği mümkün değildir

int bak, new; 
fflush(stdout); 
bak = dup(1); 
new = open("/dev/null", O_WRONLY); 
dup2(new, 1); 
close(new); 
/* your code here ... */ 
fflush(stdout); 
dup2(bak, 1); 
close(bak); 

. stdout numaralı belgeyi geri yüklemenize izin vermediğinden, freopen kullanarak herhangi bir çözüm yanlıştır. stdout, stdout değeri bir değer değil (FILE * türünde bir ifadeye genişleyen bir makro) olarak atama yoluyla stdout için bir çözüm yanlıştır.

+0

Dup2'yi kullanmayın. Yakın (yeni) ve sonra dup (1) kullanın; dup() doğru tanıtıcıyı elde etmenizi sağlar. 'Newfd açıksa, close() zamanında bildirilen hatalar kaybolur. Dikkatli bir programcı ilk önce newfd'yi kapatmadan dup2 kullanmaz. –

+9

@MoraruLilian: Çok kasıtlı olarak dup2'yi kullandım. Yorumunuz benim kodumla karıştırılan tüm argümanlara sahip, bu yüzden ne demek istediğinizden emin olamıyorum, ancak dup2' içermeyen herhangi bir çözüm ** tehlikeli yarış koşullarına sahiptir **. Dup2 (x, y) 'nin anlamı, 'x' nin bir kopyası ile atomik olarak ** yi değiştirmektir. –

İlgili konular