⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unp.c

📁 linux 平台, modbus tcp 协议的简单实现.
💻 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 + -