@NikitaWeb

Как перевести код из Linux в Windows?

Есть такой код
#include <errno.h>
#include <stdio.h>
#include <fcntl.h>

int main()
{
  	int actlen;
  	int hfile, hl;
  	char fname[]  = "text.txt";
	char buf[100] = "";
  	struct flock lock = {F_WRLCK,SEEK_SET, 0, 0};

	printf("\033[4;30;45m\033[20;33HHello!\n");
	printf("\033[21;33HLAB4: Block files\n");

  	fflush(stdout);
  	
	hfile = open(fname, O_RDWR, NULL);
	if ( hfile == -1 )
   	{
   		if (errno == EACCES) printf("\033[22;33HFile access denied!\n");
		else  		     printf("\033[22;33HFile not found!\n");
		printf("\033[0m"); 
   		return 1;   
   	}

  	printf("\033[0m");
  	hl = fcntl(hfile, F_SETLK, &lock);
  	if (hl==-1)
   	{
   		printf("\033[2J\033[1;34;42m\033[1;24H");
   		printf("File lock not permitted! Wait...\n");
   		fcntl(hfile, F_SETLKW, &lock);
   	}
  
  	printf("\033[2J\033[1;31;44m\033[1;24H");
  	printf("File lock permitted! Please press <ENTER>.\n");
  	fflush(stdout);
  	getchar();
  
  	printf("\033[12;32H");
  	actlen = read(hfile, buf, 80);
  	write(1, buf, actlen);
	printf("\033[0m"); 
  	printf("\nPress <Enter> for exit!\n");
  	fflush(stdout);
  	getchar();
   
  	lock.l_type=F_UNLCK;
  	if (fcntl(hfile, F_SETLK, &lock)==-1)
   	{
   		printf("File not unlocked!");
   		printf("\033[0m\033[2J");
   		close(hfile);
   		return 1;
   	}
  	printf("\033[0m\033[2J"); 
  	close(hfile);
 }

Он под Linux.
Какие строки нужно поменять для Windows? Проблема в основном из за констант.
  • Вопрос задан
  • 365 просмотров
Пригласить эксперта
Ответы на вопрос 2
tsarevfs
@tsarevfs
C++ developer
Работа с файлами под linux и windows происходит разными способами. Ищите примеры для WinAPI:
https://docs.microsoft.com/en-us/windows/win32/api...

Кроссплатформенное решение будет иметь 2 набора функций под ifdef директивами.

Если нужно просто запустить это на компьютере с виндой, то есть виртуальные машины или WSL. Тогда можно ничего не переписывать, а работать в linux окружении под windows.
Ответ написан
Комментировать
CityCat4
@CityCat4 Куратор тега C
//COPY01 EXEC PGM=IEBGENER
Хэндловый ввод-вывод, блокировка файлов, и ESC-последовательности в винде работать не будут (про последнее правда не уверен). Этот пример нужно полностью переписывать, читая MSDN.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час
21 нояб. 2024, в 21:42
100000 руб./за проект