当前位置:首页 » 编程语言 » c语言dup
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言dup

发布时间: 2022-02-10 00:26:04

1. linux下c语言编程,管道,p,fork,疑问的是,为什么连用那么多close必须要close 代码如下

文件描述符0,1,2分别表示标准输入标准输出,标准错误输出, 所以在子进程里close(1)是关闭了标准输出, 然后用p(fda[1]);此时未用的最小文件描述符就是1(被关闭);这里关闭fda[0]就是为了说明在子进程是管道的写端(fda[0],不关闭是可以的为了保险起见关闭).然后子进程退出会调用系统程序ls,于是当前的文件目录就被发送到管道中.父进程同理, 就是将标准输出作为管道的读端,它读到的是子进程ls后的内容,对文件计数,

2. 汇编中DUP和EQU指令的含义是什么

EQU,顾名思义,就是等于的意思,例如:
MY_AGE
EQU
26
意思就是说,“MY_AGE”就代表26,以后可以在程序中使用这个名字。
MOV
A,
MY_AGE
;
A=26.
DUP,
意为分配内存空间。
MY_MEMORY
DB
20
DUP(0)
意思就是分配一个内存空间,开始地址为“MY_MEMORY”,大小为20字节(DB
20),每一个字节都初始化为“0”。

3. 汇编语言中DA1 DB 04H DUP(3 DUP(2),2 DUP(3))什么意思

DUP(3 DUP (2), 2 DUP (3))这是个DUP的 "嵌套“。

1、DUP指令的用法是: count DUP (表达式,表达式,表达式,...)。

2、p它有多种意义,包括Linux c 函数、C语言函数DUP、汇编指令、化学物质DUP。

3、由p返回的新文件描述符一定是当前可用文件描述中的最小数值。用p2则可以用fd2参数指定新的描述符数值。

4、如果fd2已经打开,则先关闭。若fd1=fd2,则p2返回fd2,而不关闭它。通常使用这两个系统调用来重定向一个打开的文件描述符。

4. c语言的 p函数

int _p( int handle ); 为一个已经打开的文件建立第二个句柄。
下面的例子中给已经有句柄的标准输出设备(stdout)建立第二个句柄Monitor ,然后再恢复原来的句柄:
int Monitor; Monitor = _p(1); ...... _p2(Monitor,1);
新建的和原有的句柄指的是同一个文件(或设备),该函数不具备关闭文件的功能,因此还需手动关闭。

5. C语言中p和p2函数的不同和使用

p返回的新文件描述符一定是当前可以用描述符中的最小值。下面先打开一个文件来看下文件描述符,为保证测试成功,创建一个测试文件log.txt。

1
2
3
4
5
6
7
8
9
10
11
12
#include <fcntl.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
int fd;
fd = open("./log.txt", O_RDWR);

printf("%d\n", fd);

return 0;
}
上面的代码用读写打开了log.txt这个文件,编译上面的代码然后执行,执行成功的话,应当是输出3,因为0,1,2分别被标准输入,标准输出,标准错误输出占用了。使用p复制这个文件描述符,并尝试移动fd偏移量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
int fd, fd;

fd = open("./log.txt", O_RDWR);
//复制fd
fd = p(fd);

//输出fd,应当为4
printf("%d\n", fd);

//打印出fd和fd的偏移量,都为0
printf("%d\n", (int)lseek(fd, 0, SEEK_CUR));
printf("%d\n", (int)lseek(fd, 0, SEEK_CUR));

//将fd的偏移量+3
lseek(fd, 3, SEEK_SET);

//打印出fd和fd的偏移量,都为3
printf("%d\n", (int)lseek(fd, 0, SEEK_CUR));
printf("%d\n", (int)lseek(fd, 0, SEEK_CUR));

return 0;
}
编译执行上例代码可以发现当移动fd的偏移量时,fd的偏移量也发生了变化。往文件里写入内容试试,先把log.txt内容清空。

6. C语言fflush(stdin)函数是什么意思,在什么情况下用它

1、fflush(stdin)是清空输入缓冲区的意思。stdin就是标准输入 std即standard(标准),in即input(输入),合起来就是标准输入。 一般就是指键盘输入到缓冲区里的东西。

2、在清除文件缓冲区时使用,文件以写方式打开时将缓冲区内容写入文件。

例:

#include <conio.h>

#include <io.h>

#include <stdio.h>

#include <string.h>

void flush(FILE *stream);

int main(void)

{

FILE *stream;

char msg[] = "This is a test";

/* create a file */

stream = fopen("DUMMY.FIL", "w");

/* write some data to the file */

fwrite(msg, strlen(msg), 1, stream);

clrscr();

printf("Press any key to flush DUMMY.FIL:");

getch();

/* flush the data to DUMMY.FIL without closing it */

flush(stream);

printf(" File was flushed, Press any key to quit:");

getch();

return 0;

}

void flush(FILE *stream)

{

int phandle;

/* flush the stream's internal buffer */

fflush(stream);

/* make a plicate file handle */

phandle = p(fileno(stream));

/* close the plicate handle to flush the DOS buffer */

close(phandle);

}

(6)c语言p扩展阅读

使用fflush的注意事项

1、MSDN 文档里也清楚地写着:fflush on input stream is an extension to the C standard (fflush 操作输入流是对C标准的扩充)。以下是 C99 对 fflush 函数的定义:int fflush(FILE *stream);

2、如果stream指向输出流或者更新流(update stream),并且这个更新流最近执行的操作不是输入,那么fflush函数将把任何未被写入的数据写入stream指向的文件(如标准输出文件stdout)。

3、fflush函数的行为是不确定的。fflush(NULL)清空所有输出流和上面提到的更新流。如果发生写错误,flush函数会给那些流打上错误标记,并且返回EOF,否则返回0。

4、如果 stream 指向输入流(如 stdin),那么 fflush 函数的行为是不确定的。故而使用 fflush(stdin) 是不正确的。

7. C语言 fflush(stdin)是什么意思

清空输入缓冲区。
scanf("%d",&a);
scanf("%c",&c);
经常如果这种情况的话,第一次输入的回车可能会被第二次输入操作所捕捉,这个的作用就是清空缓冲,这样就不会出现这种情况了。

8. c语言p2(socket,0)是什么意思

复制描述符,就是把socket复制成0,对0的读写就是对socket的读写。