Es soll per lseek die Datei um 20 chars vergrößert werden und am neuen Ende soll dann das 3 Argument in die Datei geschrieben werden. Also Programmname dann Dateiname und dann der Text als 3. Argument.
Hierzu habe ich folgendes geschrieben:
und bekomme als Lösung folgendes raus
Hierzu habe ich folgendes geschrieben:
C:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
int fd;
char BUF_FILE[100], BUF_TEXT[100], BUF_OUT[100];
char gap[] = {"^@^"};
//Eingabe: Programmname [Datei][Text]
if(argc < 3)
{
printf("Zu wenig Argumente eingegebn:\n");
exit(-1);
}
if((fd = open(argv[1], O_RDWR, S_IRWXU)) == -1)
{
errno = fd;
printf("%s\n", strerror(errno));
exit(-1);
}
//Aus Datei in Array BUF einlesen
if(read(fd, &BUF_FILE, sizeof(BUF_FILE)) == -1)
{
errno = fd;
printf(":%s\n", strerror(errno));
exit(-1);
}
//File-Deskriptor ans Ende der Datei
if(lseek(fd, -1L ,SEEK_END) == -1)
{
errno = fd;
printf(":%s\n", strerror(errno));
exit(-1);
}
//Vergrößern um 20 chars
int i = 0;
while(i < 20){
write(fd, &gap, sizeof(gap));
i++;
}
//Text in Array BUF kopieren
strcpy(BUF_TEXT, argv[2]);
/*
if(lseek(fd, -1L ,SEEK_END) == -1)
{
errno = fd;
printf(":%s\n", strerror(errno));
exit(-1);
}*/
if(write(fd, &BUF_TEXT, sizeof(BUF_TEXT)) == -1)
{
errno = fd;
printf(":%s\n", strerror(errno));
exit(-1);
}
if(lseek(fd, 0, SEEK_SET) == -1)
{
errno = fd;
printf(":%s\n", strerror(errno));
exit(-1);
}
if((read(fd, &BUF_OUT, sizeof(BUF_OUT))) ==-1)
{
errno = fd;
printf("%s", strerror(errno));
exit(-1);
}
if((write(1, &BUF_OUT, sizeof(BUF_OUT))) == -1)
{
errno = -1;
printf("%s\n", strerror(errno));
exit(-1);
}
close(fd);
return EXIT_SUCCESS;
}
und bekomme als Lösung folgendes raus