Задать вопрос
@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? Проблема в основном из за констант.
  • Вопрос задан
  • 369 просмотров
Подписаться 3 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 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.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы