|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6514
|
[C] Problema open file fantasma
Ciao a tutti,
ho un problema davvero singolare con la creazione di files. Sto lavorando sotto Linux. In pratica, apro un file: Codice:
file_desc_out = open(filename, O_CREAT | O_WRONLY, 0666 ); Se digito il comando "file <nome_file>" per sapere il tipo mi dice: Codice:
out_info: cannot open (out_info) Avete qualche idea? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Ciao,
Bè, se riesci a postare anche il resto del codice è meglio, il problema potrebbe essere nella variabile 'filename' o altro.... inoltre ti consiglio di effettuare i controlli sul valore di "errno" come minimo dove open ritorna con errori.. per utilizzare la variabile errno includi l'header errno.h e dichiara errno extern cosi: Codice:
extern int errno; |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6514
|
Ciao,
l'errno l'ho controllato. Vale 29, ovvero "No such file or directory". Ecco il codice: Codice:
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
void open_out_info_file_(int*file_desc_out, const char*filename){
*file_desc_out = open(filename, O_CREAT | O_WRONLY, 0666 );
if(*file_desc_out == -1)
{
perror("Errore creazione file info di output \n");
printf("errno = %d \n", errno);
exit(-1);
}
}
void write_out_info_file_(int*file_desc_out, const int*buffer, const int*num_elems){
int elems_write;
elems_write = write(*file_desc_out, &buffer[0], (*num_elems) * sizeof(int));
if( elems_write != (*num_elems) * sizeof(int))
{
perror("Errore scrittura file info di output \n");
printf("errno = %d \n", errno);
exit(-1);
}
}
void close_out_info_file_(int*file_desc_out){
int ret = close(*file_desc_out);
if( ret!=0 )
{
perror("Errore chiusura file info di output \n");
printf("errno = %d \n", errno);
exit(-1);
}
}
Ultima modifica di Unrue : 11-12-2009 alle 14:55. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
Prova correggendo cosi:
Codice:
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
void open_out_info_file_(int*file_desc_out, const char*filename){
*file_desc_out = open(filename, O_CREAT | O_WRONLY, 0666 );
if(*file_desc_out == -1)
{
perror("Errore creazione file info di output \n");
printf("errno = %d \n", errno);
exit(-1);
}
}
void write_out_info_file_(int*file_desc_out, const int*buffer, const int num_elems){
int elems_write;
elems_write = write(*file_desc_out, &buffer[0], sizeof(int));
if( elems_write != sizeof(int))
{
perror("Errore scrittura file info di output \n");
printf("errno = %d \n", errno);
exit(-1);
}
}
void close_out_info_file_(int*file_desc_out){
int ret = close(*file_desc_out);
if( ret!=0 )
{
perror("Errore chiusura file info di output \n");
printf("errno = %d \n", errno);
exit(-1);
}
}
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6514
|
Quote:
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
capisco... non so nulla di fortran... però hai provato ad indagare con un debugger? tipo ddd che è una interfaccia per gdb...
Dovresti riuscire a capire ciò che accade. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6514
|
Ho capito il problema. In pratica, passando una stringa da Fortran a C si deve prestare attenzione a quando finisce realmente la stringa lato C. Se passo una stringa di 100 elementi, ma ne contiene solo 20, senza alcun controllo creo un file di nome stringa + 80 spazi.
Infatti il file c'era, ma non vedendo gli spazi pensavo che il nome fosse quello. Una gestione aberrante delle stringhe in Fortran, eh va bè, è vecchiotto e si vede |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:06.



















