i'm having some trouble using lseek and the buffer for an assigment. The objective is to read a file and change every letter 'a' to a '?'. I'm running some minor programs to understand how the functions and buffer works and i'm having some trouble.. Imagine that my file "teste" has only "abcabcabc" in it. If i do this:
int fd = open("teste", O_RDWR);
char buf[1];
int fptr = lseek(fd, 0, SEEK_SET);
fflush(stdout);
read(fd, buf, 1);
printf("%s\n", buf);
i get on my console "a", so it reads well the first letter, because i put the pointer to the beggining. But if i do a if condition before the printf, comaparing buf to 'a', like:
if(buf == 'a') printf("%s\n", buf);
It doesn't work, it doesn't print anything, so it doesn't enter the if statement.. I need to compare the buffer to letters so i can change all 'a' of the file.. How can i do this guys?
Ok, this part is already solved due to the answers bellow, but now i'm trying to read all the file and compare each charecter to 'a', making a simple printf just to see if it's working.. i wrote this:
int fd = open("teste", O_RDWR);
char buf[1];
int fptr = lseek(fd, 1, SEEK_SET);
fflush(stdout);
read(fd, buf, 1);
while(fptr > 0){
read(fd, buf, 1);
if(buf[0] == 'a'){
printf("%s\n",buf);
}
fflush(stdout);
fptr=lseek(fd, (off_t)(1), SEEK_CUR);
}
close(fd);
But it's now working.. It prints only one'a', and then doesn't close and don't do anything.. Its like an infinite cycle but without entering the if statement. What's wrong?
printf("%s\n", buf);
is
UB. %s
wants a
NULL
terminated string. Use printf("%c\n", buf[0])
;if(buf == 'a')
must be if(buf[0] == 'a')
. You are comparing address of buf
with 'a'
char but you want to compare the content of first (an unique) cell of buf
array.