fileio.cc
来自「sdcc是为51等小型嵌入式cpu设计的c语言编译器支持数种不同类型的cpu」· CC 代码 · 共 144 行
CC
144 行
/****************************************************************************** * to emulate the serial input and output of an 8051 controller * * fileio.cc - file input and output * ******************************************************************************/#include <sys/types.h>#include <iostream>#include <stdlib.h>#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include <string.h>#include <unistd.h>#include "fileio.hh"FileIO::FileIO(){ // make the input fifo if(mkfifo(DEF_INFILE, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) == -1) { if(errno != EEXIST) { std::cerr << "mkfifo(): Error number " << errno << " occourred: " << strerror(errno) << "\n"; exit(-1); } } // the input fifo - non blocking if ((fdin = open(DEF_INFILE, O_RDONLY|O_NONBLOCK)) == -1) { std::cerr << "open(): Error number " << errno << " occourred: " << strerror(errno) << "\n"; exit(-1); } // make the output fifo if(mkfifo(DEF_OUTFILE, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) == -1) { if(errno != EEXIST) { std::cerr << "mkfifo(): Error number " << errno << " occourred: " << strerror(errno) << "\n"; exit(-1); } } // the output fifo if ((fdout = open(DEF_OUTFILE, O_RDWR|O_NONBLOCK)) == -1) { std::cerr << "open(): Error number " << errno << " occourred: " << strerror(errno) << "\n"; exit(-1); }}FileIO::FileIO(char *infile, char *outfile){ // make the input fifo if(mkfifo(infile, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) == -1) { if(errno != EEXIST) { std::cerr << "mkfifo(): Error number " << errno << " occourred: " << strerror(errno); exit(-1); } } // the input fifo - non blocking if ((fdin = open(infile, O_RDONLY|O_NONBLOCK)) == -1) { std::cerr << "open(): Error number " << errno << " occourred: " << strerror(errno); exit(-1); } // make the output fifo if(mkfifo(outfile, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) == -1) { if(errno != EEXIST) { std::cerr << "mkfifo(): Error number " << errno << " occourred: " << strerror(errno); exit(-1); } } // the output fifo if ((fdout = open(outfile, O_RDWR|O_NONBLOCK)) == -1) { std::cerr << "open(): Error number " << errno << " occourred: " << strerror(errno); exit(-1); }}FileIO::~FileIO(){ close(fdin); close(fdout);}int FileIO::SendByte(char b){ int ret; if((ret = write(fdout, &b, 1)) != 1) { std::cerr << "write(): Error number " << errno << " occourred: " << strerror(errno); exit(-1); } return(ret);}int FileIO::RecvByte(char *b){ int ret; ret = read(fdin, b, 1); if((ret == -1) && (errno != EAGAIN)) { std::cerr << "read(): Error number " << errno << " occourred: " << strerror(errno); exit(-1); } return(ret);}// send a stringint FileIO::SendStr(char *str){ int ret; if((ret = write(fdout, str, strlen(str))) != (int)strlen(str)) { std::cerr << "write(): Error number " << errno << " occourred: " << strerror(errno); exit(-1); } return(ret);}int FileIO::RecvStr(char *str){ int ret; ret = read(fdin, str, MAX_SIZ-1); str[MAX_SIZ] = 0; if((ret == -1) && (errno != EAGAIN)) { std::cerr << "read(): Error number " << errno << " occourred: " << strerror(errno); exit(-1); } return(ret);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?