- 论坛徽章:
- 0
|
1、dd命令的源代码:
while (1)
{
if (r_partial + r_full >= max_records)
break;
/* Zero the buffer before reading, so that if we get a read error,
whatever data we are able to read is followed by zeros.
This minimizes data loss. */
if ((conversions_mask & C_SYNC) && (conversions_mask & C_NOERROR))
memset (ibuf,
(conversions_mask & (C_BLOCK | C_UNBLOCK)) ? ' ' : '\0', 设定内存空间为0
input_blocksize);
nread = iread (STDIN_FILENO, ibuf, input_blocksize);
if (nread == 0)
break; /* EOF. */
if (nread Linux 1.2.13 on /dev/fd0.)
Set errno to ENOSPC so they get a sensible diagnostic. */
errno = ENOSPC;
break;
}
else
total_written += nwritten;
}
return total_written;
}
static ssize_t
iread (int fd, char *buf, size_t size)
{
for (;;)
{
ssize_t nread;
process_signals ();
nread = read (fd, buf, size);
if (! (nread = max_records)
break;
/* Zero the buffer before reading, so that if we get a read error,
whatever data we are able to read is followed by zeros.
This minimizes data loss. */
if ((conversions_mask & C_SYNC) && (conversions_mask & C_NOERROR))
memset (ibuf,
(conversions_mask & (C_BLOCK | C_UNBLOCK)) ? ' ' : '\0',
input_blocksize);
nread = iread (STDIN_FILENO, ibuf, input_blocksize);
if (nread == 0)
break; /* EOF. */
if (nread 0)
{
/* If the final input line didn't end with a '\n', pad
the output block to `conversion_blocksize' chars. */
size_t i;
for (i = col; i
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/66684/showart_1084945.html |
|