EOF'tan çıkan bir temel kabuk programı yazmaya çalışıyorum ve SIGINT'i bırakmadan işliyorum. İşlevsiz bir c dosyası içinde çalışıyordu ancak fonksiyonlar yaratırken EOF ve SIGNINT'in seg hatalarına neden olabileceği bir hataya rastladım. Buna neyin sebep olduğuna emin değilim ve birisinin benim yapmadığım bir şeyi fark etmesini umuyorum. Aşağıda, soruna neden olduğunu düşündüğüm işlev, Shell'in bir komutu okuduktan sonra (veya sinyalleri uygulayacağım) yaptığı ilk şey.C: Sinyal alındığında Segmentasyon hatası
int check_redirect(char *line, int flag)
{
int n = 0;
if (line == NULL) return (flag);
else
{
do
{
if (line[n] == '>') flag = 1;
n++;
}while (line[n] != '\n');
}
return (flag);
}
Bu fonksiyon denir nerede:
char buffer[15];
time_t now = time(NULL);
strftime(buffer, 15, "[%d/%m %H:%M]", localtime(&now));
fprintf(stdout, "%s # ", buffer);
signal(SIGINT, SIG_IGN);
read = getline (&line, &len, stdin);
signal(SIGINT, SIG_DFL);
flag = check_redirect(line, flag);
Umarım bu yeterince açık. Bu, bir komutun yürütülmesi için girdi arayan bir ilmiğin başlangıcındadır; komut istemini (tarih ve saat #) basar. Komutlar çoğunlukla çalışırlar, ancak zaman zaman kaybolurlarmış gibi davranırlar, ki bu sinyal işleme hatasıyla ilişkili olabilir.
Şimdiden teşekkürler.
... }while (line[n] != '\n');
sadece \n
karakteri daha kontrol önerin:
'line' bir satır karakteri yok: – FredK
@FredK Bir EOF karakteri dışında, satır gönderilmez. Eğer bir \ n hattı varsa, bir yönlendirme veya cd komutunun olup olmadığını görmek için denetimlerden geçirilir ve bozulduğu için strtok kullanılarak başka bir yapıya dönüştürülür ve yürütme sistem çağrısında kullanılır – BitFlow
Nerede/nasıl yapılır? ? – ryyker