今天写了一个UNIX2DOS工具,用于把UNIX系统的文本转换成DOS(Windows)下支持的文本。

两大操作系统文本主要的不同在于换行时UNIX里只有 '\n'字符,而在DOS(Windows)下变成了'\r\n'。

废话不多说,此工具用C语言写成,源代码如下:

 
   // 
   unix2dos
 
   //
 
   #include  
   < 
   stdio.h 
   > 
   
 #include  
   < 
   stdlib.h 
   > 
   

 
   int 
    main( 
   int 
    argc, 
   char 
     
   * 
   argv[])
 {
      
   int 
    ch;
     FILE  
   * 
   fpinPtr, 
   * 
   fpoutPtr;

      
   if 
    (argc 
   != 
   3 
   )
     {
         printf( 
   " 
   UNIX2DOS program.\n\n 
   " 
   );
         printf( 
   " 
   Usage: command source_file target_file\n 
   " 
   );
         printf( 
   " 
   Usage example: \ 
   " 
   unix2dos src.txt obj.txt\ 
   " 
   \n 
   " 
   );
         exit(EXIT_FAILURE);
     }

      
   if 
    ((fpinPtr 
   = 
   fopen(argv[ 
   1 
   ], 
   " 
   rb 
   " 
   )) 
   == 
   NULL)
     {
         printf( 
   " 
   Input file \ 
   " 
   % 
   s\ 
   " 
    could not be opened\n 
   " 
   ,argv[ 
   1 
   ]);
         exit(EXIT_FAILURE);
     }

      
   if 
    ((fpoutPtr 
   = 
   fopen(argv[ 
   2 
   ], 
   " 
   wb 
   " 
   )) 
   == 
   NULL)
     {
         printf( 
   " 
   Outout file \ 
   " 
   % 
   s\ 
   " 
    could not be opened\n 
   " 
   ,argv[ 
   2 
   ]);
         exit(EXIT_FAILURE);
     }

      
   while 
   ( 
   ! 
   feof(fpinPtr))
     {
         ch 
   = 
   fgetc(fpinPtr);
          
   if 
   (ch 
   >- 
   1 
     
   && 
    ch  
   != 
     
   ' 
   \n 
   ' 
   )
         {
             fputc(ch,fpoutPtr);
         }
          
   else 
     
   if 
   (ch 
   >- 
   1 
   )
         {
             fputc( 
   ' 
   \r 
   ' 
   ,fpoutPtr);
             fputc(ch,fpoutPtr);
         }

     }

     fclose(fpinPtr);
     fclose(fpoutPtr);

      
   return 
     
   0 
   ;
 }
 
   

 

当然,还有一个附加产品:DOS2UNIX,源代码如下:

 
   // 
   dos2unix
 
   //
 
   #include  
   < 
   stdio.h 
   > 
   
 #include  
   < 
   stdlib.h 
   > 
   

 
   int 
    main( 
   int 
    argc, 
   char 
     
   * 
   argv[])
 {
      
   int 
    ch;
     FILE  
   * 
   fpinPtr, 
   * 
   fpoutPtr;

      
   if 
    (argc 
   != 
   3 
   )
     {
         printf( 
   " 
   DOS2UNIX program.\n\n 
   " 
   );
         printf( 
   " 
   Usage: command source_file target_file\n 
   " 
   );
         printf( 
   " 
   Usage example: \ 
   " 
   DOS2UNIX src.txt obj.txt\ 
   " 
   \n 
   " 
   );
         exit(EXIT_FAILURE);
     }

      
   if 
    ((fpinPtr 
   = 
   fopen(argv[ 
   1 
   ], 
   " 
   rb 
   " 
   )) 
   == 
   NULL)
     {
         printf( 
   " 
   Input file \ 
   " 
   % 
   s\ 
   " 
    could not be opened\n 
   " 
   ,argv[ 
   1 
   ]);
         exit(EXIT_FAILURE);
     }

      
   if 
    ((fpoutPtr 
   = 
   fopen(argv[ 
   2 
   ], 
   " 
   wb 
   " 
   )) 
   == 
   NULL)
     {
         printf( 
   " 
   Outout file \ 
   " 
   % 
   s\ 
   " 
    could not be opened\n 
   " 
   ,argv[ 
   2 
   ]);
         exit(EXIT_FAILURE);
     }

      
   while 
   ( 
   ! 
   feof(fpinPtr))
     {
         ch 
   = 
   fgetc(fpinPtr);
          
   if 
   (ch 
   >- 
   1 
     
   && 
    ch  
   != 
     
   ' 
   \r 
   ' 
   )
         {
             fputc(ch,fpoutPtr);
         }
     }

     fclose(fpinPtr);
     fclose(fpoutPtr);

      
   return 
     
   0 
   ;
 }
 
   

 

参考代码源:HP UNIX CP命令 ,欢迎各位高手批评指正。 

Wednesday, May 06, 2009