strerrorname_np를 통해서 errno를 EPERM 같은 값으로 출력할 수 있도록 코드를 짰는데,
계속 컴파일러가 strerrorname_np의 리턴값이 int라고 추론했다.
따라서 최상단에 _GNU_SOURCE를 붙여주었고, gcc임을 명시해주는 방식으로 해결할 수 있었다.
#define _GNU_SOURCE
#include<sys/epoll.h>
#include<stdio.h>
#include<errno.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>
int main() {
const char* filename = "buccaneer.txt";
int fd = open(filename, O_RDWR);
if (fd == -1) {
perror("open");
return 1;
}
struct epoll_event event;
int ret;
int epfd;
epfd = epoll_create1(0);
if (epfd == -1) {
perror("epoll_create1");
return 1;
}
event.data.fd = fd;
event.events = EPOLLIN | EPOLLOUT;
ret = epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event);
if (ret == -1){
printf("strerror: %s, code: %s\n", strerror(errno), strerrorname_np(errno));
perror("epoll_ctl");
return 1;
}
event.events = EPOLLIN;
ret = epoll_ctl(epfd, EPOLL_CTL_MOD, fd, &event);
if (ret == -1) {
perror("epoll_ctl");
return 1;
}
ret = epoll_ctl(epfd, EPOLL_CTL_DEL, fd, &event);
if (ret == -1){
perror("epoll_ctl");
return 1;
}
if(close(fd)) {
perror("close");
return 1;
}
return 0;
}'C & C++ > C' 카테고리의 다른 글
| [C] What is #define _XOPEN_SOURCE 600 ?? (0) | 2026.01.24 |
|---|---|
| [C] C에서 자주 쓰이는 libc 핵심 함수 모음 (0) | 2026.01.13 |
| [C] DMA란 무엇인가? (0) | 2026.01.12 |
| [C] stdio buffering control (0) | 2026.01.11 |
| [C] 일반적인 에러 상황에서 어떤 값을 리턴하는 게 좋을까? (0) | 2026.01.11 |