Problem einen int in eine Datei zu schreiben



  • Hallo,

    ich wollte heute etwas testen und komme auf keinen grünen zweig. Ich verstehe nicht warum das Programm sich so verhält.

    Das unten gelistete Programm schreibt in /var/notes etwas rein was als Parameter übergeben wird.

    Ich möchte die User ID mit reinschreiben. Die userid ist 0, das programm wird als root ausgeführt. Aber die userid wird nicht in die Datei geschrieben.

    Aussehen der Datei: 1: 0000 0000 0a62 6c61 0a                   .....bla.
    
    int main(int argc, char *argv[])
    {
    	int userid,fd;
    	char *buffer,*datafile;
    
    	buffer =(char *) ec_malloc(100);
    	datafile =(char *) ec_malloc(20);
    	strcpy(datafile, "/var/notes");
    
    	if(argc < 2)
    		usage(argv[0],datafile);	
    
    	strcpy(buffer,argv[1]);
    
    	printf("[DEBUG] buffer   @ %p: \'%s\' \n", buffer, buffer);
    	printf("[DEBUG] buffer   @ %p: \'%s\' \n", datafile, datafile);
    
    	// Datei schreiben
    	fd = open(datafile, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR);
    	if(fd == -1)
    		fatal("in main() while opening file");
    	printf("[DEBUG] filedescriptor is  %d\n", fd);
    	userid = getuid(); //reale benutzerid;
    	printf("[DEBUG] user   @ %d: \'%p\' \n",userid, &userid);
    	if(write(fd, &userid, sizeof(int)) == -1)
    		fatal("in main() while writing userid to file");
    	write(fd, "\n",1);
    
    	if(write(fd, buffer, strlen(buffer)) == -1)
    		fatal("in main() while writing buffer to file");
    	write(fd, "\n",1);
    
    	// Datei schließen
    	if(close(fd) == -1)
    		fatal("in main() while closing file");
    
    	printf("Note has been saved.\n");
    	free(buffer);
    	free(datafile);
    
    	return 0;
    }
    

    Danke für die Hilfe

    [edit]
    Ich habe die ganze Zeit erwartet eine ASCII 0 zu sehen aber ich hab nicht bedacht das 8 Bit 0 auch einer 0 entsprechen und das Programm richtig funktioniert. Ich bin wohl etwas zu sehr c# verwöhnt.



  • Hallo,
    gibt es einen Grund, warum du die nicht standardisierten Funktionen (open, write, etc) benutzt?

    #include <stdio.h>
    #include <errno.h>
    
    int main ( int argc, char *argv[] ) 
    {
    	unsigned userid; char* fname = "test.txt"; FILE* fp = NULL;	
    
    	if ( NULL == ( fp = fopen ( fname, "a+" )))
    	{
    		printf ("%s\n", strerror (errno));
    		return 1;
    	}
    	userid = 4712;
    	if ( 0 > fprintf ( fp, "%u %s\n", userid, argv[0] ))
    		printf ("%s\n", strerror (errno));
    	else
    		printf ( "%s written.\n", fname );
    	fclose ( fp );
    	return 0;
    }
    

    Gruß,
    B.B.



  • Z3D schrieb:

    Ich möchte die User ID mit reinschreiben. Die userid ist 0, das programm wird als root ausgeführt. Aber die userid wird nicht in die Datei geschrieben.

    Ich könnte mir vorstellen, dass dein Programm funktioniert und dass die User ID binär geschrieben wird.
    Binär geschriebene Zahlenwerte sind im Texteditor nicht lesbar.


Anmelden zum Antworten