今天写了一个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 ;
}
//
#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 ;
}
//
#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