cuốn sách gpt4 ai đã làm

Cuộc gọi hệ thống/đường dẫn thay đổi các ký tự đặc biệt trong lệnh được truyền để thực thi

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 12:48:16 29 4
mua khóa gpt4 Nike

Tôi muốn sử dụng lệnh hệ thống/ống để thực thi lệnh với các ký tự đặc biệt. Dưới đây là mã mẫu. Sau khi thực hiện lệnh thông qua hệ thống/ống, nó sẽ thay đổi lệnh bằng cách thay đổi các ký tự đặc biệt. Tôi rất ngạc nhiên khi thấy lệnh hệ thống đang thay đổi văn bản được truyền dưới dạng lệnh.

chạy(char *cmd)
{
TẬP TIN *trong;
TẬP TIN bên ngoài *popen();
char buff[2048]= {0,};

if(!(in = popen(cmd, "r")))
{
exit(1);
}

while(fgets(buff, sizeof(buff), in)!=NULL)
{
printf("%s", buff);
}
pclose(trong);
}

chủ yếu()
{
char cmd[2048]={0,};

sprintf(cmd,"echo \"'http://1.2.3.4/files-spaces-specialchars-
ascii/%23@%23@@!@!@!@%23%23$$$$$$$ASA(()
(!FreemakeAudioConverterSetup.exe'\" >>/tmp/logger 2>&1");
printf("đây là CMD:[%s]\n",cmd);
system("echo "" > /tmp/logger"); /* để xóa nội dung tệp */
hệ thống (cmd);
chạy(cmd);
}

输出

[thiết bị đầu cuối]$ ./a.out
đây là CMD:[echo "'http://1.2.3.4/files-spaces-specialchars-ascii/%23@%23@@!@!@!@%23$$$$$$$ASA(() (!FreemakeAudioConverterSetup.exe'" >>/tmp/logger 2>&1]

[thiết bị đầu cuối]$ cat /tmp/logger
'http://1.2.3.4/files-spaces-specialchars-ascii/%23@%23@@!@!@!@%23538853885388(()(!FreemakeAudioConverterSetup.exe'

'http://1.2.3.4/files-spaces-specialchars-ascii/%23@%23@@!@!@!@%23538953895389(()(!FreemakeAudioConverterSetup.exe'
[thiết bị đầu cuối]$

Như được hiển thị ở trên, URL lệnh ban đầu đã thay đổi sau khi thực thi thông qua lệnh hệ thống/đường ống.

Bất kỳ ý kiến ​​​​từ các nhà phát triển?

câu trả lời hay nhất

Sửa mã để nó biên dịch rõ ràng:

Lưu ý: Tôi cũng đã thêm cặp lỗi() gọi, vậy nếu popen() Nếu cuộc gọi không thành công, người dùng sẽ được thông báo chính xác về những gì đã xảy ra.

#include 
#include

void run(char *cmd)
{
TẬP TIN *trong;
TẬP TIN bên ngoài *popen();
char buff[2048]= {'\0'};

if(!(in = popen(cmd, "r")))
{
perror("popen đọc thất bại" );
exit(1);
}

while(fgets(buff, sizeof(buff), in)!=NULL)
{
printf("%s", buff);
}

pclose(trong);
}

int chính(void)
{
char cmd[2048]={'\0'};

sprintf(cmd, "%s", "echo \"'http://1.2.3.4/files-spaces-specialchars-"
"ascii/%23@%23@@!@!@!@%23%23$$$$$$$ASA(()"
"(!FreemakeAudioConverterSetup.exe'\" >>/tmp/logger 2>&1");
printf("đây là CMD:[%s]\n",cmd);
system("echo "" > /tmp/logger"); /* để xóa nội dung tệp */
hệ thống (cmd);
chạy(cmd);
}

Sau đó chạy mã này sẽ tạo ra:

đây là CMD:[echo "'http://1.2.3.4/files-spaces-specialchars-ascii/%23@%23@@!@!@!@%23%23$$$$$$$ASA( ()(!FreemakeAudioConverterSetup.exe'" >>/tmp/logger 2>&1]

và con mèo /tmp/logger kết quả:

mèo/tmp/logger

'http://1.2.3.4/files-spaces-specialchars-ascii/%23@%23@@!@!@!@%23%23193951939519395(()(!FreemakeAudioConverterSetup.exe'
'http://1.2.3.4/files-spaces-specialchars-ascii/%23@%23@@!@!@!@%23%23193961939619396(()(!FreemakeAudioConverterSetup.exe'

Về c++ - các lệnh gọi hệ thống/đường dẫn thay đổi các ký tự đặc biệt trong các lệnh được truyền để thực thi, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/38037813/

29 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress