Я хочу реализовать функциональные возможности этого Баш-команды, чтение/запись к в UNIX сокет:Как правильно читать/писать UNIX-сокеты?
echo „READ <a command>“ | nc -U /tmp/socket
эта команда производит следующий вывод:
Click::ControlSocket/1.3
200 Read handler 'debug_handler.ping' OK
DATA 0
Мой текущий C/C++ реализация выглядит следующим образом:
myprogram.hh
class Myprogram {
public:
Myprogram(int argc, char** argv);
~Myprogram() { };
private:
foo();
int sockfd;
int len;
sockaddr_un address;
};
myprogram.cc
Myprogram::foo() {
sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
address.sun_family = AF_UNIX;
strcpy(address.sun_path, "/tmp/socket");
len = sizeof(address);
if(connect(sockfd, (sockaddr*)&address, len) == -1)
return;
std::string args = "READ <a command>";
if (write(sockfd, args.c_str(), sizeof(args.c_str())) == -1){
std::cout << "Error" << std::endl;
return;
}
int n;
char ret_value[200];
do {
n = read(sockfd, ret_value, 200);
std::cout << std::string(ret_value) << std::endl;
std::cout << "n=" << std::to_string(n) << std::endl;
*ret_value+= n;
} while (n > 0);
close(sockfd);
}
я только получаю этот выход:
Click::ControlSocket/1.3
n=26
вызов следующего чтения() не возвращает и программа ожидает. Я пробовал много читать сокет, все с тем же результатом, , так что было бы здорово, если бы кто-нибудь мог дать мне подсказку, что я делаю неправильно.
'SizeOf (args.c_str())' составляет 4 или 8. – immibis
'SizeOf (args.c_str())' 'должно быть args.size()'. –
C/C++ не является языком. Если вы считаете, что 'class' является ключевым словом, вы пишете C++. –