AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-3938402

Harry's questions

Martin Hope
Harry
Asked: 2025-04-27 20:55:26 +0800 CST

chamar uma função (manipulador de limpeza) no término do script de shell

  • 5

É possível chamar uma função no momento do encerramento de um script de shell? Tenho alguns processos daemon em execução em segundo plano, cujo ID de processo está armazenado em um array. No momento do encerramento (por qualquer motivo), quero que uma função/manipulador de limpeza seja chamado para encerrar todos os processos daemon.

# want the below function to be called when the shell script terminates for whatsoever reason
purge () {
  for pid in ${pids[@]}; do
    kill -9 $pid
  done
}

./daemon1 > a.txt 2>&1 & pids+=($!)
./daemon2 > b.txt 2>&1 & pids+=($!)
./daemon3 > c.txt 2>&1 & pids+=($!)

for pid in ${pids[@]}; do
  echo "process: $pid"
done
linux
  • 1 respostas
  • 47 Views
Martin Hope
Harry
Asked: 2025-03-24 19:09:34 +0800 CST

Transformar um tipo de resultado em outro com base no valor Ok

  • 5

Como posso transformar idiomaticamente um Resulttipo em outro Resulttipo com base no Okvalor?

fn get_res1() -> Result<bool, ()> {
    Ok(true)
}

fn get_res2() -> Result<(), String> {
    let res = get_res1().map_err(|err| String::from("Execution failed"))?;

    // map Ok value to Result type(function return type) based on its value
    // Is it possible to combine the below transformation with the above Result type method map_err?
    if !res {
        return Err(String::from("Operation failed"));
    }

    Ok(())
}
rust
  • 1 respostas
  • 58 Views
Martin Hope
Harry
Asked: 2025-02-25 15:14:17 +0800 CST

Canonizar sequência de caminho de arquivo contendo diretório atual com um diretório fornecido

  • 6

É possível canonizar uma string de caminho de arquivo contendo o diretório atual ( .) com um diretório fornecido. Por exemplo, caminho de arquivo => ./abcd.txt, diretório fornecido => /a/b/c. O resultado esperado do caminho de arquivo resultante é /a/b/c/abcd.txt.

fn main() {
    let file_path = "./abcd.txt";
    let cur_dir = "/a/b/c";
    
    let path = std::fs::canonicalize(file_path).unwrap();
    println!("{:#?}", path);
}

Saída

thread 'main' panicked at src/main.rs:5:49:
called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
rust
  • 1 respostas
  • 31 Views
Martin Hope
Harry
Asked: 2025-02-07 15:14:10 +0800 CST

ponto e vírgula no final da expressão de correspondência [duplicado]

  • 6
Esta pergunta já tem uma resposta aqui :
Por que "o temporário faz parte de uma expressão no final de um bloco" é um erro? (1 resposta)
Fechado ontem .

No código abaixo, estou tendo um problema relacionado ao verificador de empréstimo se eu comentar a println!declaração após a expressão de correspondência. E para corrigir esse problema, o compilador está me pedindo para colocar um ponto e vírgula no final da matchexpressão, o que resolve o problema, mas não consegui entender a necessidade disso.

use std::sync::{Arc, Mutex};

#[derive(Default)]
struct A {
    b: Arc<Mutex<B>>,
}

#[derive(Default)]
struct B {
    c: Arc<Mutex<C>>,
}

#[derive(Default)]
struct C {
    d: i32,
}

fn main() {
    let a = A::default();
    
    match a.b.lock().unwrap().c.lock().unwrap().d {
        0 => println!("zero"),
        _ => println!("non-zero"),
    }
    // uncommenting the below line makes borrow checker happy
    // println!("{}", a.b.lock().unwrap().c.lock().unwrap().d);
}

Erro

error[E0597]: `a.b` does not live long enough
  --> src/main.rs:21:11
   |
19 |     let a = A::default();
   |         - binding `a` declared here
20 |     
21 |     match a.b.lock().unwrap().c.lock().unwrap().d {
   |           ^^^----------------
   |           |
   |           borrowed value does not live long enough
   |           a temporary with access to the borrow is created here ...
...
27 | }
   | -
   | |
   | `a.b` dropped here while still borrowed
   | ... and the borrow might be used here, when that temporary is dropped and runs the `Drop` code for type `MutexGuard`
   |
help: consider adding semicolon after the expression so its temporaries are dropped sooner, before the local variables declared by the block are dropped
   |
24 |     };
   |      +

For more information about this error, try `rustc --explain E0597`.
rust
  • 1 respostas
  • 50 Views
