相关函数
- 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;
}
网友评论