美文网首页
Linux-C-Day1

Linux-C-Day1

作者: 国服最坑开发 | 来源:发表于2023-02-21 19:56 被阅读0次
    相关函数
    • open
    • close
    • read
    • write
    • perror
    • sleep // 秒
    • goto
    相关宏
    • errno
    • STDIN_FILENO
    • STDOUT_FILENO
    #include <fcntl.h> // open(), fcntl : file control
    #include <unistd.h> // close()  , unistd: unix standard header
    #include <stdio.h>
    #include <stdlib.h> // 标准库函数
    #include <errno.h> // 记录每一次函数调用的错误码, 配合使用 errno
    
    int main() {
        // 打开文件,返回FD
        if (open("aaa", O_RDONLY) < 0){
            perror("open file 'aaa'");
            exit(2);
        }
    
        int fd;
        if ((fd = open("some_file.txt", O_WRONLY | O_CREAT, 0644)) < 0) {
            printf("file open failed\n");
            exit(1);
        }
    
        printf("FD: %d\n", fd);
    
        // 关闭文件
        if (close(fd)) {
            printf("file close failed : %d\n", errno);
            exit(1);
        }
    
        printf("中文File open and close successfully\n");
        
        // 从标准输入文件,读入文件,输出到标准输出
        char buf[10];
        ssize_t n;
        // 这里会阻塞当前 进程
        n = read(STDIN_FILENO, buf, 10);
        if (n < 0) {
            perror("read STDIN_FILENO");
            exit(1);
        }
    
        write(STDOUT_FILENO, buf, n);
    
        return 0;
    }
    
    

    非阻塞read

    #include <stdlib.h>
    #include <unistd.h>
    #include <errno.h>
    #include <string.h>
    #include <fcntl.h>
    #include <stdio.h>
    
    #define MSG_TRY "try again \n"
    
    int main(void) {
        char buf[10];
        int fd;
        ssize_t n = 0;
        fd = open("/dev/tty", O_RDONLY | O_NONBLOCK);
    
        if (fd < 0) {
            perror("open /dev/tty");
            exit(1);
        }
    
    try_again:
    
        n = read(fd, buf, n);
        if (n < 0) {
            if (errno == EAGAIN) {
                // sleep 1 sec
                sleep(1);
                write(STDOUT_FILENO, MSG_TRY, strlen(MSG_TRY));
                goto try_again;
            }
            perror("read /dev/tty");
            exit(1);
        }
    
        write(STDOUT_FILENO, buf, n);
        close(fd);
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:Linux-C-Day1

          本文链接:https://www.haomeiwen.com/subject/frrokdtx.html