Martin Hope
Harry
Asked: 2025-01-14 12:49:59 +0800 CST

Como obter a tag do repositório git clonado em tempo de compilação

  • 4

Eu clonei um repositório git remoto e criei uma nova ramificação a partir da mainramificação. Agora eu quero obter a tag de repositório mais recente (se existir) em tempo de compilação. Eu consegui obter o hash de commit mais recente em tempo de compilação. Abaixo está meu código

// build.rs
use std::process::Command;
fn main() {
    let output = Command::new("git").args(&["rev-parse", "HEAD"]).output().unwrap();
    let git_hash = String::from_utf8(output.stdout).unwrap();
    println!("cargo:rustc-env=GIT_HASH={}", git_hash);
}

// main.rs
fn main() {
    println!("{}", env!("GIT_HASH"));
}
git
  • 2 respostas
  • 43 Views
Martin Hope
Harry
Asked: 2025-01-13 14:55:53 +0800 CST

Como imprimir a versão e o valor do argumento da linha de comando personalizado usando clap crate

  • 5

Estou usando clapcrate para manipular argumentos de linha de comando. Como imprimo o número da versão e um argumento de linha de comando personalizado juntos? O código abaixo, quando executado, cargo run -- --name Harry --versionimprime apenas o número da versão.

use clap::Parser;

/// Simple program to greet a person
#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct Args {
    /// Name of the person to greet
    #[arg(short, long)]
    name: String,

    /// Number of times to greet
    #[arg(short, long, default_value_t = 1)]
    count: u8,
}

fn main() {
    let args = Args::parse();

    for _ in 0..args.count {
        println!("Hello {}!", args.name);
    }
}

Saída de corrente

clap_demo 0.1.0

Saída esperada

Hello Harry!
clap_demo 0.1.0

Carga.toml

[package]
name = "clap_demo"
version = "0.1.0"
edition = "2021"

[dependencies]
clap = { version = "4.5.26", features = ["derive", "env"] }
rust
  • 1 respostas
  • 44 Views
Martin Hope
Harry
Asked: 2024-12-31 16:24:59 +0800 CST

Como passar um closure para ser executado antes que a variante Ok retorne valor

  • 5

Eu tenho uma função que retorna um Resulttipo. Dentro dessa função, outra função está sendo chamada, que retorna Resulto tipo. E, se o valor retornado for uma Errvariante, chame uma função/fechamento antes de borbulhar esse erro, senão, se for uma Okvariante, chame uma função/fechamento e então simplesmente retorne o valor contido. Isso é o que eu escrevi até agora

fn foo1() -> Result<i32, String> {
    Err("error".to_string())
}

fn foo2() -> Result<String, bool> {
    let res = foo1().map_err(|err| {
        println!("foo1 failed {}", err);
        false
    })?;

    // I know I can call some closure in here, but I want something like map_err which will call different closures depending on the Result variant
    Ok(res.to_string())
}

fn main() {
    foo2();
}
rust
  • 2 respostas
  • 62 Views
Martin Hope
Harry
Asked: 2024-12-18 13:40:11 +0800 CST

Equivalente em C++ std::filesystem de st_blksize da função stat do C?

  • 7

Existe um std::filesystemequivalente em C++ da stat()função C declarada em #include <sys/stat.h>para obter informações sobre o st_blksizeatributo?

c++
  • 1 respostas
  • 64 Views
Martin Hope
Harry
Asked: 2024-12-13 14:58:50 +0800 CST

obtendo pid do trabalho em segundo plano usando "$!"

  • 5

Eu escrevi um script de shell para iniciar vários trabalhos em segundo plano e armazenar os IDs de processo deles em uma matriz usando $!. No final, imprimo todos os IDs de processo iterando pela matriz. Quero saber se o script de shell escrito tem um bug? E a razão pela qual sinto que há um bug no meu script de shell é porque $!pode retornar o ID de processo de outro processo se houver vários processos sendo criados no meu PC.

#!/bin/bash

ps -a & pids+=($!) #Does $! return process id of command ps -a for sure
ls -la & pids+=($!) #Does $! return process id of command ls -la for sure
echo ${pids[0]}
echo ${pids[1]}
shell
  • 1 respostas
  • 21 Views
Martin Hope
Harry
Asked: 2024-12-04 17:48:38 +0800 CST

Como passar um ponteiro duplo como um argumento de ponteiro duplo const

  • 5

Como passar um ponteiro duplo não constante como parâmetro constante para outra função?

Meu código:

#include <iostream>
    
void food(const char** begin, const char** end) {
    
}
    
