
 
/*
    #include <unistd.h>
    #include <fcntl.h>
    int fcntl(int fd, int cmd, ... ); 
    参数:
        - fd:需要操作的文件描述符
        - cmd:表示对文件描述符如何操作
            - F_DUPFD:复制文件描述符,复制的是参数fd,得到一个新的文件描述符
            - F_GETFL:获取指定的文件秒师傅文件状态fldg
                获取的flag和我们通过open函数传递的flag是一个东西
            - F_SETFL:设置描述符的文件状态flag
                O_WRDR, O_RDONLY, O_WRONLY不可修改
                O_APPEND 表示追加数据
                NONBLOCK 设置成不阻塞
        阻塞和非阻塞:描述的是函数的调用行为
*/      
#include <unistd.h>
#include <fcntl.h>
#include<stdio.h>
#include<string.h>
int main() {
    int fd = open("1.txt", O_RDWR);
    if(fd == -1) {
        perror("open");
        return -1;
    }
    int flag = fcntl(fd, F_GETFL);
    if(flag == -1) {
        perror("fcntl");
        return -1;
    }
    flag |= O_APPEND;
    int ret = fcntl(fd, F_SETFL, flag);
    if(ret == -1) {
        perror("fcntl");
        return -1;
    }
    
    char* str = "nihao";
    write(fd, str, strlen(str));
    if(ret == -1) {
        perror("write");
        return -1;
    }
    close(fd);
    return 0;
}