Vai al contenuto

[Risolto, ma...] C e Unix: Bug di xcode, del terminale o del mio codice?


Lief

Messaggi raccomandati

Buongiorno, sto facendo un progetto per un esame universitario e fin'ora è andato più o meno tutto bene.

Ho usato sempre xcode come IDE ma visto che il programma deve girare anche su Linux ho usato anche il terminale (sia su mac che su ubuntu).

 

Tutto bene fino a ieri quando mi accorgo che la sincronizzazione effettuata attraverso semafori tra più processi un padre e diversi figli funziona perfettamente avviando il progetto da terminale ma non funziona completamente da Xcode dandomi diversi errori.

 

semop: Resource temporarily unavailable (se creo più di 5 txt)

semop: File too large (se ne creo più di 2)

Con 2 mi da invece i seguenti errori:

semop 1: Interrupted system call

semop 3: Identifier removed

 

A questo punto molti di voi diranno come facciamo a capire il problema senza avere il codice? Non pretenderai mica che ci leggiamo tutto il tuo codice di tutto il progetto vero?

 

Vi dico subito che no non vi chiederò niente del genere, ho infatti creato un mini-progetto con tutto il necessario per test e commentato in ogni sua parte.

Questo mini progetto l'ho fatto sia per xcode sia per terminale. Quello per terminale contiene un makefiles che vi faciliterà la compilazione. vi basterà infatti posizionarvi nella cartella giusta con cd e scrivere make da terminale per avere il compilato che poi potrete avviare con ./nomecompilato.

Per xcode ho creato un readme per sapere dove mettere i file di txt che di cui il progetto ha bisogno. infatti xcode non usa la cartella dei codici per leggere i file di testo ma la cartella del compilato.

 

https://www.dropbox.com/s/545srjo7i8xj3d9/xcode%20e%20terminale%20mini%20progetto.zip?dl=0

 

Questo mini-progetto contiene comunque un po' di codice ma ho cercato comunque di ridurlo all'osso.

 

Se trovate una domanda simile su stackoverflow sappiate che probabilmente è la mia, ho postato la mia domanda anche li infatti.

 

Vorrei chiarire una cosa. Il progetto su xcode funziona con un solo file (e di conseguenza un solo figlio) ma non funziona con più di un figlio e da errori ogni volta diversi (quindi la sincronizzazione dovrebbe essere giusta). Invece da terminale funziona a prescindere dal numero dei figli è questo che mi ha portato a pensare ad un bug in xcode che non gli permette di gestire bene i semafori.

 

Cerco qualcuno che faccia dei test (magari con una versione diversa di xcode, io uso l'ultima o che usi un'ide diverso sempre su mac o linux), e che provi a vedere se davvero su qualsiasi terminale funziona. Cerco naturalmente anche qualcuno che i semafori li conosca bene e riesca a capire se ho fatto un errore nel loro utilizzo (li ho imparati solo quest'anno potrei aver fatto dei macro-errori facili da trovare).

 

La prima parte (i test) li può fare chiunque abbia un sistema unix (le system calls usate su windows non funzionano). La seconda parte solo chi conosce abbastanza bene quella parte di c.

 

Terrò conto e ringrazio in anticipo chiunque risponderà, preciso solo che non posso permettermi di rifare da capo il progetto e neanche di riscriverne parti ampie (ormai l'esame è vicino), quindi anche se il codice fosse non proprio fatto a regola d'arte provate a ignorare quelle parti di codice e a soffermarvi solo sul presunto bug/errore nel codice.

 

EDIT. poco fa ho risolto il problema mettendo tutti i .c e i .h dentro la cartella dei compilati. stranamente ora funziona perfettamente. ma nello stesso tempo non so davvero se quello era un bug oppure no

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...