I am using fputs to write strings to file, but under the debug mode, the content is not written to disk after the statement fputs. I think there is some buffer. But I would like to debug to check whether the logic is correct by viewing the content directly. Is there anyway to disable the buffer? Thanks.
2 Answers
You have a couple of alternatives:
fflush(f);to flush the buffer at a certain point.setbuf(f, NULL);to disable buffering.
Where f is obviously your FILE*.
ie.
#include <stdio.h>
int main(void)
{
char s[100];
FILE *f = fopen("test.txt", "w");
setbuf(f, NULL);
while (fgets(s, 100, stdin))
fputs(s, f);
return 0;
}
OR
#include <stdio.h>
int main(void)
{
char s[100];
FILE *f = fopen("test.txt", "w");
while (fgets(s, 100, stdin)) {
fputs(s, f);
fflush(f);
}
return 0;
}
1 Comment
Roman Byshko
+2, but it was impossible, so +1 only.
I don't know if you can't disable the buffer, but you can force it to write in disk using fflush
More about it: (C++ reference, but just the same as in C): http://www.cplusplus.com/reference/clibrary/cstdio/fflush/
9 Comments
Roman Byshko
You are referencing to a C++ header, although the question is tagged with C.
juliomalegria
@Beginner: it's exactly the same stuff .. but I guess you're right, I'll add a warning
Roman Byshko
It's not... believe me :) Make better reference to POSIX standard. But actually it would be even better to delete your answer, as I did it with mine... @AusCBloke has give a full answer.
AusCBloke
@Beginner it is the same, at least in this case, and especially since:
C++ : Reference : C Library : cstdio (stdio.h) : fflushRoman Byshko
@AusCBloke I just find this misleading (because of C++ there). This reference would be much better I think pubs.opengroup.org/onlinepubs/007904875/functions/fflush.html The link contains
cstdio which is different from string.h. |
setbufto NULL like thissetbuf(myfilepointer, NULL);.