dos2unix 程式碼

格式 DOS(windows) 與 UNIX 的差異是,

DOS 以 '\r' 作為換行符號,而 UNIX 系統以 '\n' 作為換行符號,

一般 Linux 系統都會有 dos2unix 與 unix2dos 的指令,

如果要自行安裝的話,該指令是位於 sysutils 套件中。

因為只有更換 '\r' -> '\n' 或 '\n' -> '\r' 而已,

以前就練習一下,寫一個 dos2unix 的 sample.

/* Author : AppleZu Lab (http://applezu.netdpi.net)
 * Only translate '\r'(ASCII code: 13) to '\n'.
 * License: GNU
 */

#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<stdio.h>

int main(int argc, char *argv[])
{
  FILE *fp;
  int i;
  char buf[1024];
  char buf2[65535];

  if (argc <2) {
    printf("%s filename\n", argv[0]);
    return -2;
  }

  memset(buf, '\0', sizeof(buf));
  memset(buf2, '\0', sizeof(buf2));

  fp=fopen(argv[1], "r");

  if(fp == NULL){
    printf("Can't open %s\n", argv[1]);
      return -1;
  }

  while( fgets( buf, sizeof(buf), fp) != NULL ) {

    for(i=0; i < sizeof (buf); i++) {
      if(buf[i] == 13)
        buf[i] = '\n';
    }

    strncat(buf2, buf, strlen(buf));
  }

  fclose(fp);

  fp=fopen(argv[1], "w+");
  fputs(buf2, fp);
  fclose(fp);
  return 0;
}
Comments