write 함수에서의 개행
글쓴이: cacus / 작성시간: 화, 2008/02/26 - 11:12오후
write 시스템 콜을 구현해보고 있습니다.
명령 인수를 전달 받아서 파일에 쓰는것을 연습하고 있는데요.
int main(int argc, char *argv[])
fd = open("data.txt", O_WRONLY | O_APPEND | O_CREAT , 0644);
write(fd, argv[1], strlen(argv[1]));
argv[1] 의 문자열을 파일에 쓰려는데 잘 안되네요.
파일에 쓰여진다 하더라도 개행이 안되는데 고수님들께 조언 부탁드리겠습니다.
fopen, fwrite, fget 로는 구현해 봤구요, 저수준의 파일입출력으로만 하려고 합니다.
write 는 주로 소켓프로그램을 짤때 사용하는건가요??
Forums:
줄바꿈을 하려면,
줄바꿈을 하려면, 개행 문자 '\n' 를 출력해주시면 됩니다.
좀 더 나아가 각 플렛폼마다 행바꿈할 때 사용하는 문자에 차이가 있기 때문에, 그런 부분도 생각하셔야 겠지요.
Orion Project : http://orionids.org
개행 문자를
개행 문자를 출력하려고 하는게 아니구요. 개행 문자까지 포함해서 파일에 쓰려고 하는것입니다.
예를 들어 1쓰고 2쓰고 3쓰고 파일을 열어보면 123 이렇게 적혀있겠죠. 이것을 개행해서
1
2
3
이렇게 파일에 쓰려고 하는것입니다.
배열을 이용하면 파일의 마지막에 '\0' 을 포함하는것으로 알고 있는데 '\n' 까지 포함하는 방법은 없을까요?
특별한 경우가 아닌
특별한 경우가 아닌 이상 argv 에는 개행문자가 붙어들어오지 않습니다.
결국 두번 쓰기를 해야한다는 얘기죠.
도스나 맥오에스 개행 문자까지 생각한다면, 좀 더 뭔가 해야겠죠.
표준 입출력 함수들은 자체적으로 입출력 버퍼를 가지고 있어서, 버퍼가 꽉 찼을 때 쓰기 작업을 행하기 때문에, 위와 같은 경우에도, 실제 쓰기 작업은 두번에 걸쳐서 일어나지 않겠죠. 그런 것까지 구현하시려면, 버퍼 관리까지 직접 해야 되구요.
말씀하신 것처럼 개행 문자를 붙인다는 생각으로 하려면, 다른 버퍼에 복사해놓고, 개행문자를 붙여준다음에 쓰기를 해야겠죠.
Orion Project : http://orionids.org
이러면 되지
이러면 되지 않나요?(직접 실행해보진 않았습니다...)
댓글 달기