Tag: dup

使用fork和dup的简单http通用服务器

我正在尝试编写一个非常基本的HTTP服务器。 我想将服务器和服务分成两个单独的可执行文件(类似于inetd)。 所以我有一个通用服务器,它使用exec分叉服务并执行其代码。 主循环如下: while(true) { int client_sock; if ((client_sock = accept(server_sock, (struct sockaddr *) NULL, NULL)) < 0) { return -1; } pid_t pid = fork(); if (pid == 0) { close(server_sock); close(0); dup(client_sock); close(1); dup(client_sock); execvp(argv[2], argv+2); return -1; } else if (pid < 0) { assert(false); } close(client_sock); } 该服务读取stdin,并在stdout上写入并处理简单的http请求。 当我使用nc连接到我的服务器时,一切似乎都工作正常。 nc接收并显示预期的http回复。 […]

在C中重定向stdout时的奇怪行为

我正在尝试将stdout重定向到一个文件,然后在C中将其恢复为原始文件,但我面临以下奇怪的问题 – 下面的代码片段成功写入 in stdout in stdout 在stdout和相应in file中的文件中都可以。 #include #include #include #define STDOUT 1 int main(int argc, char* argv[]){ printf(“in stdout \n”); int old_out = dup(STDOUT); close(STDOUT); int fd = open(“./redirected”,O_CREAT|O_RDWR|O_TRUNC,0777); printf(“in file \n”); close(fd); dup(old_out); printf(“in stdout\n”); return EXIT_SUCCESS; } 但是,删除我的主要function的第一行: #include #include #include #define STDOUT 1 int main(int argc, char* argv[]){ int […]

有人可以解释C中的dup()吗?

我知道dup,dup2,dup3“ 创建文件描述符oldfd的副本 ”(来自手册页)。 但是我无法消化它。 据我所知,文件描述符只是用于跟踪文件位置及其方向(输入/输出)的数字。 是不是更容易 fd=fd2; 每当我们想要复制文件描述符? 还有别的…… dup()使用编号最小的未使用描述符作为新描述符。 这是否意味着它还可以作为值stdin , stdout或stderr,如果我们假设我们有close() –其中一个?

将STDOUT和STDERR重定向到C中的套接字?

我正在尝试将STDOUT和STDERR重定向到套接字。 我做了: if(fork() == 0) { dup2(newsock, STDOUT_FILENO); dup2(newsock, STDERR_FILENO); execvp(); } 不知何故,它只显示了输出的第一个小部分。 例如,当我尝试执行ls或mkdir时,它显示在“mkdir”上。 有什么问题? 我尝试过它可以工作,但我只能重定向STDOUT或STDERR之一 close(1); dup(newsock); 非常感谢。