gpt4 book ai didi

c - C 中的多进程 : global variable's value

转载 作者:行者123 更新时间:2023-11-30 15:16:24 25 4
gpt4 key购买 nike

这是来自网站的代码。它使用多处理来创建服务器。我的问题是:父进程 close(newsockfd) 会在子进程 doprocessing(newsockfd) 之前执行吗?

#include <stdio.h>
#include <stdlib.h>

#include <netdb.h>
#include <netinet/in.h>

#include <string.h>

void doprocessing (int sock);

int main( int argc, char *argv[] ) {
int sockfd, newsockfd, portno, clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n, pid;

/* First call to socket() function */
sockfd = socket(AF_INET, SOCK_STREAM, 0);

if (sockfd < 0) {
perror("ERROR opening socket");
exit(1);
}

/* Initialize socket structure */
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = 5001;

serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);

/* Now bind the host address using bind() call.*/
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
perror("ERROR on binding");
exit(1);
}

/* Now start listening for the clients, here
* process will go in sleep mode and will wait
* for the incoming connection
*/

listen(sockfd,5);
clilen = sizeof(cli_addr);

while (1) {
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);

if (newsockfd < 0) {
perror("ERROR on accept");
exit(1);
}

/* Create child process */
pid = fork();

if (pid < 0) {
perror("ERROR on fork");
exit(1);
}

if (pid == 0) {
/* This is the client process */
close(sockfd);
doprocessing(newsockfd);
exit(0);
}
else {
close(newsockfd);
}

} /* end of while */
}

===-=================
void doprocessing (int sock) {
int n;
char buffer[256];
bzero(buffer,256);
n = read(sock,buffer,255);

if (n < 0) {
perror("ERROR reading from socket");
exit(1);
}

printf("Here is the message: %s\n",buffer);
n = write(sock,"I got your message",18);

if (n < 0) {
perror("ERROR writing to socket");
exit(1);
}

}

==========-============================

代码来自这个网站: http://www.tutorialspoint.com/unix_sockets/socket_server_example.htm

最佳答案

当进程被 fork 时,将获取打开的文件描述符集的副本,并且打开文件的引用计数相应地增加。 close 仅发生在父进程中,因此子进程仍保留对打开文件的引用。执行顺序并不重要。在多 CPU 系统上,它可能真正同时发生。

全局变量被 fork 的子进程共享。 fork 进程在其自己的虚拟内存空间中运行。

关于c - C 中的多进程 : global variable's value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33114925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com