Merhaba arkadaşlar.İşletim sistemi olarak linuxun Leap 15.4 dağıtımını kullanıyorum ve işletim sistemleri ödevlerimden birini yaparken aldığım bir hata var , yardım edebilir misiniz?
Sorunuma gelirsem şöyle açıklayayım ; main program ile aynı dizindeki birden fazla text dosyası içerisindeki stringleri okuyacak programı yazıyorum. Bu stringlerde 0 ve 1 lerden oluşuyor , ekrana 1 lerin sayısını yazdıracağım. Thread yapısını ise programa komut satırında parametre olarak verilen her bir text dosyası için thread oluşturmak ve text dosyalarının okunmasını threadlerle sağlamak. Programımı yazdım ve " gcc -pthread -o ... " ile programı başarıyla derliyorum, terminalde bir hata almıyorum. Fakat programı çalıştırıp , programa parametre olarak bir text dosyası verdiğimde "Segmentation Fault(core dumped)"uyarısı veriyor ve dosyaları okuyamıyorum.
Örnek :
./main 8-10.txt 5-10.txt 4-10.txt
Total Number of Ones in All Files: 14
-- Burda 3 txt dosyası parametre olarak verildi ve 3 thread çalışarak bu dosyaların içeriğini okudu ve içerisindeki 1 sayısını döndürdü.
`#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
int global;
void *func(void *argp)
{
char buffer[500];
//char *c=argp;
snprintf(buffer,sizeof buffer,"%s",argp);
FILE *fp=fopen(buffer,"r");
int ch;
if(fp!=NULL)
{
do
{
ch=fgetc(fp);
if(ch==1)global++;
printf("%s",ch);
}
while(ch!=EOF);
}
else
{
printf("Text file yok");
exit(1);
}
}
void goster()
{
printf("%d\n",global);
}
int main(int argc,char *argv[])
{
if(argc>1)
{
argc-=1;
argv+=1;
pthread_t thread[argc];
for(int i=0;i<argc;i++)
{
pthread_create(&thread,NULL,func,argv);
}
for(int i=0;i<argc;i++)
{
pthread_join(thread,NULL);
}
}
else
{
printf("Dosya adi girilmedi, 1 sayisi --- > 0 ");
}
goster();
}`