Ich finde den Fehler in der Musterlösung nicht...



  • Hallo,

    heute die Musterlösung bekommen von meinem Lehrer wollte compilieren und bekomme lauter Fehlermeldungen:

    das ist der code, warum läuft das ding nicht?

    // Sperren von einer Datei

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <errno.h>
    
    int main(int argc, char* argv[])
    {
    	struct flock stSperre;
    	int iRc;
    	int fd;
    
    	if ((fd = open("locktest.dat", O_WRONLY | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO )) == -1)
    	{
    		printf("Fehler %s beim open\n", strerror(errno));
    	}
    
    	stSperre.l_type			= F_WRLCK;
    	stSperre.l_whence		= SEEK_SET;
    	stSperre.l_start		= atoi(argv[1]);
    	stSperre.l_len			= atoi(argv[2]);
    
    	/* Prüfen, ob Schreibsperre für den übergebenen Bereich möglich ist */
    
    	if ((iRc = fcntl (fd, F_GETLK, &stSperre)) == -1)
    	{
    		printf("Fehler %s bei F_GETLK.\n", strerror(errno));
    		return;
    	}
    
    	if (stSperre.l_type == F_UNLCK)		/* Sperren ist möglich */
    	{
    		/* Schreibsperre für den übergebenen Bereich setzen */
    
    		stSperre.l_type = F_WRLCK;
    		if ((iRc = fcntl (fd, F_SETLK, &stSperre)) == -1)
    		{
    			if (errno == EACCES || errno == EAGAIN)
    			{
    				printf("Jemnd hat eine sperre gesetzt in der zwischenzeit, bitte warten");
    			}
    		}
    		else
    		{
    			/* Jetzt kann die Datei bearbeitet werden */
    
    			lseek (fd, atoi(argv[1]), SEEK_SET);
    			iRc = write (fd, "12345678910", atoi(argv[2]));
    			printf("<%d> Zeichen geschrieben. Taste... ", getpid());
    			getChar;
    		}
    
    	    /* Schreibsperre für den übergebenen Bereich wieder aufheben */
    
            stSperre.l_type = F_UNLCK;
            iRc = fcntl (fd, F_SETLK, &stSperre);
            if (iRc == -1)
            {
                printf("Sperre aufheben ist nicht möglich\n");
            }
            else
            {
                printf("Sperre ist aufgehoben");
            }
        }
    	else
    	{
    		printf("Sperre nicht möglich. Bereich ist gesperrt von <%d>\n", stSperre.l_pid);
    	}
    
    	return 0;
    }
    




  • sieht so aus, als würde ein #include fehlen.
    🙂



  • 💡 Auf Linux ist struct flock in sys/file.h enthalten.


Anmelden zum Antworten