linux编程
文章平均质量分 73
king16304
这个作者很懒,什么都没留下…
展开
-
Linux中ifreq 结构体分析和使用
struct ifreq{#define IFHWADDRLEN 6 union { char ifrn_name[IFNAMSIZ]; } ifr_ifrn; union { struct sockaddr ifru_addr; struct sockaddr ifru_dstaddr; struct sockaddr ifru_broa转载 2016-08-30 16:18:15 · 1694 阅读 · 0 评论 -
Linux内核Socket CAN中文文档
自己在年假中空闲之余翻译的内核中Socket CAN的文档,原文地址在:http://lxr.linux.no/linux+v2.6.34/Documentation/networking/can.txt但是这篇文档没有涉及广播管理协议套接字 (SOCK_DGRAM) 的内容。另外一篇比较好的Socket CAN的英文文档是(详细介绍了广播管理协议套接字):Low转载 2016-08-30 15:51:14 · 407 阅读 · 0 评论 -
linux下write操作原理、错误原因及处理方法
linux下write操作原理、错误原因及处理方法 1. write函数介绍(1)文件I/O与标准I/O之争: 根据《UNIX环境高级编程》中介绍,文件I/O与准备I/O之间的差别主要有以下几点:其一,文件I/O是在系统的内核中实现的,而标准I/O函数则提供了文件I/O函数的一个完整的带缓冲的替代品。因此说,文件I/O是一种较低级的I/O操作函数,而标准I转载 2016-08-29 17:22:44 · 11030 阅读 · 0 评论 -
简单理解Socket
TCP/IP要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准,从字面意思来看TCP/IP是TCP和IP协议的合称,但实际上TCP/IP协议是指因特网整个TCP/IP协议族。不同于ISO模转载 2016-08-29 16:58:06 · 323 阅读 · 0 评论 -
sa_flags
sa_flags值:SA_NOCLDSTOP //此标志为on时,假如signum的值是SIGCHLD,则在子进程停止或恢复执行时不会传信号给调用本系统调用的进程。 SA_NOCLDWAIT //此标志为on时,当调用此系统调用的进程之子进程终止时,系统不会建立zombie进程。 SA_RESETHAND //此标志为on时,信号处理函数接收到信号后,会先将对信号处理的转载 2016-08-26 11:39:22 · 2040 阅读 · 0 评论 -
sigaction的sa_flags
sa_flags实际上是一个位掩码,可以根据需要需要设置某一个flag或者若干个flags的or组合。 每一个信号都有一组flags与其对应。在GNU C库中,当建立信号和handler之间的关系时,默认除了SA_RESTART flag外,其余flags都是默认设为0的。SA_RESTART flag设置为1或者0是由siginterrupt(int sig, int flag)函转载 2016-08-26 11:38:19 · 1973 阅读 · 0 评论 -
sigaction
sigaction(查询或设置信号处理方式)相关函数 signal,sigprocmask() ,sigpending,sigsuspend, sigemptyset表头文件 #include定义函数 int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);函数说转载 2016-08-26 11:28:17 · 349 阅读 · 0 评论 -
linux send与recv函数详解
1 #include 2 ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);3 ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags);recv 和send的前3个参数等同于read和write。flags参数值为0或转载 2016-08-22 17:09:25 · 260 阅读 · 0 评论 -
fcntl函数的说明与实例 (文件加锁)
对文件加锁是原子性的,可以用于进程间文件操作的同步。在linux下,有三个函数可以对文件进程加锁,分别是fcntl、flock、lockf。这里只说fcntl,它的用法也是最复杂的.对文件加锁是原子性的,可以用于进程间文件操作的同步。在linux下,有三个函数可以对文件进程加锁,分别是fcntl、flock、lockf。这里只说fcntl,它的用法也是最复杂的。fcntl是file c转载 2016-08-22 17:04:24 · 1344 阅读 · 1 评论 -
fcntl函数详解
功能描述:根据文件描述词来操作文件的特性。用法:int fcntl(int fd, int cmd);int fcntl(int fd, int cmd, long arg);int fcntl(int fd, int cmd, struct flock *lock);参数:fd:文件描述词。cmd:操作命令。arg:供命令使用的参数。lock:同上转载 2016-08-22 17:03:12 · 333 阅读 · 0 评论 -
fcntl使用
#include #include int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock);[描述]fcntl()针对(文件)描述符提供控制。参数fd是被参数cmd操作(如下面的描述)的描述符。针对c转载 2016-08-22 16:59:21 · 162 阅读 · 0 评论 -
socket 通信关于bind那点事1
结论:1、采用TCP通信时,客户端不需要bind()他自己的IP和端口号,而服务器必须要bind()自己本机的IP和端口号;2、若采用UDP通信时(这里是有客户端和服务器之分才这么说的,若是指定特定端口的UDP对等通信则不一样了),客户端也可以不需要bind()他自己的IP和端口号,而服务器需要bind自己IP地址和端口号;原因:1、因为服务器是时时在监听有没有转载 2016-08-22 16:55:57 · 3991 阅读 · 0 评论 -
socket 通信关于bind那点事
名称bind()把名字和套接字相关联使用格式#include sys/types.h>#include sys/socket.h>int bind(int sockfd, const struct sockaddr *addr,socklen_t *addrlen);功能描述当用socket()函数创建套接字以后,套接字在名称空间转载 2016-08-22 16:44:17 · 824 阅读 · 0 评论 -
关于linux下的socket程序 响应时间的问题
之前弄的2个linux的socket编程,一个服务端一个客户端的。只是当时作为一个socket练习做的。 现在想做qos通信方面的实验。所以想添加 客户端到服务端传输数据的响应时间。来解决。传输1m和10m或者1000m的数据时 时间的不同。(gettimeofday???)对socket很不熟悉。 麻烦高手帮忙 另外我的环境是fedora。我想在比较他们在qos使用的情况和不使用的情况下比较转载 2016-08-22 16:08:29 · 1549 阅读 · 0 评论 -
linux socke编程实例:一个简单的echo服务器程序
也许是第一次真正使用linux操作系统,忽然对丢弃已久的C产生了很大的兴趣,最近想学点linux的知识,在linux的世界里面,接触得最多的还是C,故有感写一下linux的socket程序。 也许很多朋友会像我一样,这样的程序在Java写得太多,以至对Socket的通信细节还不曾忘怀。由于未有linux下的编程经验,在写程序过程中碰到很多不懂的东西,经过google一翻后,终于把一些基本转载 2016-08-22 16:02:01 · 471 阅读 · 0 评论 -
Linux Socket 编程实例(一个Echo程序)
本文编的是echo服务器示例程序,当收到客户端的数据,服务器把数据不经加工地发送给客户。采用TCP连接,采用端口8080进行设计,在整个过程中主要涉及socket的通信。1. [代码]echo_server.c ?123456789101112转载 2016-08-22 15:58:11 · 776 阅读 · 0 评论 -
简单分析一下socket中的bind
在最开始接触bind的时候,只是在写基于tcp的server端的时候,知道在listen之前需要先bind一下,用来确保socket能在某个固定的端口监听。而bind的时候,函数参数中的端口填自己将要绑定的端口就行;而IP地址,需要填本机的IP,但是也可以用一个宏INADDR_ANY代替,用这个宏就可以不用查找本机的IP,它就可以代替本机的IP。当时只觉得这个INADDR_ANY比较神奇,但是由于转载 2016-08-22 15:56:06 · 207 阅读 · 0 评论 -
htons
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题。这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数。网络字节顺序与本地字节顺序之间的转换函数: htonl()--"Host to Network Long" ntohl()--"Network to Host Long" hto转载 2016-08-22 15:43:04 · 599 阅读 · 0 评论 -
in_addr
struct in_addr { in_addr_t s_addr; }; 结构体in_addr 用来表示一个32位的IPv4地址. in_addr_t 一般为 32位的unsigned long. 其中每8位代表一个IP地址位中的一个数值. 例如192.168.3.144记为0xc0a80390,其中 c0 为192 ,a8转载 2016-08-22 15:36:28 · 1282 阅读 · 0 评论 -
sockaddr_in , sockaddr , in_addr区别
sockaddr_in , sockaddr , in_addr区别struct sockaddr { unsigned short sa_family; char sa_data[14]; }; 上面是通用的socket地址,具体到Interne转载 2016-08-22 15:36:01 · 154 阅读 · 0 评论 -
关于in_addr 和inet_ntoa的用法
struct in_addr { in_addr_t s_addr; }; 结构体in_addr 用来表示一个32位的IPv4地址. in_addr_t 一般为 32位的unsigned long. 其中每8位代表一个IP地址位中的一个数值. 例如192.168.3.144记为0xc0a80390,其中 c0转载 2016-08-22 15:31:35 · 1306 阅读 · 0 评论 -
socklen_t 类型
在Linux下编译程序,accept( ; ; ;) 函数的第三个参数提示“从类型‘int*’到类型‘socklen_t*’的转换无效”,于是乎,我发现还有个 socklen_t 类型。解决办法: 将保存 struct sockaddr_un 结构的长度的变量类型,由 int 类型改为 socklen_t 类型。 将 int 类型改为 socklen_t 类型之后,编转载 2016-08-22 15:21:57 · 7616 阅读 · 1 评论 -
Linux网络编程入门 (转载)
(一)Linux网络编程--网络知识介绍Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端.客户端 在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一 个地方获取文件的时候,是转载 2016-08-22 15:20:09 · 276 阅读 · 0 评论 -
从sockaddr中取得Ip地址和端口号
在socket编程中,服务器端accept()等待一个客户端的连接,当连接成功后,accept拷贝客户端的地址信息到sin_addr里面,我们如何从sin_addr取得此客户端的Ip地址和端口号呢? 实际上,当sockaddr_in.sin_family = AF_INET时,sockaddr = sockaddr_in。 据此,我们可以做一下转换,就可以利用 inet_nto转载 2016-08-22 15:15:01 · 3656 阅读 · 0 评论 -
inet_ntoa函数陷阱
今天编程时遇到一个很诡异的问题,是关于inet_ntoa函数的。先看一个测试程序#include stdio.h>#include sys/socket.h>#include netinet/in.h>#include arpa/inet.h>#include string.h>int main(int argc, char* argv[])转载 2016-08-22 14:21:05 · 264 阅读 · 0 评论 -
inet_ntoa、 inet_aton、inet_addr
inet_addr() 简述:将一个点间隔地址转换成一个in_addr。 #include unsigned long PASCAL FAR inet_addr( const struct FAR* cp); cp:一个以Internet标准“.”间隔的字符串。 注释: 本函数解释cp参数中的字符串,这个字符串用Internet的“.”间隔格式表示一个转载 2016-08-22 14:20:10 · 193 阅读 · 0 评论 -
Linux内核的ioctl函数学习
我这里说的ioctl函数是在驱动程序里的,因为我不知道还有没有别的场合用到了ioctl, 所以就规定了我们讨论的范围。为什么要写篇文章呢,是因为我前一阵子被ioctl给搞混了,这几天才弄明白它,于是在这里清理一下头脑。一、 什么是ioctl。ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达转载 2016-08-22 11:34:44 · 392 阅读 · 0 评论 -
Linux Socket CAN驱动 <4.接收数据流程>
现在我们来分析一下CAN总线的接收数据流程,对于网络设备,数据接收大体上采用中断+NAPI机制进行数据的接收。同样,我们现在的CAN模块也是采用同样的方式进行数据的接收。由于我们只针对CAN总线接收数据这条主线进行分析。因些,会忽略一些针对CAN协议的设置及初始化等相关代码。 在初始化CAN设备时,我们需要给CAN设备分配NAPI功能。我们通过netif_napi_add()函转载 2016-08-22 11:20:17 · 1133 阅读 · 0 评论 -
Linux内核Socket CAN中文文档
原文地址在:http://lxr.linux.no/linux+v2.6.34/Documentation/networking/can.txt但是这篇文档没有涉及广播管理协议套接字 (SOCK_DGRAM) 的内容。另外一篇比较好的Socket CAN的英文文档是(详细介绍了广播管理协议套接字):Low Level CAN Framework Applicatio转载 2016-08-22 11:19:07 · 519 阅读 · 0 评论 -
Socket一些函数相关的返回值
若无错误发生,recv()返回读入的字节数。如果连接已中止,返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。如无错误发生,listen()返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。如无错误发生,则bind()返回0。否则的话,将返回SOC转载 2016-08-22 09:57:04 · 990 阅读 · 0 评论 -
setsockopt的作用
功能描述: 获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。用转载 2016-08-22 09:17:29 · 168 阅读 · 0 评论 -
setsockopt()用法(参数详细说明)
nt setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen);s(套接字): 指向一个打开的套接口描述字level:(级别): 指定选项代码的类型。SOL_SOCKET: 基本套接口IPPROTO_IP: IPv4套接口IPPROTO_IPV6: IPv6套接口转载 2016-08-22 09:12:03 · 211 阅读 · 0 评论 -
struct timeval结构体 以及 gettimeofday()函数
一、struct timeval结构体struct timeval结构体在time.h中的定义为:struct timeval{__time_t tv_sec; /* Seconds. */__suseconds_t tv_usec; /* Microseconds. */};其中,tv_sec为Epoch到创建str转载 2016-08-22 09:06:56 · 2712 阅读 · 0 评论 -
struct timeval结构体
转载地址:http://blog.chinaunix.net/uid-20548989-id-2533161.html该结构体是Linux系统中定义,struct timeval结构体在time.h中的定义为:[cpp] view plain copystruct timeval { __time_t tv_sec;转载 2016-08-22 09:02:47 · 856 阅读 · 0 评论 -
[gcc编程] socket编程——sockaddr_in结构体操作
sockaddr结构体sockaddr的缺陷:sa_data把目标地址和端口信息混在一起了struct sockaddr { unsigned short sa_family; char sa_data[14]; }; sa_family是通信类型,最常用的值是 "AF_INET"sa_转载 2016-08-21 18:56:19 · 424 阅读 · 0 评论 -
sockaddr_in结构体简介
sockaddr_in(在netinet/in.h中定义):struct sockaddr_in {short int sin_family; /* Address family */unsigned short int sin_port; /* Port number */struct in_addr sin_addr;转载 2016-08-21 18:55:21 · 3365 阅读 · 0 评论 -
Socket描述符选项[SOL_SOCKET]
Socket描述符选项[SOL_SOCKET] #include int setsockopt( int socket, int level, int option_name, const void *option_value, size_t option_len);转载 2016-08-21 18:50:44 · 230 阅读 · 0 评论 -
setsockopt用法详解
最近做的一个程序用到了IOCP通信模型,里面用到了setsockopt对套接字进行设置,看源代码的时候最setsockopt函数很不理解,看了msdn以后还是不太明白这个函数的用法,于是就到网上找了一个这个函数的用法,找到了下面的这篇文章,我觉得对setsockopt这个函数讲解的特别号,就转过来了,方便以后的查阅。。1.closesocket(一般不会立即关闭而经历TIME_WAIT的过转载 2016-08-21 18:47:53 · 247 阅读 · 0 评论 -
setsockopt设置socket状态
1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经转载 2016-08-21 18:47:11 · 235 阅读 · 0 评论 -
setsockopt()用法(参数详细说明)
int setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen);s(套接字): 指向一个打开的套接口描述字level:(级别): 指定选项代码的类型。SOL_SOCKET: 基本套接口IPPROTO_IP: IPv4套接口IPPROTO_IPV6: IPv6套接转载 2016-08-21 18:46:07 · 210 阅读 · 0 评论