summaryrefslogtreecommitdiff
path: root/tools/pkg/3/pthread_test/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/pkg/3/pthread_test/main.c')
-rw-r--r--tools/pkg/3/pthread_test/main.c133
1 files changed, 8 insertions, 125 deletions
diff --git a/tools/pkg/3/pthread_test/main.c b/tools/pkg/3/pthread_test/main.c
index 3b01ce3..12632f3 100644
--- a/tools/pkg/3/pthread_test/main.c
+++ b/tools/pkg/3/pthread_test/main.c
@@ -1,131 +1,14 @@
#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <pthread.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <sys/un.h>
-#include <poll.h>
-
-#define SOCKET_PATH "/tmp/test_unix_socket"
-#define THREADS 10
-
-void* client_thread(void* arg) {
- (void)arg;
- int sock = socket(AF_UNIX, SOCK_STREAM, 0);
- if (sock < 0) {
- perror("client socket");
- return NULL;
- }
-
- struct sockaddr_un serv_addr;
- memset(&serv_addr, 0, sizeof(serv_addr));
- serv_addr.sun_family = AF_UNIX;
- strncpy(serv_addr.sun_path, SOCKET_PATH, sizeof(serv_addr.sun_path) - 1);
-
- while (connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
- usleep(100000);
- }
-
- int one = 1;
- while (1) {
- ssize_t n = write(sock, &one, sizeof(one));
- if (n != sizeof(one)) {
- perror("client write");
- break;
- }
-
- }
-
- close(sock);
- return NULL;
-}
+#include <locale.h>
+#include <langinfo.h>
int main() {
+ // Устанавливаем локаль по умолчанию
+ setlocale(LC_ALL, "");
- unlink(SOCKET_PATH);
-
- int listen_fd = socket(AF_UNIX, SOCK_STREAM, 0);
- if (listen_fd < 0) {
- perror("socket");
- exit(1);
- }
-
- struct sockaddr_un addr;
- memset(&addr, 0, sizeof(addr));
- addr.sun_family = AF_UNIX;
- strncpy(addr.sun_path, SOCKET_PATH, sizeof(addr.sun_path) - 1);
-
- if (bind(listen_fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
- perror("bind");
- exit(1);
- }
-
- if (listen(listen_fd, THREADS) < 0) {
- perror("listen");
- exit(1);
- }
-
- pthread_t clients[THREADS];
- for (int i = 0; i < THREADS; i++) {
- if (pthread_create(&clients[i], NULL, client_thread, NULL) != 0) {
- perror("pthread_create");
- exit(1);
- }
- }
-
- int client_fds[THREADS];
- for (int i = 0; i < THREADS; i++) {
- client_fds[i] = accept(listen_fd, NULL, NULL);
- if (client_fds[i] < 0) {
- perror("accept");
- exit(1);
- }
- printf("Accepted client %d\n", i);
- }
-
- struct pollfd pfds[THREADS];
- for (int i = 0; i < THREADS; i++) {
- pfds[i].fd = client_fds[i];
- pfds[i].events = POLLIN;
- }
-
- while (1) {
- int ret = poll(pfds, THREADS, -1);
- if (ret < 0) {
- perror("poll");
- break;
- }
-
- for (int i = 0; i < THREADS; i++) {
- if (pfds[i].revents & POLLIN) {
- int val;
- ssize_t n = read(pfds[i].fd, &val, sizeof(val));
- if (n == 0) {
- printf("Client %d disconnected\n", i);
- close(pfds[i].fd);
- pfds[i].fd = -1;
- } else if (n == sizeof(val)) {
- if (val != 1) {
- printf("bug got %d from client %d\n", val, i);
- } else {
- printf("good value from client %d\n",i);
- }
- } else {
- perror("read");
- }
- }
- }
- }
-
- for (int i = 0; i < THREADS; i++) {
- if (pfds[i].fd != -1)
- close(pfds[i].fd);
- }
- close(listen_fd);
- unlink(SOCKET_PATH);
+ // Пытаемся получить информацию о правилах сортировки (COLLATION)
+ // В POSIX это не предусмотрено напрямую, так что используем другие значения
+ printf("Hi: %s\n", nl_langinfo(CODESET));
return 0;
-}
+} \ No newline at end of file