我正在尝试在其他地方写一个输入的字符串,并且不知道如何取消作为此字符串的一部分出现的新行,我用stdin和fgets获取.
char buffer[100];
memset(buffer, 0, 100);
fgets(buffer, 100, stdin);
printf("buffer is: %s\n stop",buffer);
Run Code Online (Sandbox Code Playgroud)
我试图限制fgets获取的数据量,并限制写入多少数据,但新行仍然存在.我怎样才能简单地将输入的字符串放到最后写的字符中?
我目前有一个TCP服务器设置,可以接受来自客户端的连接并回显客户端输入的任何内容.如何让多个客户端连接到服务器并将其输入发送到所有客户端?
看来我应该分叉,但我不完全确定如何......
在服务器上,我应该放置一个从accept(或listen?)开始的无限循环,当有新连接时它会分叉吗?然后在子进程中,我将不得不从先前的进程关闭套接字并连接到新的进程,但我再次不确定.
关于forks和socket操作,伪代码会是什么样子?我猜:
while(1) //before connection or accept?
pid = fork()
if(pid==0)
// open socket from client
// run the rest of the code
// end process when client disconnects
else
// close socket from client
Run Code Online (Sandbox Code Playgroud) 这项轮询业务似乎是由疯子编写的,我不确定如何使用它来允许多个客户端连接到服务器,然后将其输入发送给所有其他客户端。
因此,如果我想让三个客户加入,我将需要以下内容:
ufds[0].fd = sd;
ufds[0].events = POLLIN;
ufds[1].fd = sd2;
ufds[1].events = POLLOUT;
ufds[2].fd = sd2;
ufds[2].events = POLLOUT;
ufds[3].fd = sd2;
ufds[3].events = POLLOUT;
ufds[4].fd = sd2;
ufds[4].events = POLLOUT;
Run Code Online (Sandbox Code Playgroud)
然后到底该做些什么以便可以读入和写出消息?
这是我的代码:
time_t tim=time(NULL); // acquire time information
struct tm * now=localtime(&tim);
char cyear[3], cmonth[2], cday[2], chour[2], cmin[2];
int test = 13;
sprintf(cyear, "%d", test);
sprintf(cmonth, "%d", now->tm_mon+1);
sprintf(cday, "%d", now->tm_mday);
sprintf(chour, "%d", now->tm_hour);
sprintf(cmin, "%d", now->tm_min);
printf("cyear is: %s\n",cyear);
printf("cmin is: %s\n",cmin);
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
cyear is:
cmin is: 7
Run Code Online (Sandbox Code Playgroud)
输出也不适用于cmonth或cday,但chour和cmin似乎给出了正确的输出.这里发生了什么?
当我尝试对我传递的数组做任何事情时,我得到了段错误.我可能正在做一些简单的愚蠢错误,但我没有看到它.
合并通话:
merge(&(array[size]), 0, size-1);
Run Code Online (Sandbox Code Playgroud)
合并
void merge(people* pe,int low,int high)
{ //cout<< pe[0].fname << endl;
if(low < high)
{ int mid = (low+high)/2;
merge(pe, low, mid);
merge(pe, mid+1, high);
mymerge(pe, low, mid, high);
}
}
Run Code Online (Sandbox Code Playgroud)
我进入那个cout,看看我是否可以访问那里的阵列,我立即得到了一个段错误.我在那里做错了什么?(我可以输出array [0] .fname,这样结构数组本身就没有问题)
我正在尝试用 C 语言制作一个服务器和一个客户端(TCP),它们将充当一个简单的聊天系统。我对这些事情知之甚少,并且一直在参考这个服务器示例和这个客户端示例 。
注意:按照我有限的研究建议,我将 bzero() 和 bcopy() 更改为 memset() 和 memcpy(),但是在这两种情况下都发生了错误。除此之外,我自己的客户端仅在格式和输出方面与链接示例不同。
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent * server;
char buffer[256];
if (argc < 3) {
fprintf(stderr,"usage %s hostname port\n", argv[0]);
exit(0);
}
portno = atoi(argv[2]);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) { perror("failed_socket_open"); exit(1); }
server = (struct hostent *)gethostbyname(argv[1]);
if (server == NULL) {
fprintf(stderr,"host isn't real, everything is a lie\n");
exit(0);
}
memset((char *) &serv_addr, 0, sizeof(serv_addr)); …
Run Code Online (Sandbox Code Playgroud)