int main(int argc, char** argv) {
    food(argv, argv + argc);    
}

O erro que recebo:

<source>: In function 'int main(int, char**)':
<source>:8:10: error: invalid conversion from 'char**' to 'const char**' [-fpermissive]
    8 |     food(argv, argv + argc);
      |          ^~~~
      |          |
      |          char**
<source>:3:24: note:   initializing argument 1 of 'void food(const char**, const char**)'
    3 | void food(const char** begin, const char** end) {
      |           ~~~~~~~~~~~~~^~~~~
<source>:8:21: error: invalid conversion from 'char**' to 'const char**' [-fpermissive]
    8 |     food(argv, argv + argc);
      |                ~~~~~^~~~~~
      |                     |
      |                     char**
<source>:3:44: note:   initializing argument 2 of 'void food(const char**, const char**)'
    3 | void food(const char** begin, const char** end) {
      |      
c++
  • 3 respostas
  • 93 Views
Martin Hope
Harry
Asked: 2024-11-13 16:39:10 +0800 CST

dividir uma string usando espaço em branco como delimitador contendo o caractere '-'

  • 5

Quero dividir uma string contendo -como primeiro caractere usando espaço em branco como delimitador. Mas o código a seguir parece não funcionar. Se eu remover o -caractere, ele será dividido corretamente. Este é o script

#!/bin/bash

string="-e -/a/b/c/d"
arr=($string)
arrLen=${#arr[@]}
echo $arrLen
echo ${arr[0]} #prints empty
if [ $arrLen = 2 ] && [ ${arr[0]} = "-e" ]; then #this condition gets passed surprisingly
    echo "Hi ${arr[1]}"
fi

Saída

2

Hi -a/b/c/d
bash
  • 1 respostas
  • 61 Views
Martin Hope
Harry
Asked: 2024-11-06 17:22:21 +0800 CST

crie um arquivo usando um comando here-document dentro do script bash [duplicado]

  • 6
Esta pergunta já tem respostas aqui :
here-document dá erro 'fim de arquivo inesperado' (9 respostas)
Fechado há 15 horas .

Como posso criar um arquivo usando o catcomando com um here-document dentro do script de shell"

#!/bin/bash

create_file () {
    cat > a.txt << EOF
    0 abc def 
    ghi jkl mno
    pqrs tuv wxyz
    EOF
}

create_file

Erro

Syntax error: end of file unexpected (expecting "}")
bash
  • 2 respostas
  • 53 Views
Martin Hope
Harry
Asked: 2024-06-10 15:49:47 +0800 CST

Como usar std::bit_cast em um argumento do tipo ponteiro de array

  • 7

É possível passar o endereço do primeiro elemento de um array como argumento para std::bit_cast.

#include <bit>
#include <iostream>

struct A {
    int a;
    int b;
    int c;
    int d;
    int e;

    void print() {
        std::cout << a << ", " << b << ", " << c << ", " << d << ", " << e << std::endl;
    }
};

int main() {
    char arr[20]{};
    // arr is filled with some data
    A a = std::bit_cast<A>(arr);
    a.print();

    const char* arrp = arr;
    // doesn't compile
    A b = std::bit_cast<A>(arrp);
    b.print();
}

Erro

<source>: In function 'int main()':
<source>:23:27: error: no matching function for call to 'bit_cast<A>(const char*&)'
   23 |     A b = std::bit_cast<A>(arrp);
      |           ~~~~~~~~~~~~~~~~^~~~~~
In file included from <source>:1:
/opt/compiler-explorer/gcc-13.2.0/include/c++/13.2.0/bit:81:5: note: candidate: 'template<class _To, class _From> constexpr _To std::bit_cast(const _From&) requires  sizeof (_To) == sizeof (_From) && __is_trivially_copyable(_To) && __is_trivially_copyable(_From)'
   81 |     bit_cast(const _From& __from) noexcept
      |     ^~~~~~~~
/opt/compiler-explorer/gcc-13.2.0/include/c++/13.2.0/bit:81:5: note:   template argument deduction/substitution failed:
/opt/compiler-explorer/gcc-13.2.0/include/c++/13.2.0/bit:81:5: note: constraints not satisfied
/opt/compiler-explorer/gcc-13.2.0/include/c++/13.2.0/bit: In substitution of 'template<class _To, class _From> constexpr _To std::bit_cast(const _From&) requires  sizeof (_To) == sizeof (_From) && __is_trivially_copyable(_To) && __is_trivially_copyable(_From) [with _To = A; _From = const char*]':
<source>:23:27:   required from here
/opt/compiler-explorer/gcc-13.2.0/include/c++/13.2.0/bit:81:5:   required by the constraints of 'template<class _To, class _From> constexpr _To std::bit_cast(const _From&) requires  sizeof (_To) == sizeof (_From) && __is_trivially_copyable(_To) && __is_trivially_copyable(_From)'
/opt/compiler-explorer/gcc-13.2.0/include/c++/13.2.0/bit:83:27: note: the expression 'sizeof (_To) == sizeof (_From) [with _To = A; _From = const char*]' evaluated to 'false'
   83 |     requires (sizeof(_To) == sizeof(_From))
      |              ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
Compiler returned: 1
c++
  • 2 respostas
  • 71 Views
Martin Hope
Harry
Asked: 2024-05-29 13:13:28 +0800 CST

reinterpretar bytes do buffer de acordo com o endianess do sistema (nativo)

  • 6

Estou recebendo dados de outro host via soquete de rede no formato big endian. Como interpretar os bytes recebidos no formato endian nativo (como obter uma visualização ou reinterpretar esses bytes) sem copiar para uma variável temporária.

#include <iostream>
#include <cstdint>

struct A {
    uint16_t msg_id;
    // contains many other fields where total size is greater than 4096

    void print() const {
        // print all the fields of struct A
    }
};

struct B {
    uint16_t msg_id;
    // contains many other fields where total size is greater than 4096

    void print() const {
        // print all the fields of struct B
    }
};

struct C {
    uint16_t msg_id;
    // contains many other fields where total size is greater than 4096

    void print() const {
        // print all the fields of struct C
    }
};

int main() {
    char buff[8192];
    while (true) {
        // data is received in network byte order (big endian) but my system is little endian
        const auto recvd_len = recvfrom(sock_fd, buff, sizeof(buff), 0, nullptr, nullptr);
        const uint16_t msg_id = (buff[0] << 8) | (buff[1] & 0xFF);

        switch (msg_id) {
            case 0x0001: {
                // reinterpret the bytes received as struct A, copy elision
                const A* a_obj = reinterpret_cast<const A*>(buff);
                a_obj->print();
                // the above print call works correctly only if my system is big endian but not little endian
            }

            break;

            case 0x0002: {
                // reinterpret the bytes received as struct B, copy elision
                const B* b_obj = reinterpret_cast<const B*>(buff);
                b_obj->print();
                // the above print call works correctly only if my system is big endian but not little endian
            }

            break;

            case 0x0003: {
                // reinterpret the bytes received as struct C, copy elision
                const C* c_obj = reinterpret_cast<const C*>(buff);
                c_obj->print();
                // the above print call works correctly only if my system is big endian but not little endian
            }

            break;

            default:
            break;
        }
    }
}
c++
  • 1 respostas
  • 81 Views
Martin Hope
Harry
Asked: 2024-05-21 20:17:11 +0800 CST

como usar std::uniform_int_distribution<>::operator()

  • 4

Como usar operator()(Generator& g, const param_type& params);o std::uniform_int_distribution. Este é o meu código

#include <iostream>
#include <random>

int get_random_int(const int lower_limit, const int upper_limit) {
   std::random_device rd{};
   std::mt19937 gen{rd()};

   static std::uniform_int_distribution<> dist;
   
   // use operator()(Generator& g, const param_type& params);
   return dist(gen, lower_limit, upper_limit);
}

int main() {
    std::cout << get_random_int(1, 1000000) << std::endl;
}
c++
  • 2 respostas
  • 66 Views
Martin Hope
Harry
Asked: 2024-01-07 16:46:46 +0800 CST

Como usar a sintaxe `if let Ok()` para uma tupla que requer anotações

  • 5

Gostaria de saber se é possível usar if let Ok()sintaxe no Result<Tuple(Struct, usize), DecodeError>tipo retornado da bincode::decode_from_slicefunção de bincodecrate https://docs.rs/bincode/2.0.0-rc.3/bincode/fn.decode_from_slice.html que requer anotações de tipo explícitas

Eu tentei a seguinte sintaxe

struct A {
    a: i32,
    b: i32,
}

let mut recv_buff = [0u8; 1024];

if let Ok((a_obj, _): (A, usize)) = bincode::decode_from_slice(recv_buff, bincode::config::standard().with_big_endian()) {
        
}

Erro

if let Ok((a_obj, _): (A, usize)) = bincode::decode_from_slice(recv_buff, bincode::config::standard()....
    |                                         ^ expected one of `)`, `,`, or `|`
rust
  • 2 respostas
  • 77 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve