windows linux编程 windows ubuntu

其实windows linux编程的问题并不复杂,但是又很多的朋友都不太了解windows ubuntu,因此呢,今天小编就来为大家分享windows linux编程的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

Windows Socket和Linux Socket编程的区别

SOCKET在原理上应该是一样的,只是不同系统的运行机置有些不同。

Socket编程 windows到Linux代码移植遇到的问题

1、一些常用函数的移植

2、网络

socket相关程序从windows移植到linux下需要注意的

1)头文件

windows下winsock.h/winsock2.h

linux下sys/socket.h

错误处理:errno.h

其他常用函数的头文件可到命令行下用man指令查询。

2)初始化

windows下需要用WSAStartup

linux下不需要(很方便),直接可以使用

3)关闭socket

windows下closesocket(...)

linux下close(...)

4)类型

windows下SOCKET

在linux下为int类型

5)绑定地址的结构体

名称相同,都是struct sockaddr、struct sockaddr_in,这两者通常转换使用;

在Windows下面名称都是大写,而在Linux下为小写

常用:

Linux下:

sockaddr_in destAddr;

destAdd.sin_family=AF_INET;

destAddr.sin_port=htons(2030);

destAddr.sin_addr.s_addr=inet_addr("192.168.1.1");

Windows下:

SOCKADDR_IN destAddr;

destAddr.sin_addr.S_un.S_addr=inet_addr("192.168.1.1");

但结构体中成员的名称不同

Windows中结构体成员

struct sockaddr_in{

short sin_family;

u_short sin_port;

struct in_addr sin_addr;

char sin_zero[8];

};

struct sockaddr{

u_short sa_family;

char sa_data[14];

};

struct in_addr{

union{

struct{ u_char s_b1,s_b2,s_b3,s_b4;} S_un_b;

struct{ u_short s_w1,s_w2;} S_un_w;

u_long S_addr;

} S_un;

};

下面的一些宏可以使windows下的程序移植到linux下(通过类型的重新定义,使代码具有linux和windows下的移植性)

[cpp] view plaincopy

#ifdef WIN32

typedef int socklen_t;

typedef int ssize_t;

#endif

#ifdef __LINUX__

typedef int SOCKET;

typedef unsigned char BYTE;

typedef unsigned long DWORD;

#define FALSE 0

#define SOCKET_ERROR(-1)

#endif

[cpp] view plaincopy

#ifdef WIN32

typedef int socklen_t;

typedef int ssize_t;

#endif

#ifdef __LINUX__

typedef int SOCKET;

typedef unsigned char BYTE;

typedef unsigned long DWORD;

#define FALSE 0

#define SOCKET_ERROR(-1)

#endif

6)获取错误码

windows下getlasterror()/WSAGetLastError()

linux下errno变量

7)设置非阻塞

windows下ioctlsocket()

linux下fcntl()<fcntl.h>

8)send函数最后一个参数

windows下一般设置为0

linux下最好设置为MSG_NOSIGNAL,如果不设置,在发送出错后有可能会导致程序退出。

9)毫秒级时间获取

windows下GetTickCount()

linux下gettimeofday()

10)数据类型的一些转化

通用的:

小端到大端(网络协议使用)的转换:htonl, htons

点分十进制IP和整数之间的相互转换:inet_addr()(该函数将点分十进制转为整数),inet_aton(),inet_ntoa(),inet_pton()(linux下独有该函数可以实现相互之间的转换)

使用到的头文件不相同,linux下用man命令查询。

另外注意:

linux下使用的套接字为伯克利套接字,因此在select()函数的使用上(第一个参数的设置)也有区别;

windows下为了与伯克利套接字匹配,第一个参数是无所谓,一般可设为0;

int maxfdp是一个整数值,是指集合中所有文件描述符的范围,即所有文件描述符的最大值加1,不能错!

3、多线程

多线程:(win)process.h--〉(linux)pthread.h

_beginthread--> pthread_create

_endthread--> pthread_exit

编程初学者用linux 电脑还是windows 电脑好

其实,对于编程初学者来说,在学习之前选择操作系统根据自身情况决定就可以了,哪个系统更加熟悉就选择哪个系统,毕竟学习编程前期都是以学习语法知识为重要,不涉及应用场景,系统的选择是无所谓的,但是以后深入学习之后,会根据不同的方向来选择操作系统。

比如web开发可以在Windows系统下进行,也可以在Linux系统下进行;对于大型互联网公司最好选择Linux系统,中小型公司可以选择Windows系统,当然也需要根据技术人员水平考虑。

对于大数据方向的话,就应该选择Linux操作系统,因为大数据平台部分都是基于Linux系统的。

linux下编程和windows下的编程有什么区别

Linux编程C语言用的比较多一些,C++语言也常用,Linux编程调用的接口叫做“系统调用”,C标准库、第三方开源C/C++库也是常用的,Linux编程会用到许多代码库,代码库选择上比较灵活;但是Windows编程C语言就用的少了,用C语言调用Windows API编程叫做Win32编程,微软将Windows API作了C++封装,封装成了C++库叫MFC,因为MFC库是和微软编程工具VC++/VS进行捆绑的,加上MFC编程的便捷,所以Windows编程C语言用的比较少,而C++语言用的比较多,后来微软退出.NET平台后,C#语言也成为了Windows编程的主流语言。

另外就是Linux编程,编写命令行程序仍然占很大比例,而Windows命令行编程已经非常少了,Windows主要是图形界面编程。还有就是Linux上脚本编程很普遍,而Windows上脚本编程的程序规模都比较小,鉴于脚本语言(除了shell脚本)是跨平台的,在Windows上也可以用,而且有些脚本编程属于Web开发的范畴,这里就不讨论了。

阅读剩余
THE END