LINUX.ORG.RU

История изменений

Исправление Moisha_Liberman, (текущая версия) :

Если есть системный вызов и tcc может дёрнуть соответствующую функцию из стандартной библиотеки, то именно это он и сделает. Самый простой пример на основе кода чуть выше (скрипт находится в файле test):

#!/usr/bin/tcc -run

#include <stdio.h>
#include <unistd.h>
#include <math.h>
#include <memory.h>
#include <stdlib.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

int main(int argc, char **argv) {
	char hostname[1024];
	struct addrinfo hints, *info, *p;
	int gai_result;

	printf("Hello world 1!\n");
	printf("Arg: %s\n", argc>1?argv[1]:"-=-");

	printf("Calculating sample: %f\n", sqrt(4)); /* This */

	/* This shouldn't work without of https at localhost, Toxo2. */
	hostname[1023] = '\0';
	memset(&hints, 0, sizeof hints);
	hints.ai_family = AF_UNSPEC;
	hints.ai_socktype = SOCK_STREAM;
	hints.ai_flags = AI_CANONNAME;
	if((gai_result = getaddrinfo(hostname, "https", &hints, &info))!= 0) {
		fprintf(stderr, "Result: %s\n", gai_strerror(gai_result));
		exit(EXIT_FAILURE);
	}
	for(p = info; p != NULL; p = p->ai_next) {
		fprintf(stderr, "hostname is: %s\n", p->ai_canonname);
	}
	freeaddrinfo(info);

	execve("./test", NULL, NULL); /* And this */
	return(0);
}

Для скриптоты на С вполне годно. Если на машине нет сервера с поддержкой https, то работать не будет. На машине с таким сервером всё работает.

Да, сам хотел с места крикнуть tcc, но тут уже опередили, как я погляжу. =)

Исходная версия Moisha_Liberman, :

Да нет там ограничений.

Если есть системный вызов и tcc может дёрнуть соответствующую функцию из стандартной библиотеки, то именно это он и сделает. Самый простой пример на основе кода чуть выше (скрипт находится в файле test):

#!/usr/bin/tcc -run

#include <stdio.h>
#include <unistd.h>
#include <math.h>
#include <memory.h>
#include <stdlib.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

int main(int argc, char **argv) {
	char hostname[1024];
	struct addrinfo hints, *info, *p;
	int gai_result;

	printf("Hello world 1!\n");
	printf("Arg: %s\n", argc>1?argv[1]:"-=-");

	printf("Calculating sample: %f\n", sqrt(4)); /* This */

	/* This shouldn't work without of https at localhost, Toxo2. */
	hostname[1023] = '\0';
	memset(&hints, 0, sizeof hints);
	hints.ai_family = AF_UNSPEC;
	hints.ai_socktype = SOCK_STREAM;
	hints.ai_flags = AI_CANONNAME;
	if((gai_result = getaddrinfo(hostname, "http", &hints, &info))!= 0) {
		fprintf(stderr, "Result: %s\n", gai_strerror(gai_result));
		exit(EXIT_FAILURE);
	}
	for(p = info; p != NULL; p = p->ai_next) {
		fprintf(stderr, "hostname is: %s\n", p->ai_canonname);
	}
	freeaddrinfo(info);

	execve("./test", NULL, NULL); /* And this */
	return(0);
}

Для скриптоты на С вполне годно. Если на машине нет сервера с поддержкой https, то работать не будет. На машине с таким сервером всё работает.

Да, сам хотел с места крикнуть tcc, но тут уже опередили, как я погляжу. =)