stdio.h를 했더니 fopen이랑 추천해주고 있어서 부랴부랴 찾아보니 unistd.h를 쓰라네?
cp.c:18:9: warning: implicit declaration of function ‘read’; did you mean ‘fread’? [-Wimplicit-function-declaration] len = read(fd_src, buff, BUFF_LEN); ^~~~ fread cp.c:20:4: warning: implicit declaration of function ‘write’; did you mean ‘fwrite’? [-Wimplicit-function-declaration] write(fd_dst, buff, len); ^~~~~ fwrite cp.c:25:2: warning: implicit declaration of function ‘close’; did you mean ‘pclose’? [-Wimplicit-function-declaration] close(fd_src); ^~~~~ pclose
예외처리 하나도 없이 인자만 받아서 복사하는 cp 명령의 마이너 버전 코드.
#include <unistd.h>
#include <fcntl.h>
#define BUFF_LEN 4096
int main(int argc, char** argv)
{
int fd_src = 0;
int fd_dst = 0;
int len = 0;
char buff[BUFF_LEN];
fd_src = open(argv[1], O_RDONLY);
fd_dst = open(argv[2], O_CREAT | O_TRUNC | O_RDWR);
while(1)
{
len = read(fd_src, buff, BUFF_LEN);
if(len > 0)
write(fd_dst, buff, len);
else
break;
}
close(fd_src);
close(fd_dst);
}
더블 클릭해서 실행하니 mono develop 가 뜨고 빌드 옵션을 Debug에서 Release로 바꾸고
빌드하니
띠용.. PE32 executable 이 뜬다.
~/ar/bin/Release$ file *
ar.exe: PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows
ar.exe.config: XML 1.0 document, UTF-8 Unicode (with BOM) text, with CRLF line terminators
ar.pdb: Microsoft Rosyln C# debugging symbols version 1.0
물론 윈도우에서 프로젝트 파일 자체를 그대로 전송해 왔기 때문에
Deub로 가면 아래와 같이 나오는데 pdb는 메시지가 조금 다른데 exe는 리눅스 상에서 인식하는 포맷이 동일하게 나온다.
~/ar/bin/Debug$ file *
ar.exe: PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows
ar.exe.config: XML 1.0 document, UTF-8 Unicode (with BOM) text, with CRLF line terminators
ar.pdb: MSVC program database ver 7.00, 512*115 bytes
그나저나 4.7의 모든 것 이라고 해놓고
WPF, WWF 그리고 제한된 WCF 그리고 제한된 ASP.NET 비동기 stack을 제외한... (야이!!!)
Everything in .NET 4.7exceptWPF,WWF, and withlimited WCFandlimited ASP.NET async stack.