Nhờ giúp lỗi FILE has no member named _flag

Em đang thử port một lib từ Solaris sang Linux thì gặp vấn đề với đoạn code này:

int _sscans(WINDOW *win, char *fmt, va_list ap)
{
        char    buf[100];
        FILE    junk;
        junk._flag = _IOREAD|_IOWRT;
        junk._base = junk._ptr = (unsigned char *)buf;
        if (wgetstr(win, buf) == ERR)
                return (ERR);
        junk._cnt = (ssize_t)strlen(buf);
        return (_doscan(&junk, fmt, ap));
}

Khi compile cc có báo lại là

 error: 'FILE' has no member named '_flag'; did you mean '_flags'?

Cho em hỏi code này nên viết lại như thế nào ạ?

Học lập trình mà dở tiếng Anh nó khổ thế đấy.

Mấy cái đấy là field nội bộ của FILE mà, libc nó có expose ra cho bạn xài trực tiếp được đâu.

Ví dụ như _flag, thì thay = fcntl() nhé

fcntl(fileno(&junk), F_SETFL, _IOREAD | _IOWRT);

Tương tự với các field còn lại, dùng hàm liên quan để thay đổi field đó

Edit: Formatting vì type vội trên con phone cùi mía

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?