apple:socket apple$ gcc test64.c
apple:socket apple$ ./a.out
__x86_64__apple:socket apple$
apple:socket apple$ gcc -m32 test64.c
apple:socket apple$ ./a.out
__i386__apple:socket apple$
代码如下
#include <stdio.h>
int main(int argc ,char* argv)
{
#ifdef __x86_64__
printf("__x86_64__");
#elif __i386__
printf("__i386__");
#endif
return 0;
}
---------
写了个socket,64位系统保错,32位不报错
使用gcc -m32 -o server server.c 编译解决
/* server.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MAXLINE 80
#define SERV_PORT 8000
int main(void)
{
struct sockaddr_in servaddr, cliaddr;
socklen_t cliaddr_len;
int listenfd, connfd;
char buf[MAXLINE];
char str[INET_ADDRSTRLEN];
int i, n;
listenfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
listen(listenfd, 20);
printf("Accepting connections ...\n");
while (1) {
cliaddr_len = sizeof(cliaddr);
connfd = accept(listenfd,
(struct sockaddr *)&cliaddr, &cliaddr_len);
n = read(connfd, buf, MAXLINE);
printf("received from %s at PORT %d\n",
inet_ntop(AF_INET, &cliaddr.sin_addr, str,sizeof(str)),
ntohs(cliaddr.sin_port));
for (i = 0; i < n; i++)
buf[i] = toupper(buf[i]);
write(connfd, buf, n);
close(connfd);
}
}
client:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MAXLINE 80
#define SERV_PORT 8000
int main(int argc, char *argv[])
{
struct sockaddr_in servaddr;
char buf[MAXLINE];
int sockfd, n;
char *str;
if (argc != 2) {
fputs("usage: ./client message\n", stderr);
exit(1);
}
str = argv[1];
sockfd = socket(AF_INET, SOCK_STREAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
servaddr.sin_port = htons(SERV_PORT);
connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
write(sockfd, str, strlen(str));
n = read(sockfd, buf, MAXLINE);
printf("Response from server:\n");
write(STDOUT_FILENO, buf, n);
close(sockfd);
return 0;
}
查找问题的时候参考这个链接http://jimmyleeee.blog.163.com/blog/static/930961820103822435873/
分享到:
相关推荐
本书介绍了大量的gdb调试技巧,里面的技巧在开发过程中非常的实用,高清带书签版
资料中总结了gdb调试过程中应注意的一些细节,并根据经验给出了一些调试技巧,希望对您有帮助!
gdb 使用的一些技巧整理,适合初学者。gdb是linux c 语言开发的必备调试工具,具有很强大的调试功能
GDB调试技巧
gdb 调试文档,讲述GDB调试技巧,快速找到问题所在,内含实例精讲。
用GDB调试程序,详尽的讲解让你快速掌握gdb调试技巧
linux下使用gdb调试程序的教程。 详细讲解gdb工具的使用,以及调试技巧等。 linux上常用调试技术: 走读代码 打印日志 /proc/pid/... gdb、dbx strace、ltrace valgrind
本文档为GDB使用和调试手册,可以根据本文档快速掌握GDB调试技巧,简单、易懂、全面!可以关注本人博客GDB调试篇快速掌握GDB技巧!
GDB调试精粹及使用实例,描述实战中的gdb使用技巧,并配实例说明。
非常好的gdb速查手册,适合gdb初学者,可以迅速了解到有哪些常用的gdb技巧。每个技巧都有相应的例子。
一个关于gdb使用小技巧的文档。100,在这里可能只是表明很多;具体的数目取决于您的参与和贡献。
本文详细描述欺骗ndk-gdb之后,如何使用gdb的各种常用命令去调试Android的动态链接库。包括如何反汇编,如何单步,等
编写一个应用程序,使用gdb调试,并熟悉gdb中几个最常用的命令 2、实验器材: 软件: 安装了ubuntu的VMware虚拟机。 硬件: PC机一台。 3、背景知识: 细节详见官方网站相关内容:...
远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接。使用GDB标准远程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿...
在了解GDB可以做什么,怎么做之前,让我们先来看看为什么要用GDB,或者说对调试工具有什么期望。 一般我们使用GDB(或其他调试工具)是为了发现程序bug,更经常地是在已知程序有错的情况下定位bug。既然这样,我们就...
本文详细介绍了在Linux环境下使用GDB如何调试应用程序的相关说明,大家通过阅读该文档,可以对GDB有一定的认识。
在网络上下载到linux-0.11的源代码后,首先是不断地除错,最终使其能在ubuntu12.04上编译通过,并能用bochs仿真。后来发现bochs仿真bootsect.s不方便,就改用qemu仿真了。