當前位置:首頁 » 編程語言 » 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的讀寫。