C编程在Linux中创建文件时遇到问题

C编程在Linux中创建文件时遇到问题,c,linux,C,Linux,作为课程的一部分,我正在编写一个简单的负载平衡器,为了通知服务器和浏览器我绑定到的端口,我将它们保存为同一目录中的一个简单文件,然后它们可以读取。问题是,即使我正在创建的两个端口都使用相同的函数,但其中一个文件没有被创建。我已经一遍又一遍地检查代码,但找不到问题所在。 基本上,只创建文件http_端口 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h>

作为课程的一部分,我正在编写一个简单的负载平衡器,为了通知服务器和浏览器我绑定到的端口,我将它们保存为同一目录中的一个简单文件,然后它们可以读取。问题是,即使我正在创建的两个端口都使用相同的函数,但其中一个文件没有被创建。我已经一遍又一遍地检查代码,但找不到问题所在。 基本上,只创建文件http_端口

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <sys/socket.h> 
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>
#include "LB.h"

int main() {
    srand(time(NULL));
    int i, server_socket, http_socket, client_socket, servers[3];
    char *server_port = "server_port", *http_port = "http_port";
    http_socket = Get_Socket(http_port);
    server_socket = Get_Socket(server_port); //continues to load balancer

//inside functions.c
int Get_Socket(char* filename)
{
    int port, bind_state = -1;
    int new_socket;
    struct sockaddr_in socket_address;
    socket_address.sin_family = AF_INET;
    socket_address.sin_addr.s_addr = INADDR_ANY;
    do
    {
        port = get_random_port(PORT_MIN, PORT_MAX);
        socket_address.sin_port = htons(port);
        new_socket = socket(AF_INET, SOCK_STREAM, 0);
        bind_state = bind(new_socket, (struct sockaddr*) &socket_address, sizeof(socket_address));

    } while (bind_state < 0);
    Write_Port2File(filename, port);
    return new_socket;
}

void Write_Port2File(char* filename, int port)
{
    printf("%s", filename);
    FILE* fp = fopen(filename, "w");
    if (fp == NULL)
        exit(1);
    fprintf(fp, "%d", port);
    fclose(fp);
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括“磅小时”
int main(){
srand(时间(空));
inti、服务器_套接字、http_套接字、客户端_套接字、服务器[3];
char*server\u port=“server\u port”、*http\u port=“http\u port”;
http_套接字=获取_套接字(http_端口);
server_socket=Get_socket(server_port);//继续加载平衡器
//内部函数
int Get_套接字(字符*文件名)
{
int端口,bind_state=-1;
int新插座;
套接字地址中的结构sockaddr\u;
socket\u address.sin\u family=AF\u INET;
socket\u address.sin\u addr.s\u addr=INADDR\u ANY;
做
{
端口=获取随机端口(端口最小,端口最大);
socket_address.sin_port=htons(端口);
新的套接字=套接字(AF\u INET,SOCK\u STREAM,0);
bind_state=bind(new_socket,(struct sockaddr*)和socket_地址,sizeof(socket_地址));
}而(结合态<0);
写入端口2文件(文件名、端口);
返回新的_插座;
}
无效写入端口2文件(字符*文件名,int端口)
{
printf(“%s”,文件名);
FILE*fp=fopen(文件名,“w”);
如果(fp==NULL)
出口(1);
fprintf(fp,“%d”,端口);
fclose(fp);
}
如果您能为解决这个问题提供任何建议,我将不胜感激

另外,问题似乎只有在我启用chmod 755*和chmod 777文件夹的权限后才会出现。(这是课程要求的一部分)


提前谢谢。

当您尝试打开第二个文件时,
perror()
会说什么?OT:这个循环
while(bind\u state<0);
可能会泄漏套接字描述符。如果调用
bind()
失败,您想关闭
new\u socket
。还有对
socket()的调用
缺少错误检查。可能是
get\u random\u port()
把事情搞砸了?谁拥有“文件夹”,所有者与运行程序的用户不同?程序启动时“文件夹”是当前工作目录吗?在“文件夹”中是否有两个文件的过时版本?