62 строки
1.0 KiB
C
62 строки
1.0 KiB
C
#include <assert.h>
|
|
#include <errno.h>
|
|
#include <fcntl.h>
|
|
#include <signal.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <termios.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("test.txt", "abcdefg", 0666);
|
|
}
|
|
|
|
void cleanup() {
|
|
unlink("test.txt");
|
|
}
|
|
|
|
void test() {
|
|
struct termios tc;
|
|
int ret;
|
|
int fd;
|
|
|
|
fd = open("test.txt", O_RDONLY);
|
|
|
|
ret = tcgetattr(fd, &tc);
|
|
assert(ret == -1);
|
|
assert(errno = ENOTTY);
|
|
|
|
ret = tcgetattr(STDIN_FILENO, &tc);
|
|
assert(!ret);
|
|
|
|
ret = tcsetattr(fd, 0, &tc);
|
|
assert(ret == -1);
|
|
assert(errno = ENOTTY);
|
|
|
|
ret = tcsetattr(STDIN_FILENO, 0, &tc);
|
|
assert(!ret);
|
|
|
|
close(fd);
|
|
|
|
puts("success");
|
|
}
|
|
|
|
int main() {
|
|
atexit(cleanup);
|
|
signal(SIGABRT, cleanup);
|
|
setup();
|
|
test();
|
|
return EXIT_SUCCESS;
|
|
}
|