C++在ubuntu上的意外行为
Unexpected behavior of C++ over ubuntu
我正在Ubuntu上编写一个简单的C++应用程序。
int main()
{
printf("Just a test line");
Server();
cout << "2";
return 1;
}
不管服务器功能是什么,应用程序都会在控制台(即Just a test line
)上写入任何内容之前开始执行它
我的详细问题:
请查看随附的整个应用程序,其中server()负责侦听端口4444上的连接。
#include <stdio.h>
#include <sys/types.h>
#include <cstdlib>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <strings.h>
#include <cstring>
#include <pthread.h>
#include <algorithm>
#include <iostream>
#include "message.h"
using namespace std;
#define iPort 4444
void Server(){
cout << "3";
int sockfd, newsockfd, n;
socklen_t clilen;
message m; // predefined class
char *buffer = (char *) malloc (sizeof (m));
struct sockaddr_in serv_addr, cli_addr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
cerr << "ERROR opening socket";
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(iPort);
serv_addr.sin_addr.s_addr = INADDR_ANY;
if (bind(sockfd, (struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
cerr << "ERROR on binding"<< endl;
listen(sockfd,5);
clilen = sizeof(cli_addr);
int pid =0;
while (1)
{
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0)
cerr << "ERROR on accept" << endl;
pid = fork();
if (pid < 0)
cerr << "ERROR on fork"<< endl;
if (pid == 0)
{
close(sockfd);
bzero(buffer,sizeof(m));
buffer= (char*)&m;
n = read(newsockfd,buffer,sizeof(m));
if (n < 0) cerr << "ERROR reading from socket"<< endl;
exit(0);
}
else close(newsockfd);
}
}
int main()
{
printf("Just a test line");
Server();
cout << "2";
return 1;
}
我通过终端执行了如下命令:
pc@pc-SM40P:~/Desktop/LCR$ g++ -Wall -W -Werror main.cpp -o prog
pc@pc-SM40P:~/Desktop/LCR$ sudo ./prog
我本以为Just a test line
会出现在屏幕上,但什么也没出现。提前感谢您的帮助,问候
默认情况下,到终端的stdout输出是行缓冲的,因此直到换行时才会打印输出。更改为:
printf("Just a test linen");
或者在CCD_ 4线路之后呼叫CCD_。
相关文章:
- 在Ubuntu 16.04上安装Cilk时出现问题
- 在C++中对T*类型执行std::move的意外行为
- 如何在Ubuntu中使用cmake设置qt4
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 处理除以零会导致<csignal>意外行为
- vscode下的Arduino代码出现意外编译错误
- 使用++运算符会导致意外的结果
- 套接字读取后,我在缓冲区中看到意外输入
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 无法将 GLFW 库与 Ubuntu 18.04 上的头文件链接
- 无法在Ubuntu上将共享库与Eclipse链接
- 使用vscode调试时,GDB意外退出
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 尝试将字符串/字符转换为整数会产生意外结果
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- C++标头错误 C2238 意外标记";"
- C++中意外的多头值
- C++在ubuntu上的意外行为