📄 unp.c
字号:
/******************************************************************************
*
* Copyright (c) 2008 Shanghai IS Software
*
* All rights reserved
*
* $Revision$
*
* $LastChangedBy$
* 1. lcj
*
* $LastChangedData$
* 2008/09/25
*
* Description: API for I/O operation
*
* Revision History:
* 2008/09/3 14:33 by lcj
* #1.created
*
*****************************************************************************/
#include "modbus_tcp/modbus_tcp.h"
ssize_t readn(int fd,void *vptr,size_t n)
{
size_t nleft;
ssize_t nread;
char *ptr;
ptr = vptr;
nleft = n;
while ( nleft > 0 )
{
if ((nread = read(fd,ptr,nleft)) < 0 )
{
if (errno == EINTR)
nread = 0;
else
return -1;
}
else if ( nread == 0 )
break;
nleft -= nread;
ptr += nread;
}
return (n-nleft);
}
ssize_t writen(int fd,const void *vpts,size_t n)
{
size_t nleft;
ssize_t nwriten;
const char *ptr;
ptr = vpts;
nleft = n;
while ( nleft > 0 )
{
if ((nwriten = write(fd,ptr,nleft)) < 0)
{
if ((nwriten < 0)&& (errno == EINTR))
nwriten = 0;
else
return -1;
}
nleft -= nwriten;
ptr += nwriten;
}
return n;
}
ssize_t readline(int fd,void *vptr,size_t maxlen)
{
ssize_t n,rc;
char c,*ptr;
ptr = vptr;
for ( n = 1; n < maxlen; n++ )
{
again:
if ((rc = read(fd,&c,1)) == 1)
{
*ptr++ = c;
if ( '\n' == c )
break;
}
else if ( 0 == rc )
{
*ptr = 0;
return (n-1);
}
else
{
if ( errno == EINTR )
goto again;
return (-1);
}
}
*ptr = 0;
return n;
}
sigfunc *signal(int signo,sigfunc *func)
{
struct sigaction act,oact;
act.sa_handler = func;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
if (signo == SIGALRM)
{
#ifdef SA_INTERRUPT
act.sa_flags |= SA_INTERRUPT;
#endif
}
else
{
#ifdef SA_RESTART
act.sa_flags |= SA_RESTART;
#endif
}
if (sigaction(signo,&act,&oact) < 0 )
return (SIG_ERR);
return (oact.sa_handler);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -