![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/share/emscripten/tests/stdio/ |
Upload File : |
#include <assert.h> #include <fcntl.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> static void create_file(const char *path, const char *buffer, int mode) { int fd = open(path, O_WRONLY | O_CREAT | O_EXCL, mode); assert(fd >= 0); int err = write(fd, buffer, sizeof(char) * strlen(buffer)); assert(err == (sizeof(char) * strlen(buffer))); close(fd); } void setup() { create_file("file.txt", "cd", 0666); } void cleanup() { unlink("file.txt"); } void test() { FILE *file; int err; char buffer[256]; file = fopen("file.txt", "r"); assert(file); // pushing EOF always returns EOF rewind(file); err = ungetc(EOF, file); assert(err == EOF); // ungetc should return itself err = ungetc('a', file); assert(err == (int)'a'); // push two chars and make sure they're read back in // the correct order (both by fgetc and fread) rewind(file); ungetc('b', file); ungetc('a', file); err = fgetc(file); assert(err == (int)'a'); int r = fread(buffer, sizeof(char), sizeof(buffer), file); assert(r == 3); buffer[3] = 0; assert(!strcmp(buffer, "bcd")); // rewind and fseek should reset anything that's been // pushed to the stream ungetc('a', file); rewind(file); err = fgetc(file); assert(err == (int)'c'); ungetc('a', file); fseek(file, 0, SEEK_SET); err = fgetc(file); assert(err == (int)'c'); // fgetc, when nothing is left, should return EOF fseek(file, 0, SEEK_END); err = fgetc(file); assert(err == EOF); err = feof(file); assert(err); // ungetc should reset the EOF indicator ungetc('e', file); err = feof(file); assert(!err); fclose(file); puts("success"); } int main() { atexit(cleanup); signal(SIGABRT, cleanup); setup(); test(); return EXIT_SUCCESS; }