본문 바로가기

Programming66

리눅스 C 에서 파일 다루기 C나 C++ 언어 자체로 파일상태를 완전히 다 다룰순 없다. 기껏해야 fopen 정도.. linux자체내의 system call을 이용해야 하는데 몇가지 명령어 포스팅 한다. 헤더는 #include #include #include 1. 파일 또는 티렉토리의 상태 (exist or not or ....) stat 라는 system 함수를 사용한다. 사용법은 struct stat st; 로 객체만들고, int fl = stat("./renamed",&st) 이렇게 사용쓴다. 리턴값은 정상적으로 파일 또는 디렉토리의 정보를 얻으면 0, 에러나면 -1 자세한 에러 목록은 errno에 남는다. stat 구조체 항목은 struct stat { dev_t st_dev; /* ID of device containing.. 2012. 5. 3.
fopen 의 segmentation fault. 나는 컴퓨터과를 나오지 않다보니 프로그래밍하는데 기본이 없다. 사실 코딩을 하면서 자료구조를 왜 배워야하지? 그냥 코딩 하면 되잖아 라는 안일한 생각을 했는데 오늘 피봤다..... -_- FILE * fp; fp = fopen("a.txt","rb"); 를 하면 fp엔 파일이 존재할 경우엔 해당 파일 포인터가, 존재하지 않을땐 NULL이 들어간다. 그런데 fopen 그 자체에서 segmentation fault 가 뜨는 이유는 무엇인가 ㄷㄷ 구글링을 해보니 다양한 이유가 있었는데 나의 경우는 fopen이 아니라, OS자체의 Stack memory 를 넘어선 것이었다. (stack overflow 사이트를 그리 들락날락하면서 이런것을 몰랐다니-_-) tcshell 의 경우 limit 라는 명령은 보다 시피.. 2012. 5. 3.
check if file is used or not using c on linux 어떤 파일이 현재 다른 프로세스에 의해 사용중인지 아닌지 알아내려면 어떻게 해야 할까. 단순히 fopen해보고 NULL을 반환하지 않으면 된다고 생각했지만 그게 아니었다. -_- 상당한 삽질을 필요로 했는데, 다른 프로세스에서 작업 중인 파일이라도, fopen이나, fstream.open, 은 모두 가능하다. 이런경우는 c/c++ 언어 자체에서 지원하지는 않고, 사용하고 있는 OS의 라이브러리 또는 api의 힘을 빌려야 한다. 구글세상에 나와있는 정보중 window의 정보는 많지만, (게다가 친절하게 ms에서 관련 msdn까지 제공해준다..특히 C# ㅠㅠ) 리눅스에서 어찌해야할지 삽질을 상당히 해야 했다. ㅠㅠ 결국 찾은 system call을 찾았는데 바로open(), fcntl() 이다. linux .. 2012. 4. 14.
visual studio 2010 path, library 관리 2010은 이전 버전과는 다르게 path, lib추가하는 UI가 바뀌었다 . 뚜둥 없다~~ 그러면 어디 있는가? Eclipse 처럼 각 프로젝트의 프로펄티로 이동! 프로젝트위에서 오른쪽 클릭하면 property가 있고 여기에 이렇게 path추가 할수 있게 되어있다 라이브러리 클릭클릭하여 하나씩 추가하는건 어딧는지 모르겠다 난 그냥 코드에 덧붙여서 사용~ #pragma comment (lib, "gdcmCommon.lib") #pragma comment (lib, "gdcmDICT.lib") #pragma comment (lib, "gdcmDSED.lib") #pragma comment (lib, "gdcmIOD.lib") #pragma comment (lib, "gdcmMEXD.lib") #pragma .. 2012. 2. 27.