lire l’erreur d’appel système (mauvais descripteur de fichier)

J’ai ce code dans lequel j’obtiens le problème BAD FILE DESCRIPTOR lors de l’appel système en lecture. Cependant, mon appel écrit avec le même descripteur de fichier fonctionne correctement. Veuillez suggérer

void Update_Log( ) { struct logDetails update,update1[30]; struct stat fileData,fileData1; int file; int index; //pthread_t pid; char writeBuffer[MAX_BUFFER_SIZE]; char readBuffer[MAX_BUFFER_SIZE]; char mBuf[MAX_BUFFER_SIZE],mBuf1[MAX_BUFFER_SIZE]; if((access("/home/team02/DMS/Server/",F_OK))==0) //checking the file/dir existence puts("file found"); else puts("file not found"); if((file=open("/home/team02/DMS/Server/filename.txt",O_RDONLY|O_WRONLY|O_APPEND,S_IRWXU))==-1) perror("file not opened"); if((fstat(file, &fileData))==-1) perror("structure not filled"); if((stat("/home/team02/DMS/Server/f1",&fileData1))==-1) perror("structure not filled"); //printf("%d/n",fileData.st_mtime); //printf("%d",fileData.st_ctime); struct tm *mytm = localtime(&fileData.st_mtime); struct tm *mytime=localtime(&fileData1.st_mtime); strftime(mBuf1,18,"%I:%M:%S-%m%d%y",mytime); strftime(mBuf, 18, "%I:%M:%S-%m/%d/%y", mytm); puts(mBuf); if((strcmp(mBuf,mBuf1)==0)) puts("equal"); else puts("not equal"); strcpy(update.timestamp,mBuf); strcpy(update.clientName,mBuf); strcpy(update.filename,mBuf1); snprintf(writeBuffer,MAX_BUFFER_SIZE,"%s %s %s",update.clientName,update.filename,update.timestamp); //printf("%s",writeBuffer); //if((pthread_create(&pid,&thread_handler,NULL))!=0) //perror("Thread not created"); if((write(file,writeBuffer,strlen(writeBuffer)))==-1) perror("write unsuccessful"); **if((read(file,readBuffer,MAX_BUFFER_SIZE))==-1) perror("read unsuccessful");** for(index=0;index<strlen(readBuffer);index++) { sscanf(readBuffer,"%s %s %s",update1[index].clientName,update1[index].filename,update1[index].timestamp); printf("%s",update1[index].clientName); } close(file); } 

Selon la bibliothèque d’exécution, le mode ouvert O_RDONLY|O_WRONLY peut être problématique. Vous voulez probablement que O_RDWR remplace cette partie.

En outre, vous pouvez obtenir la valeur errno pour savoir exactement quel est le problème. Vous appelez perror() en cas d’erreur. Cela devrait vous dire quel est le problème. Quelle est la sortie générée par le programme?