【问题标题】:Server/Client TCP sockets Terminal Window服务器/客户端 TCP 套接字终端窗口
【发布时间】:2019-01-31 18:42:56
【问题描述】:

我想实现一个I/O终端如下:

-----------------------------
|                           |
|          Output           |
|                           |
|                           |
|                           |
-----------------------------
| Input:                    |
-----------------------------

我目前fork()ing 我的客户端套接字。所以我假设父进程可以用于Input:,并且每个子进程在完成处理请求后都会打印到输出区域。我将如何开始这样做?

【问题讨论】:

  • 您实际上只需要一个进程即可。查看select 系统调用并正确处理网络事件。单个客户端套接字的单个线程将轻松处理所有事情,并有空闲时间。
  • @Myst 我知道我也可以使用select,问题主要是关于 I/O 终端,因为我不知道如何在 C 中以这种方式格式化打印

标签: c sockets io


【解决方案1】:

我不确定我是否理解您的问题,但您考虑过这种情况吗?如果没有,那么对不起。

void printLength(int length);
void printWidth(int length, int input, int output, bool printInput, bool printOutput);
int lengthIO(unsigned x);
void IOterminal(int sizeOfTerminal, int inputValue, int outputValue);

void main()
{
    IOterminal(30, 9999, 5555);
}

void IOterminal(int sizeOfTerminal, int inputValue, int outputValue)
{
    printLength(sizeOfTerminal);
    printWidth(sizeOfTerminal, inputValue, outputValue, false, false);
    printWidth(sizeOfTerminal, inputValue, outputValue, false, true);
    printWidth(sizeOfTerminal, inputValue, outputValue, false, false);
    printWidth(sizeOfTerminal, inputValue, outputValue, false, false);
    printWidth(sizeOfTerminal, inputValue, outputValue, false, false);
    printLength(sizeOfTerminal);
    printWidth(sizeOfTerminal, inputValue, outputValue, true, false);
    printLength(sizeOfTerminal);
}

void printLength(int length)
{
    int i = 0;
    for (i; i < length; i++)
    {
        printf("-");
        if (i == length - 1)
        {
            printf("\n");
        }
    }
}
void printWidth(int length, int input, int output, bool printInput, bool printOutput)
{
    int lengthInput = lengthIO(input);
    int lengthOutput = lengthIO(output);
    int i = 0;
    printf("|");
    for (i; i < length; i++)
    {
        if (i > 0 && i < length)
        {
            if (i == 2 && printInput == true)
            {
                printf("Input:%d", input);
                length = length - (lengthInput + 5);
            }
            else if (i == 2 && printOutput == true)
            {
                printf("Output:%d", output);
                length = length - (lengthOutput + 6);
            }
            else
            {
                printf(" ");
            }
        }
    }
    printf("|\n");
}
int lengthIO(unsigned x) {
    if (x >= 1000000000) return 10;
    if (x >= 100000000)  return 9;
    if (x >= 10000000)   return 8;
    if (x >= 1000000)    return 7;
    if (x >= 100000)     return 6;
    if (x >= 10000)      return 5;
    if (x >= 1000)       return 4;
    if (x >= 100)        return 3;
    if (x >= 10)         return 2;
    return 1;
}

Terminal window

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2014-08-18
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    相关资源
    最近更新 更多